LESSON 5:

  典型的布尔盲注。

  盲注:sql注入过程中,sql语句的执行结果不回显到前端,这个时候就只能用一些别的方法进行判断或者尝试,这个判断或者尝试就叫做盲注。盲注又分为:1.基于布尔SQL盲注、2.基于时间的盲注、3.基于报错的盲注。

  布尔盲注:一般适用于页面没有回显字段(不支持联合查询,即union select),且web页面返回True或者False,在lesson 5里就相当于回显 You are in ......(true)或者报错(false),利用枚举思想或者二分法来构造SQL语句去判断数据库长度,比如:http://127.0.0.1:8080/sqli-labs-master/Less-5/?id=1' and length(database())>9 %23 结果返回 You are in....... 的话就说明数据库名长度大于9。比如猜解数据库名的话,http://127.0.0.1:8080/sqli-labs-master/Less-5/?id=1' and substr(database(),1,1)>'o' %23,判断数据库首位是否大于‘o’,根据结果可进行进一步的推测并最终确定。基本用到的方法就是枚举和二分法。

  注入流程如下:

  布尔盲注常用的SQL语句:

  1.length(str)函数:返回str的长度,例如length(database()) ,这里就会返回数据库名的长度。

   比如经常用length(database())>9,根据页面的true或者false变化来判断数据库长度。

  2.substr(str,pos,length)函数:从pos位置开始,截取str字符串length长度。

   例:substr(database(),1,1)这里比如数据库名为security,那么截取的就是s这1个字母。如果pos位大于str字符串的长度,则这个语句是会返回false的,比如这个语句在and或者or后面要注意。

  3.ascii()函数:将某个字符的值转为ascii值。

  4.left()函数:left(a,b)从左至右截取a的前b位。

  5.limit i,n : i表示查询的索引值(默认从0开始),n表示查询结果返回的数量。

   例如:select * from users 那就会列出 users里的所有信息,如果加一个 limit 0,1 那就只会显示第一个结果。

  下面用布尔盲注来演示通过lesson-5

  1.利用left(database(),1)来尝试获取数据库,结果正确,说明数据库长度是8

  

  猜测数据库第一位:因为s肯定大于a,所以结果正确,其他字母同理,二分法可提高效率

  

  接下来判断前两位,即是否大于sa,后面几位同理直到第8位解出。

  

  以上是利用left()函数这个方法。

  2.利用ascii()函数和substr()尝试:

  输入语句:?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1))=101%23

  ps:此处table_schema可以写成 ='security',但是我们这里使用的database(),是因为此处database()就是security。

  还是要注意如果在网页上写的话要把保留字符抓换为url编码。

  substr(****,1,1)是获取第一个表的第一个字符 那同理,第二个字符就是substr(****,2,1)

  ps:limit(0,1)获取第一个表的第一个字符,    substr(***,1,1)截取***中从第1位开始的1个字符

    limit(0,2)获取第一个表的第二个字符,  substr(***,2,1)截取***中从第2位开始的1个字符

    limit(1,1)获取第二个表的第一个字符,     substr(***,1,2)截取***中从第1位开始的2个字符

   ......

  这就是语句执行的原理,获取表就是这样挨个字符的套就行了。

  3.利用regexp获取users表中的列:

  关于bool盲注的关于regexp正则原理详解请戳这里

  下面直接演示用regexp去猜解users表中所含有的列:

  因为我们需要username和password所以:

  ?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^username' limit 0,1)%23

  我讲解一下上面的语句:(个人+朋友理解可能有误,欢迎指正)首先这句话的目的是查询在users这个表里有没有前8个字符为username的列,如果有那么这个regexp的正则表达式会返回select后的值也就是1,那么括号中的内容返回值为1与等号左边的1相等则会回显You are in ...(如下图)也就猜解出了users表中有username这个列;如果regexp执行完后没有找到users表中有username列则会返回0,那么1=0不成立,页面也就不会回显You are in ... (这种方法猜解和left()以及substr()效果是差不多的就是多一种思路,而且有时候会更快一些)

3.1利用ascii和substr破解列中的内容:

  ?id=1' and ascii(substr((select username from security.users limit 0,1),1,1))=68 %23

  

  也就是Dumb的首字母D 后面以及password同理,就不一一演示了。

3.利用ord()和mid()函数获取users表的内容:

  (这里不定期更新)

  

二、报错注入:构造payload让信息通过错误提示回显出来

  1.基于updatexml()函数:

  updatexml(XML_document,XPath_string,new_value)

  第一个参数:XML_document是String格式,为XML文档对象的名称

  第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

  第三个参数:new_value,String格式,替换查找到的符合条件的数据

  函数作用:改变文档中符合条件的节点的值

  也就是改变XML_document中符合XPATH_string的值为new_value

  而我们利用的原理就是哟个concat函数将其中内容连成一个字符串,因此不会符合XPATH_string格式从而出现报错

payload:

