打开题目。index.php登陆界面。尝试register.php。提示:注册已经关闭
<form action="register.php" method="GET">
用户名:iscc_<input type="text" name="uname" placeholder="请输入四位数字" />
<br/><br/>
密码:<input type="password" name="pwd"/>
<br/><br/>
<input type="submit" value="注册">
</form>
从这看出来了。用户名是四位数字
简单测试下。登陆界面存在注入。过滤很多关键字。
响应头发现hint
$sql="SELECT pwd FROM user WHERE uname = '{$_POST['uname']}'";
$query = mysqli_query($con,$sql);
if (mysqli_num_rows($query) == 1) {
$key = mysqli_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
echo "xxxxxxxxx";
}else{
echo "你这密码不太对啊";
}
}else if(mysqli_num_rows($query) == 0){
echo "你这密码不太对啊";
}
else{
echo "数据太多了";
}
部分源码:
查询纪录要=1
用户提交的密码=查询结果的密码
这里使用==。弱类型比较
由于关键字较多都被过滤。这里就要学习下新的注入姿势
group by … with rollup
group by … with rollup主要是用于统计数据的
普通的group by语句。用来排序。
group by 字段 with rollup
用来计算字段的平均值
那么这与这题目有什么关系呢。
查看题目源码。我们无法得知用户密码。但是要构造密码==POST密码
想到了NULL。通过查询使得用户密码为NULL而不是空
满足了查询字段为1,并且NULL与空。弱类型比较相同
OK。我们来构造下
方法一:
利用异或。1^1=0=字符串 弱类型
limit 1 offset 1=limit 1,1
方法二:
前面说了。用户名是四位数字。当我们输入正确用户名时。返回结果就是null
注入成功会输出一个字符串
+ADg-d+ADIAMA-d+ADUANw-e+ADI-f+ADIAYgA5AGI-e+ADUALw-f+AGIAMwAw-e+ADcAMA-f+ADcAOAAxADMANAA4ADk-dd+AGE-e+ADcAOQBi-e+ADAANwA5ADIANQBhADMANABhAC4AcABoAHA-
纪录下这是utf-7编码。
http://toolswebtop.com/text/process/decode/UTF-7
<?php
show_source(__FILE__);
$a = @$_REQUEST['a'];
@eval("var_dump($$a);");
?>
得到webshell
)闭合vardump();
eval("var_dump($a);system('ls');");