真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進行sqlmap源碼分析

如何進行sqlmap源碼分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動互聯(lián)產(chǎn)品、營銷型網(wǎng)站服務(wù)為核心業(yè)務(wù)。十載網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

sqlmap源碼分析

我也是一個小白,總結(jié)自己對sqlmap的理解,也分享一些自己覺得好用的方法給大家。

目錄結(jié)構(gòu)

對照目錄結(jié)構(gòu)我們來梳理一下:

這里我是下載的sqlmap最新版本1.4.3.12

如何進行sqlmap源碼分析

如何進行sqlmap源碼分析

1.data目錄包含可以搭建的圖形化界面模板,shell后門(里邊的代碼是經(jīng)過加密的),udf提權(quán)功能,數(shù)據(jù)庫注入檢測載荷等

2.doc目錄是針對不同國家和地區(qū)的使用說明

3.extra目錄有一些額外功能,運行cmd、shellcode,icmp協(xié)議的反彈shell(是的icmp是可以用來反彈shell的,在平時的滲透過程中碰到傳統(tǒng)的tcp,udp反彈shell不成功,可以考慮使用icmp協(xié)議或者DNS協(xié)議進行反彈shell),以及發(fā)出聲響(beep)等

4.lib/目錄包含了sqlmap的多種連接庫,如五種注入類型請求的參數(shù)、提權(quán)操作等。(這個目錄需要我們重點關(guān)注)

5.plugins/ 數(shù)據(jù)庫信息和數(shù)據(jù)庫通用事項

6.tamper目錄包含了各種繞過腳本(這個非常好用)

7.thirdparty目錄 sqlmap使用的第三方的插件

sqlmap.conf sqlmap的配置文件,如各種默認(rèn)參數(shù)(默認(rèn)是沒有設(shè)置參數(shù)、可設(shè)置默認(rèn)參數(shù)進行批量或者自動化檢測)

sqlmap.py sqlmap主程序文件

sqlmapapi.py sqlmap的api文件,可以將sqlmap集成到其他平臺上

swagger.yaml api文檔

入口文件

sqlmap.py

我們先來看看五個比較重要的函數(shù)

如何進行sqlmap源碼分析

dirtyPatches()

對于程序的一些問題及修復(fù),寫成了補丁函數(shù),優(yōu)先執(zhí)行。

在 DirtyPatches 中,首先設(shè)定了 httplib 的最大行長度(httplib._MAXLINE),接下來導(dǎo)入第三方的 windows 下的 ip地址轉(zhuǎn)換函數(shù)模塊(win_inet_pton),然后對編碼進行了一些替換,把 cp65001 替換為 utf8 避免出現(xiàn)一些交互上的錯誤,這些操作對于 sqlmap 的實際功能影響并不是特別大,屬于保證起用戶體驗和系統(tǒng)設(shè)置的正常選項,不需要進行過多關(guān)心。

如何進行sqlmap源碼分析

resolveCrossReferences()

為了消除交叉引用的問題,一些子程序中的函數(shù)會被重寫,在這個位置進行賦值

如何進行sqlmap源碼分析

checkEnvironment()

這個函數(shù)的作用就是去檢測運行環(huán)境,包括檢查模塊路徑,檢查 Python 版本,導(dǎo)入全局變量

如何進行sqlmap源碼分析

這三個全局變量可以說貫穿宇sqlmap運行的整個過程,尤其是conf,kb

如何進行sqlmap源碼分析

setPaths(modulePath())

獲取路徑

如何進行sqlmap源碼分析

banner()

該函數(shù)是為了打印banner信息

如何進行sqlmap源碼分析

全局變量

cmdLineOptions

是一個AttribDict,AttribDict又是什么?

這個類通過override了幾個super method.

修改原生的dict定制成了自己項目需要的屬性字典.

如何進行sqlmap源碼分析

原來的字典的用法:dict1["key"]

現(xiàn)在的自定義字典的用法:dict1.key

如何進行sqlmap源碼分析跟進cmdlineParser()

這里將我們輸入的命令行參數(shù)選項進行判斷和拆分,轉(zhuǎn)變成dict鍵值對的形式存入到cmdLineOptions

如何進行sqlmap源碼分析

conf,kb

1.init()中主要包含所有初始變量的初始值,這些初始值在 init() 的設(shè)定主要是引用各種各樣的函數(shù)來完成基礎(chǔ)設(shè)置,我們沒有必要依次對其進行分支,只需要用到的時候知道回來尋找就可以了。

2.第二部分就是各種測試包括冒煙測試,模糊測試等

測試過的 url 參數(shù)信息會保存到 kb.testedParams 中

3.測試完成之后就進入我們的工作流程

如何進行sqlmap源碼分析

controller.py文件

下邊這部分代碼就是核心的檢測方法