http://192.168.124.1/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),0x7e),1)--+

LESSON 6:

  6和5基本一致 只不过id是"包裹,5是'包裹。

  所以上面lesson 5用的方法 lesson 6也是一样的这里不过多演示。

  

  

  

sqli-labs lesson5-6 布尔盲注 报错注入 延时注入的更多相关文章

  1. WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注

    1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...

  2. SQL注入之Sqli-labs系列第八篇(基于布尔盲注的注入)

    开始挑战第八关(Blind- Boolian- Single Quotes- String) 这关首先需要用到以下函数: 开始测试,使用测试语句,利用单引号进行闭合 猜解字段 union select ...

  3. 大哥带我走渗透ii--时间盲注,布尔盲注

    5/27 基于布尔的盲注 我连题目都看不懂555,先去补充一点知识.https://blog.csdn.net/weixin_40709439/article/details/81355856 返回的 ...

  4. sql布尔盲注和时间盲注的二分脚本

    布尔盲注: import requests url = "http://challenge-f0b629835417963e.sandbox.ctfhub.com:10080/" ...

  5. sqli-labs less8-10(布尔盲注时间盲注)

    less-8 布尔盲注 首先利用?id=1' and 1=1 --+和?id=1' and 1=2 --+确定id的类型为单引号''包裹.然后进行盲注. 盲注思路: 破解当前数据库名: and len ...

  6. sqli-labs lesson 7-10 (文件导出,布尔盲注,延时注入)

    写在前面: 首先需要更改一下数据库用户的权限用于我们之后的操作. 首先在mysql命令行中用show variables like '%secure%';查看 secure-file-priv 当前的 ...

  7. WEB新手之布尔盲注

    开始写SQL的题,单引号等特殊符号闭合漏洞比较简单,因此从Less-5开始写. 布尔盲注是多种盲注的一种,这种盲注方法也比较好理解.但使用这种盲注有一个前提,就是网页会有回显,透过这个回显,我们可以通 ...

  8. 渗透测试初学者的靶场实战 1--墨者学院SQL注入—布尔盲注

    前言 大家好,我是一个渗透测试的爱好者和初学者,从事网络安全相关工作,由于爱好网上和朋友处找了好多关于渗透的视频.工具等资料,然后自己找了一个靶场,想把自己练习的体会和过程分享出来,希望能对其他渗透爱 ...

  9. python dvwa布尔盲注自动化脚本(level=low)

    仅供学习代码参考 1#python dvwa布尔盲注自动化脚本 2 import requests 3 import string 4 import time 5 INIT_URL="htt ...

随机推荐

  1. php解决约瑟夫环

    今天偶遇一道算法题 "约瑟夫环"是一个数学的应用问题:一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把 ...

  2. Acunetix与WAF集成:Acunetix和F5 BigIP ASM

    该的Acunetix API让您有机会来实现任务自动化,从而提高效率-尤其是当你可以用加速您的工作流程的其他组件的功能整合.在此示例中,我们将在上一篇文章的基础上,向您展示如何在Bash脚本中使用Ac ...

  3. sqlplus 删除^H处理

    1.在oracle用户下更改 2.在".profile"或者"~/.bash_profile"添加 stty erase ^H 3.wq,保存退出 stty时一 ...

  4. c语言:sprintf() 数字转字符赋值给数组

    //sprintf() //sprintf 最常见的应用之一是把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa /* 缓冲区溢出 第一个参数的长度太短了,没的说,给个大点的地方 ...

  5. C语言:#error命令,阻止程序编译

    #error 指令用于在编译期间产生错误信息,并阻止程序的编译,其形式如下: #error error_message 例如,我们的程序针对 Linux 编写,不保证兼容 Windows,那么可以这样 ...

  6. asp.net c# 保存图片到sql2008

    //图像数据表:tx//字段id (nvarchar(50) ,image(image)//tgav为图片ID,实质为上传前的主名 (省略了.jpg)private void kkkkk(byte[] ...

  7. element ui table表头动态筛选条件

    本文主要实现:根据el-table表格数据自动生成表头筛选条件的方法,可根据表格数据动态调整. el-table表格的表头增加筛选功能,大家平时都是怎么实现的呢?先看看官方文档的例子: 1 <t ...

  8. IO编程之File类

    File类是java.io包下代表与平台无关的文件及目录,程序操作文件和目录都可以通过File类来完成.值得指出的是,不管是文件还是目录都可以通过File类来操作.File能新建.删除.重命名文件和目 ...

  9. PAT甲级:1124 Raffle for Weibo Followers (20分)

    PAT甲级:1124 Raffle for Weibo Followers (20分) 题干 John got a full mark on PAT. He was so happy that he ...

  10. 第二十五篇 -- QTreeWidget右击菜单的实现

    效果图: 自己画一个ui,如图,前面已经讲过怎么用Qt Designer画图了,现在就不赘述了. ui_play.py # -*- coding: utf-8 -*- # Form implement ...