昨晚郵箱收到一封郵件,自動跑到了垃圾箱了
今早上班我隱隱覺得有些不妥,從垃圾箱翻出來了
是個看起來很嚴肅很官方的通報檔案,大概長這樣(反正關鍵資訊我得馬起來)

看到郵件內容,十有八九是真的,因為這批網站用的是很久很久之前一個同事寫的asp+access的老后臺(歷史悠久)
之前也碰到過說有sql注入的漏洞,當時我太菜,根本不知道怎么處理,就把網站的所有寫入權限給關閉了(留言板功能也不能用了)
這份官方檔案里有提到:sqlmap,之前沒用過這東西,我暫且嘗試著用一下

首先是下載安裝,找個大神寫的教程:https://blog.csdn.net/baigoocn/article/details/51456721
Windows下SQLMAP的安裝圖解
由于SQLMap是利用Python語言寫的,所以需要將Python這個語言環境給安裝上,以下是詳細安裝程序:
準備作業:
(1) Windows7/8/10作業系統;
(2) Python2.7.11;
(3) SQLMap
Step1. Python2.7.11下載:(注意不要是太新的版本,可能會有兼容問題,我推薦的這個版本就挺好的!!!)
下載地址:https://www.python.org/downloads/
Step2. Python2.7.11安裝:
2.1. 直接雙擊下載好的Python2.7.11安裝包,默認,Next;

2.2. 默認,Next;

2.3. 將“Add python.exe to Path"項勾選,勾選后安裝完成不再需要單獨添加環境變數,默認是“去勾選”的;


2.4.安裝完成后,重啟系統,查看是否生效,“Win+R”,輸入cmd,然后輸入python

Step3: SQLMap下載
下載地址:http://sqlmap.org/

Step4: SQLMap安裝
4.1. 將下載的SQLMAP安裝包解壓到檔案夾sqlmap中,并拷貝到 "C:\Python27" 目錄下;

4.2. 然后在桌面新建立一個cmd的快捷方式,并命名為“SQLMap”;


4.3. 然后在新建快捷方式上右鍵“屬性”,將“起始位置”修改為 C:\Python27\sqlmap,然后確定;

4.4. 雙擊剛才創建的快捷方式,輸入sqlmap.py -h,出現如下資訊則表示安裝成功,
至此,Over!
ASP中的SQL注入
然后我翻遍搜索引擎(其實也就找了排名前幾的博文),大概了解了下asp的sql注入相關知識點
參考鏈接:https://www.cnblogs.com/mo-beifeng/archive/2011/05/01/2033818.html
如 果你以前沒試過SQL注入的話,那么第一步先把IE選單=>工具=>Internet選項=>高級=>顯示友好 HTTP 錯誤資訊前面的勾去掉,否則,不論服務器回傳什么錯誤,IE都只顯示為HTTP 500服務器錯誤,不能獲得更多的提示資訊,
判斷能否進行SQL注入:
① http://www.19cn.com/showdetail.asp?id=49
② http://www.19cn.com/showdetail.asp?id=49 and 1=1
③ http://www.19cn.com/showdetail.asp?id=49 and 1=2
這就是經典的1=1、1=2測驗法了,怎么判斷呢?看看上面三個網址回傳的結果就知道了:
可以注入的表現:
① 正常顯示(這是必然的,不然就是程式有錯誤了)
② 正常顯示,內容基本與①相同
③ 提示BOF或EOF(程式沒做任何判斷時)、或提示找不到記錄(判斷了rs.eof時)、或顯示內容為空(程式加了on error resume next)
不可以注入就比較容易判斷了,①同樣正常顯示,②和③一般都會有程式定義的錯誤提示,或提示型別轉換時出錯,
當然,這只是傳入引數是數字型的時候用的判斷方法,實際應用的時候會有字符型和搜索型引數,
防范方法
SQL注入漏洞可謂是“千里之堤,潰于蟻穴”,這種漏洞在網上極為普遍,通常是由于程式員對注入不了解,或者程式過濾不嚴格,或者某個引數忘記檢查導致,在這里,我給大家一個函式,代替ASP中的Request函式,可以對一切的SQL注入Say NO,函式如下:
Function SafeRequest(ParaName,ParaType) '--- 傳入引數 --- 'ParaName:引數名稱-字符型 'ParaType:引數型別-數字型(1表示以上引數是數字,0表示以上引數為字符) Dim Paravalue Paravalue=https://www.cnblogs.com/chenyingying0/p/Request(ParaName) If ParaType=1 then If not isNumeric(Paravalue) then Response.write"引數" & ParaName & "必須為數字型!" Response.end End if Else Paravalue=https://www.cnblogs.com/chenyingying0/p/replace(Paravalue,"'","''") End if SafeRequest=Paravalue End function
其實簡單來說,就是通過get傳參的頁面,接收引數時一定要進行過濾
如果只是簡單的數值型,那用 cint() 就好了
提示:官方檔案中測驗用的陳述句類似于:
sqlmap.py -u "http://www.xxx.com/newsview.asp?id=1" --batch
如果能夠獲取到資料,就代表存在漏洞了、
嗯,暫且先這樣,等我修改完就給官方大大回復郵件去,

補充:掃描一次之后會在本地留下掃描日志,有可能網站整改完不存在漏洞,但仍然檢測出有,需要清空日志
Sqlmap清除歷史掃描日志
使用Sqlmap掃描SQL注入漏洞時,首次掃描會在SQL的/root/.sqlmap/output/目錄下留下
以IP地址為名稱的檔案夾,如下所示:

而如果該安全漏洞經過修復后,再次使用SQLMAP掃描的時候仍然會出現與首次掃描相同的結果,
原因就是/root/.sqlmap/output/目錄下存在之前的掃描記錄,因此受到了影響,
解決方法就是洗掉對應的掃描記錄,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17464.html
標籤:PHP