for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets:
	try:
		if conf.checkInternet:
			infoMsg = "checking for Internet connection"
			logger.info(infoMsg)

			if not checkInternet():
				warnMsg = "[%s] [WARNING] no connection detected" % time.strftime("%X")
				dataToStdout(warnMsg)

				valid = False
				for _ in xrange(conf.retries):
					if checkInternet():
						valid = True
						break
					else:
						dataToStdout('.')
						time.sleep(5)

				if not valid:
					errMsg = "please check your Internet connection and rerun"
					raise SqlmapConnectionException(errMsg)
				else:
					dataToStdout("\n")

		conf.url = targetUrl
		conf.method = targetMethod.upper().strip() if targetMethod else targetMethod
		conf.data = targetData
		conf.cookie = targetCookie
		conf.httpHeaders = list(initialHeaders)
		conf.httpHeaders.extend(targetHeaders or [])

		if conf.randomAgent or conf.mobile:
			for header, value in initialHeaders:
				if header.upper() == HTTP_HEADER.USER_AGENT.upper():
					conf.httpHeaders.append((header, value))
					break

		conf.httpHeaders = [conf.httpHeaders[i] for i in xrange(len(conf.httpHeaders)) if conf.httpHeaders[i][0].upper() not in (__[0].upper() for __ in conf.httpHeaders[i + 1:])]

		initTargetEnv()
		parseTargetUrl()

		testSqlInj = False

		if PLACE.GET in conf.parameters and not any((conf.data, conf.testParameter)):
			for parameter in re.findall(r"([^=]+)=([^%s]+%s?|\Z)" % (re.escape(conf.paramDel or "") or DEFAULT_GET_POST_DELIMITER, re.escape(conf.paramDel or "") or DEFAULT_GET_POST_DELIMITER), conf.parameters[PLACE.GET]):
				paramKey = (conf.hostname, conf.path, PLACE.GET, parameter[0])

				if paramKey not in kb.testedParams:
					testSqlInj = True
					break
		else:
			paramKey = (conf.hostname, conf.path, None, None)
			if paramKey not in kb.testedParams:
				testSqlInj = True

		if testSqlInj and conf.hostname in kb.vulnHosts:
			if kb.skipVulnHost is None:
				message = "SQL injection vulnerability has already been detected "
				message += "against '%s'. Do you want to skip " % conf.hostname
				message += "further tests involving it? [Y/n]"

				kb.skipVulnHost = readInput(message, default='Y', boolean=True)

			testSqlInj = not kb.skipVulnHost

		if not testSqlInj:
			infoMsg = "skipping '%s'" % targetUrl
			logger.info(infoMsg)
			continue

		if conf.multipleTargets:

初始化當(dāng)前檢測的目標(biāo),包括:url,method,Data,Cookie,headers相關(guān)字段

如何進行sqlmap源碼分析

從conf字典中取出來檢測用的參數(shù)

如何進行sqlmap源碼分析

檢測是否已經(jīng)測試過如何進行sqlmap源碼分析該目標(biāo)
如何進行sqlmap源碼分析

這部代碼是針對多個目標(biāo)

如何進行sqlmap源碼分析

接下來再經(jīng)過setupTargetEnv()函數(shù),

如何進行sqlmap源碼分析

這里看一下對于請求的處理方式,主要是將 get 或 post 發(fā)送的數(shù)據(jù)解析成字典形式,并保存到 conf.paramDict 中

如何進行sqlmap源碼分析

如何進行sqlmap源碼分析


回歸之前的 start()方法中的 foreach targets 的循環(huán)體中,在 setupTargetEnv() 之后,我們現(xiàn)在已經(jīng)知道了關(guān)于這個目標(biāo)的所有的可以嘗試注入測試的點都已經(jīng)設(shè)置好了,并且都存在了 conf.paramDict 這個字典中了。

讀取session文件(如果存在的話),并讀取文件中的數(shù)據(jù),保存到 kb 變量中

接下來就是checkWaf,這里就是檢測是否有waf(這里有個奇怪的地方就是本次下載的sqlmap目錄里邊少了waf目錄)

接著檢查空連接(nullConnection)、檢查頁面穩(wěn)定性,以及對參數(shù)、測試列表進行排序

nullConnection:根據(jù)官方手冊,是一種不用獲取頁面內(nèi)容就可以知道頁面大小的方法,這種方法在布爾盲注中有非常好的效果

如果啟用 --null-connection,計算頁面相似率就只是很簡單的通過頁面的長度來計算

如何進行sqlmap源碼分析

頁面相似率的算法在sqlmap的檢測過程中起到了灰常重要,還有高斯分布在sqlmap進行異常檢測的時候也起到了很重要的作用。

看完上述內(nèi)容,你們掌握如何進行sqlmap源碼分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)頁題目:如何進行sqlmap源碼分析
當(dāng)前路徑:http://weahome.cn/article/ieiidj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部