saulGoodman 一个专注于红队攻防研究的公众号 关注 MySQL手注之布尔型盲注详解 布尔型盲注简介 基于布尔型SQL盲注即在SQL注入过程中,应用程序仅仅返回True(页面)和False(页面...MySQL盲注常用函数 length() 返回字符串的长度,例如可以返回数据库名字的长度 substr() ⽤来截取字符串 ascii() 返回字符的ascii码 sleep(n) 将程序挂起⼀段时间...,n为n秒 if(expr1,expr2,expr3) 判断语句 如果第⼀个语句正确就执⾏第⼆个语句如果错误执⾏第三个语句 盲注流程 1、判断是否存在注入,是字符型还是数字型注入 注入点原查询代码: $...getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 判断注入: 注入语句: 1' and 1=1 # 带入查询的语句...substr的str,要截取的字符 limit 0,1 这条语句是 limit 子句来限制查询的数量,具体格式是这样的: select * from tableName limit i,n tableName
识别漏洞 通常在 Blind SQLi 中,您无法真正看到您输入的查询的输出。在这种情况下,验证漏洞的唯一方法是查看网站是否成功/部分加载。...给定的查询将定义数据库名称的第一个字符是 111 (o) http://domain.com/index.php?...继续枚举数据库名称的第二个字符。 给定的查询将定义数据库名称的第一个字符是 98 (h) http://domain.com/index.php?...给定查询将测试第一个表的字符串长度是否等于 4 的条件。...使用与之前相同的方法,枚举列名的长度。
目前的CTF中MySQL的盲注依然是热点之一,然而盲注又被分成Like盲注、正则盲注、异或盲注等等太多类型,让新入门的萌新十分摸不到头脑。...本文希望以言简意赅的语言帮助刚入门WEB CTF的选手们快速“拿捏”MySQL盲注。...目前CTF中十有八九是MySQL,所以本文也就全部讲MySQL了。 0x01 盲注介绍▸ 什么是盲注?...0x02 盲注怎么注▸ 盲注的步骤▸ 前面一直是以抽象的中文来表示盲注的操作,这里我们使用SQL语句进行更详细的说明。...0x03 盲注的两个基本问题▸ 两个基本问题是什么▸ 通过上面的内容,你已经能够进行简单的盲注了,然而实际的题目中会加上各种各样的过滤,为了绕过这些过滤,盲注被分成了LIKE注入、MID注入、LEFT注入
01 盲注简介 盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。...对于基于布尔的盲注来说,我们可以构造一条注入语句来测试我们输入的布尔表达式,而这布尔表达式结果的真假,决定了每次页面有不同的反应。...对于基于时间的盲注来说,我们构造的语句中,包含了能否影响系统运行时间的函数,根据每次页面返回的时间,判断注入的语句是否被成功执行。...03 盲注分类 基于布尔SQL盲注 基于时间的SQL盲注 基于报错的SQL盲注 04 盲注的流程 找寻并确认sql盲注点 强制产生通用错误界面 注入带有副作用的查询 根据布尔表达式的真假结果,结合不同的返回结果确认注入是否成功...测试过程: 首先对name字段进行加锁,返回结果为1且时间为0证明加锁成功; 图片 建立另一个mysql连接,对同样的字段进行加锁,返回结果为0且时间是自定义的5,证明加锁失败; 图片 利用上面的基础理论加上时间盲注原理
所谓盲注就是在正常页面没有输入点,或者无法影响页面输出的内容~ 然后我们无法借助页面来返回数据库中我们想要注出的数据,这时候就要构造sql语句让它报错,或者进行一系列的判断。...这一篇讲的基于布尔的盲注。 科普文,给学弟妹的...大牛绕过绕过... 一、字符串返回字符函数 ? 不得不提的是ord函数和ascii函数的用法一样,假如str为空字符串,则返回值为 0 。...所谓的盲注就是没有输出点。就是你和数据库产生了交互,但是在页面上去没有显示数据库的内容。具体可以参考sqli labs 基础练习5~ ?...于是我们就要用到我们前面介绍的几个函数来注入了。 具体如下: ? 对比以下的ascii码表,我们发现注入出来的数据库名是无误的。 ? 但是如果是传参的语句呢?...那么我们就没有办法像mysql客户端一样的回显了…不然怎么叫盲注。 输入:http://localhost/sqli-labs/Less-5/?id=1 可以看到这个是正常页面。 ?
这几天在学习sql注入的有关内容,今天记录一下我认为比较重要的部分,即sql盲注,我一开始学习的时候看到了好多的函数,看着看着就弄混了,相信不少新入门的师傅也有类似的困惑,经过多番心理斗争,我终于决定将这部分知识好整理一下...盲注类型 基于布尔的盲注 特征 被注入的页面没有sql语句执行错误的显示,页面只有正常返回和不正常返回两种状态 示例 这里我拿sqli-labs的less8作为布尔型盲注的例子 我们可以看到这个页面正常会返回...You are in...........而不正常的时候会无任何返回,这就很符合布尔盲注的特征 正常返回: ?...剩下的表名和字段将脚本稍作修改即可猜解出来,篇幅原因不再重复操作 基于报错的盲注(floor报错注入) 原理 该类型的注入利用了mysql的8652号BUG(官方链接:https://bugs.mysql.com...想注出全部表名修改limit参数即可 列名和数据同理修改查询语句就可以了。
确定问题点 在这次的测试过程中发现了一个注入点,通过测试发现返回包内包含了sql语句,确认可以注入,开始了这次的注入尝试。...sqlmap根本法利用这个漏洞,但返回的数据包中实打实出现我数据库语句,所以我把返回的数据库语句拿出来,开始了一点点的构造进程。 ?...但返回的内容需要进行闭合而且返回内容不可以利用,所以可以排除报错等类型注入形式,可以探测的注入类型就仅剩下两种了:时间型盲注,布尔型盲注直接在目标后加入测试语句。...空格无法通过,系统会返回404,针对之前爆出的数据库语句,利用%25和%20绕过对对单独%和空格的过滤构造出以上的数据库语句完成语句的闭合,成功返回200,确认可以返回正常数据包,并可以根据数据库语句的正确来进行布尔型盲注测试...,确认数据库名称 三、工具思路 3.1 Post数据包利用 利用python的数据包发送来批量测试目标内容 和时间型盲注不同,布尔型盲注要根据返回数据包的不同来确认问题 %0a(ascii(substr
0x001 时间盲注简介 时间盲注就是在页面进行SQL注入并执行后,前端页面无法回显注入的信息。...此时,我们可以利用sleep()函数来控制延迟页面返回结果的时间,进而判断注入的SQL语句是否正确,这个过程称之为时间盲注。...0x002 漏洞测试代码 以下为本次实验测试的基于时间的数字型盲注漏洞代码,可以部署到本地进行配合脚本测试验证。 0x003 时间盲注之获取表名长度 ---- 1....第3个表': 5, '第4个表': 5} [+] 第5个表长度为: 5 {'第1个表': 4, '第2个表': 4, '第3个表': 5, '第4个表': 5, '第5个表': 5} 0x004 时间盲注之获取表名
然后自己搭建一个极其简单的mysql查询网页。 ? 网页代码: #sql.php <!...='') { $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = 'root...这个是因为MySQL不区分大小写,而且大写字符的ASCII码都比小写的小。...MySQL中的JSON对象是二进制对象,因此cast(0 as json)回返回二进制’0’。也就是相当于”select ‘f0’的是,代码中str1的字符的顺序一定要按照ASCII码从小到大排序(这个坑了我好久)。”
盲注是 SQL 注入的重要的技术之一,在现实中的 SQL 注入案例中,往往很难将注入的结果直接回显出来。因此,盲注也就成为了 SQL 注入必不可少的手段之一。...本文想分享一个如何大大提升盲注效率的技巧。 与或运算 与或运算,操作符分别为 & 以及 |,大多数人应该会在实际开发过程中很少使用到与或运算。...通过与运算盲注 ? 看到这里,你可能还是一头雾水,与运算和盲注有啥关系?...通过这样的方式,我们就可以确定104每个比特位上的数据是什么。那这和我们SQL盲注又有什么关系呢?...myapp myapp_card myappcardperform 枚举 121 276 与运算 35 70 总结 通过上面的对比,我们可以看出在SQL盲注中,如果通过与运算来进行盲注,可以大大提升盲注的效率
查看这个月 push的仓库,发现了泄露的 secret key,并且注意到后端数据库是 Sqlite ? 利用私钥伪造管理员的 session token ?...select*,然后进行遍历渲染,因为SQL语句中没有 where字句,所以想利用注册用户名进行二次注入是行不通的 并且在渲染时不存在 ssti,因为遇到 Jinja2引擎,第一想法当然是模版注入,但这里走不通...---- 然后在一番 Google后,想到这里应该是 Sqlite数据库的盲注,但是经测试 sqlite数据库的延时函数 randomblob被过滤了,所以无法进行延时注入 结合这两个接口的功能,我们可以想到...,可以利用删除用户的接口进行 Bool盲注: 创建用户 iv4n 删除用户 payload: iv4n' and (select hex(substr(flag,{i},1)) from flag...)=hex('{j}')-- - 假如 and后的条件为真,即删除创建的 iv4n用户,通过查看返回页面是否存在字符串 iv4n进行布尔盲注,盲注脚本: import requests url = "
【实验目的】 通过本实验理解SQL时间盲注漏洞的定义方法,掌握基于SQL时间盲注的手工注入方法,熟悉SQL时间盲注存在的原因,掌握SQL时间盲注的防护方法。...SQL语句原理 (1)sleep(n)语句:使数据库在暂停n秒之后再将搜索结果输出; (2)if((条件),m,n)语句:若条件为真,返回m;若条件为假,返回n; 3.时间盲注常用函数 length...id=1' and sleep(10) --+ 响应明显变缓慢,响应速度如下: 对比没有使用sleep()函数时的状态如下: 得出结论:存在时间盲注。...下面基于时间盲注进行数据库信息获取: 第四步 获取数据库名的长度 http://【靶机IP】/Less-9/?...【思考与总结】 通过本次实验,成功实现了利用SQL时间盲注漏洞获取了数据库的表单信息,掌握了SQL时间盲注漏洞的手工攻击方法,在此基础上可以深入理解对其的防护策略。
某天,当我参与某个漏洞众测项目中,偶尔发现之前一个从未见过的子域名网站,因此我决定深入测试一下。该网站主界面是一个登录页面,开放了用户注册功能,所以我就注册了一个账户,最后试出了一个时间盲注来。 ?...order=type&ordering=ASC&search=路径下,这里的ASC参数看着好眼熟,其后台数据库的查询语句可能会是这样的:SELECT * FROM referrals ORDER BY...反复尝试不同Payload之后,我发现在ORDER BY 语句后的UNION SELECT查询是不可行的,因为其后台数据库的查询语句估计是这样的-SELECT * FROM referrals ORDER...那就试试报错型或基于时间的盲注吧。先是报错型,服务端总是返回一个带500状态的空白页面,没有额外信息,因此排除。最后只剩下基于时间的盲注Time-Based Sql注入了。...在用相关的时间盲注Payload尝试了MySQL, MSSQL, 和PostgreSQL之后都无果,尽管我在我本地虚拟机上测试是有效的,但是在该网站中却连以下最基本的Payload都无效: sleep(
接下来的目标是通过该接口获取数据,由于无法回显详细的报错信息,也无法展示查询的信息,所以只能通过单字符猜解的方式,也就是大家常说的盲注,适用于这个场景下的盲注类型,可以选择通过构造报错语句的方式也就是布尔盲注...,还可以选择借助时间函数的方式也就是时间盲注。...在有其他选择的情况下,通常最后选择使用时间盲注,毕竟时间盲注所要消耗的时间是最长的,当然也是最万能的方式,在我的理解中不同注入方式的优先级是这样的: 报错注入 > 联合查询 > 布尔盲注 > 时间盲注...> 数据库带外查询 今天的手工测试方法选用布尔盲注,如果时回显错误信息的情况下,以下查询语句可以返回数据库的名称: '+convert(int,db_name())+' 因为数据库的名称是字符串,而将字符串转换为数字型时会报错...: 接下来启动攻击后,下图可以看到获取到的数据库名称: 到这里整个盲注测试的过程就结束了,如果想要获取数据库名称之外的信息,可以替换 payload 中 DB_NAME () 部分,比如: select
实验目的 通过本实验理解MySQL盲注常用函数的功能,掌握MySQL盲注常用函数在SQL注入中的应用方法,熟悉SQL注入的常见流程。...id=1’时浏览器前端的反应 可以看到,如果运行返回结果正确的时候只返回you are in…,不会返回数据库当中的信息了,此时可以采用逻辑判断是否正确的盲注来获取信息。...(2)另外一个函数ascii()功能如下: 根据获取的数据库的名称为security,那么继续猜测security数据库下面的表信息: 测试语句 ascii(substr((select table_name...(3)函数cast()和convert() MySQL的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。 可以转换的类型是有限制的。...注入漏洞来获取MySQL数据库中的信息。
关于HBSQLI HBSQLI是一款功能强大的自动化SQL注入漏洞测试工具,该工具可以帮助广大研究人员以自动化的形式测试基于Header的SQL盲注漏洞。...HBSQLI本质上是一个命令行工具,旨在针对Web应用程序执行基于Header的SQL盲注漏洞扫描与检测。...该工具旨在提升Web应用程序的安全性而构建,请不要在未经授权的情况下使用该工具对目标进行测试。..., --url URL 以输入参数提供单个目标URL地址 -p PAYLOADS, --payloads PAYLOADS 包含SQL盲注...文件,或者使用自定义的Payload文件,请记住Payload文件中设置的每一个Payload间隔应该设置为30秒; 2、你可以选择项目提供的Header文件,或者根据自己的实际需求使用更多的自定义Header
背景 很久以前做过布尔盲注的题目,但是当时用的是网上的代码,跑出来flag了也是一知半解,没有收获。 今天花了一下午的时间写了一个布尔盲注的脚本。...介绍 布尔盲注使用场景的特征十分明显,即界面不会给出查询的具体结果,也不会给你报错信息。而只会告诉你查询成功还是查询失败。...如果手工来实现这一过程,就会变得非常繁琐,这里我花了一个下午的时间写了一个盲注的脚本。 运行过程十分舒适和人性化。...wuuconix/SQL-Blind-Injection-Auto: 自己写的SQL盲注自动化脚本 (github.com) 最后再给出演示视频。...战术总结 经过这次脚本的编写,我对布尔盲注的原理和实现方式都有了深刻认识。 同时提升了python脚本的编写能力。
0x01 绕过安全狗继续SQL注入 其实说白了,绕过WAF就是混淆你的SQL语句,让它以另一种方式呈现出来,以绕过WAF的黑名单正则表达式匹配,至于具体的混淆方法,网络上有很多的文章已经讲的够详细了,在这里我就直接进入实战环节...这里我们主要用的绕过方法是: 1.利用()代替空格 2.利用mysql特性/*!*/执行语句 3.利用/**/混淆代码 我给出的注入语句是: 1' union/*%00*//*!...当然,在真实环境下直接union select数据的注入点是非常少见的,还是盲注占多数,按照上面的思路方法我们可以非常轻松的测试出绕过安全狗的盲注语句,我测试了好长时间,总结出的语句如下: 判断: 1'...、盲注、基于时间的盲注从获取数据库名一直到获取表名、字段名、数据值的所有过狗语句。...但是这里比较坑的一点是安全狗3.5版本会拦截关键字information_schema,这样利用起来就比较麻烦了,不过私神还是提供了一种方法绕过: 当mysql版本>=5.6时,可以用如下语句代替: Select
($_GET["order"])."`"; $result = mysql_query($sql); 接下来我们将采用布尔盲注和时间盲注的方式进行攻击。...布尔盲注 布尔盲注是指在进行 SQL 注入时,根据返回的结果是 True 或者是 False 来得到数据库中的相关信息。...首先是正常的进行请求,运行结果如下: 图片 接下来使用布尔盲注,因为上个例子已经知道数据库名是 exercises,因此这里就不做过多猜测,注入语句如下: order=name` RLIKE (SELECT...时间盲注 除了布尔盲注之外,还存在其他的盲注方式,比如时间盲注。 时间盲注是指攻击者向目标应用程序发送恶意的请求时,如果存在时间盲注漏洞,应用程序可能会有不同的响应时间。...【写作提纲】 介绍信息搜集的作用以做法; 对 SQL 注入进行入门介绍; 2.1. 基础注入介绍; 2.2. SQL 盲注介绍:布尔盲注与时间盲注; 介绍常用的绕过方式; 3.1.
($_GET["order"])."`"; $result = mysql_query($sql); 接下来我们将采用布尔盲注和时间盲注的方式进行攻击。...布尔盲注 布尔盲注是指在进行 SQL 注入时,根据返回的结果是 True 或者是 False 来得到数据库中的相关信息。...首先是正常的进行请求,运行结果如下: 接下来使用布尔盲注,因为上个例子已经知道数据库名是 exercises,因此这里就不做过多猜测,注入语句如下: order=name` RLIKE (SELECT...时间盲注 除了布尔盲注之外,还存在其他的盲注方式,比如时间盲注。 时间盲注是指攻击者向目标应用程序发送恶意的请求时,如果存在时间盲注漏洞,应用程序可能会有不同的响应时间。...正常查询时,所需时间如下: 构造时间盲注的 SQL 语句: order=age` and if(ascii(substr(database(),1,1))=101,sleep(1),1)--+ 运行结果