type
status
date
slug
summary
tags
category
icon
password
本篇文章首先就sqllib的盲注脚本编写入门
再扩展到pikachu的盲注脚本同逻辑编写
最后总结一套盲注爆破逻辑,通过
argparse做到命令行传入url和爆破的参数,任意爆破get请求网站数据库,数据表,字段的效果。python盲注脚本仅编写(不写入脚本化)
结果展示 + 完整代码如下:
其中,查第几个表和爆第几个字段是由用户输入。
代码中只查库,表,字段。不查数据

这里挑俩段代码进行解释,其余逻辑类似。
这里判断当前数据库长度。payload作为param传入
success的定义是“are”,页面成功回显的标志时you are in。
如果能找到are,说明我们and后面拼接的语句时正确的,当时的i值就是的数据库长度。并且rerun结束这个循环,返回数据库长度。
如果未找到are,则continue继续执行。通过range递增i值。
q=tablename()获得了表名,global定义为全局是为了在其他函数中应用它。只要这个函数被调用一次,q就成为全局变量。
获取字段数量,通过count()函数来抓取表中的字段数量。
其余的都类似的判断。
修改sqllib的盲注脚本爆破pikachu
具体修改:
传入的payload,增加参数submit
修改传入的参数为name
修改成功标志为your email
修改传入的url为命令行传入

最终版,爆破任意网站的盲注脚本
命令:python test.py -u url --param 参数名
通过用户提供完整的url,和要爆破的参数名,进行爆破。不提供参数名不会爆破。不包含验证漏洞是否存在,只是利用。
相比于之前的,成功标志通过页面返回的字节数来判断,就是代码中的
get_url_init_len(url)函数同时就是对参数的处理逻辑调整,可以通过以下小脚本理解:
通过?分割原有的url为inurl和参数俩部分。对参数部分进行正则匹配,匹配用户输入的id值,此处定义为name, 匹配出name=123
最后通过resplace拼接payload与参数,达到name=123' or 1=1{} --+,并将它作为参数传给
requests.get(url=url, params=params)最终代码如下: