sqli-labs第十八题

查看题目


基于错误的请求头注入

一个登录表单,显示了ip地址。
测试一通毫无头绪。。。看看源码

审计源码

用户名和密码都做了输入检查

if(isset($_POST['uname']) && isset($_POST['passwd']))

	{
	$uname = check_input($_POST['uname']);
	$passwd = check_input($_POST['passwd']);

提供正确的用户名和密码后,uagent,IP地址,用户名会被插入数据库中。

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
	$result1 = mysql_query($sql);
	$row1 = mysql_fetch_array($result1);
		if($row1)
			{
			echo '<font color= "#FFFF00" font size = 3 >';
			$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);

注入测试

首先要获得一个用户名和密码
试了半天,一个也不对,直接去查数据库

使用BP抓包,方便修改请求头

在user-agent参数后加一个单引号,然后放走数据包,可以看到页面报出一个错误

源码也看到了,直接构造payload:',NULL,(select updatexml(1,concat(0x7c,user()),1)))#
这里先使用单引号闭合第一个参数,然后提供空的第二个参数,在第三个参数构造一个updatexml的报错,最后闭合括号,注释掉剩下的语句。
打卡BP,输入用户名,密码后提交。在BP中修改请求头的user-agent参数,然后关闭拦截。

成功爆出数据库用户名

posted @ 2020-08-21 21:41  爱十三的柒  阅读(412)  评论(0编辑  收藏  举报