webshell原理以及服務(wù)器處理免殺的流程是怎樣的

本篇文章給大家分享的是有關(guān)webshell原理以及服務(wù)器處理免殺的流程是怎樣的,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有長(zhǎng)白免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

前言

之前一直接觸rce;但是總是可以看到過(guò)濾就可以考慮無(wú)數(shù)字和字母的webshell或者免殺馬,但是今天碰到一道題,讓我深刻理解了深究的重要性;不能無(wú)腦依靠網(wǎng)上無(wú)數(shù)字和字母的webshell了;需要知道細(xì)節(jié);這里我們知道,常規(guī)的ctf題目中,往往都是采用post或者get進(jìn)行數(shù)據(jù)提交;在最后是命令執(zhí)行;但是要想打到命令執(zhí)行;需要繞過(guò)很多waf;有的層層waf都需要繞過(guò)之后才會(huì)eval;

探究

基于POST

這里就來(lái)深究異或webshell原理,以及在服務(wù)器處理免殺的流程;也就是為什么會(huì)被免殺;(并不是常規(guī)理解的那么簡(jiǎn)單)

我在遠(yuǎn)程vps上搭建一個(gè)環(huán)境用于測(cè)試;在125.php中寫(xiě)入如下的代碼;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

然后本地訪(fǎng)問(wèn)寫(xiě)入常規(guī)的異或代碼執(zhí)行phpinfo;這里我們發(fā)現(xiàn)其成功的執(zhí)行;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

但是在post提交數(shù)據(jù)的時(shí)候我們是默認(rèn)了必須編碼的;其實(shí)在post數(shù)據(jù)傳入的時(shí)候都是需要進(jìn)行編碼的;這里原因有二:其一是為了防止不可見(jiàn)字符;第二就是防止數(shù)據(jù)丟失或者異常;(第一種情況比較多);這里我們不用bp抓包了,因?yàn)閔ackbar已經(jīng)提示了進(jìn)行編碼;這里到瀏覽器之后到底需要解幾次碼呢;有很多人理解是需要進(jìn)行一次urldecode將其轉(zhuǎn)變回來(lái)就行,以此來(lái)進(jìn)行waf的判斷;發(fā)現(xiàn)沒(méi)有數(shù)字和字母,所以可以繞過(guò)去;其實(shí)這是不完全正確;我們通過(guò)實(shí)踐可以看到;我再在原本的125.php中加入一行代碼查看一下數(shù)據(jù)進(jìn)入服務(wù)器后的情況是什么;如圖:

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

我們?cè)俅蝹魅胂嗤淖址纯摧敵銮闆r;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

這里我們看到是在進(jìn)行過(guò)waf之前輸出的情況;輸出的是不可見(jiàn)字符;也就是在經(jīng)過(guò)waf的時(shí)侯并不是原本的輸入的數(shù)據(jù)進(jìn)行過(guò)waf檢驗(yàn),而是再次經(jīng)過(guò)了urldecode之后的結(jié)果;這里我和imagin師傅還有藍(lán)小俊師傅交流過(guò),證實(shí)了不可見(jiàn)字符的出現(xiàn)確實(shí)是經(jīng)過(guò)了一次urldecode之后的結(jié)果;也就是我們傳入數(shù)據(jù)時(shí)瀏覽器會(huì)進(jìn)行一次urlencode,然后數(shù)據(jù)在服務(wù)端需要兩次urldecode:然后拿著這個(gè)不可見(jiàn)字符去進(jìn)行waf的匹配;從而正確的繞過(guò)去;然后這些不可見(jiàn)字符就可以進(jìn)入eval執(zhí)行下一步操作進(jìn)行相互異或,然后異或成為phpinfo;在eval里執(zhí)行;

解釋

看到這里可能有很多師傅有點(diǎn)迷,會(huì)認(rèn)為不可見(jiàn)字符是怎么異或成的我們需要的代碼呢,我們是怎么做到利用不可見(jiàn)字符異或得到的呢?其實(shí)這里服務(wù)器已經(jīng)給我們準(zhǔn)備好了;這里我先來(lái)講一下我的發(fā)現(xiàn),不知道師傅們有沒(méi)有注意到我們的簡(jiǎn)單異或的形式;((%8f%97%8f%96%91%99%90)^(%ff%ff%ff%ff%ff%ff%ff))();==phpinfo()這里我經(jīng)過(guò)反復(fù)的測(cè)試,得到一個(gè)結(jié)論,我們前面的%8f%97等等的是我們?nèi)》吹玫降慕Y(jié)果;phpinfo()==(~%8f%97%8f%96%91%99%90)();然而我們利用的%ff也就是225是不可見(jiàn)的;其實(shí)urlencode說(shuō)白了很多師傅都知道是%加上字符轉(zhuǎn)十六進(jìn)制;我們看到,這里我們起初就給我們電腦下了命令,去尋找可以異或的phpinfo的字符并且urlencode輸出出來(lái);所以我們的不可見(jiàn)字符自然可以在服務(wù)器上異或得到我們需要的字符;

探究

基于GET

至于我們get傳入的參數(shù)是否經(jīng)過(guò)了urlencode,這里我們有多種途徑進(jìn)行測(cè)試,簡(jiǎn)單來(lái)驗(yàn)證一下子;我們隨便寫(xiě)一個(gè)接受參數(shù)并且執(zhí)行的代碼;這里我們也就是變相的寫(xiě)入了一句話(huà)木馬了;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

我們直接執(zhí)行system("ls");看看效果;發(fā)現(xiàn)可以成功的執(zhí)行;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

我們?cè)诜?wù)端看看接收到的參數(shù):

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

發(fā)現(xiàn)已經(jīng)接受到了urlencode后的結(jié)果;這里服務(wù)器也是進(jìn)行兩次解碼;我們傳入的時(shí)候?yàn)g覽器給我們進(jìn)行一次urlencode;然后在處理數(shù)據(jù)時(shí)進(jìn)行兩次urldecode;因?yàn)槲覀儌魅氲氖亲帜福評(píng)rldecode之后還是其本身;然后進(jìn)入eval執(zhí)行;這里證明了get形式的傳參確實(shí)是經(jīng)過(guò)了一次urlencode;然后我們修改傳入代碼看看效果;

webshell原理以及服務(wù)器處理免殺的流程是怎樣的

發(fā)現(xiàn)我們?cè)趀val之前的代碼是無(wú)法顯示的字符;這和我們POST提交的效果一樣;也證實(shí)了這里確實(shí)是經(jīng)過(guò)了兩次urldecode;然后在eval里進(jìn)行異或得到了phpinfo;然后eval($_GET['phpinfo();'])。得到我們的結(jié)果;

研究不可見(jiàn)字符

講到這里很多師傅可能會(huì)產(chǎn)生一種錯(cuò)覺(jué),可能覺(jué)得是服務(wù)器無(wú)法解析那些不可見(jiàn)字符從而導(dǎo)致無(wú)法正則到,然后繞過(guò)waf;其實(shí)不然,這里就要講到我在文章剛開(kāi)始說(shuō)我碰到的一道題了;那一道題里有個(gè)很有意思的寫(xiě)法if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )這里我解釋一下這行代碼的意思;服務(wù)器將從'_'接受的代碼進(jìn)行轉(zhuǎn)小寫(xiě),然后進(jìn)行cout_chars方法;這個(gè)方法在第二個(gè)參數(shù)為3的時(shí)候起的作用是統(tǒng)計(jì)第一個(gè)參數(shù)里面不同字符;因?yàn)?x3是十六進(jìn)制,也是十進(jìn)制的3;所以這行代碼的意思就是先轉(zhuǎn)為小寫(xiě),然后收集不同的字符;然后遍歷其個(gè)數(shù),大于13種的話(huà)就會(huì)被ban掉;那么按照我們之前的講述,如果服務(wù)器不可以識(shí)別不可見(jiàn)字符的話(huà),那應(yīng)該都可以繞過(guò)去,但是我的構(gòu)造和答案的構(gòu)造不一樣,但是思想是一樣的卻繞過(guò)不去;下面放出我的payload和標(biāo)準(zhǔn)答案的payload

我自己構(gòu)造的payload:((%9b%9b%9b%9b%9b%9b%9b%9b%9b%9b%9b)^(%8d%96%9c%9b%9b%9b%9c%9c%9b%9b%9b)^(%9a%9a%97%88%a0%8c%97%8d%8d%9c%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))(((%9b%9b%9b)^(%9b%9b%8c)^(%9a%91%8c)^(%ff%ff%ff))(((%9b%9b%9b%9b%9b%9b%9b)^(%9b%9b%8d%9b%8c%9b%9b)^(%8c%9c%88%91%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff))); ==show_source(end(scandir('.')));

答案的payload:((%8d%9c%97%a0%88%8d%97%8d%9c%a0%a0)^(%9a%97%9b%88%a0%9a%9b%9b%8d%9c%9a)^(%9b%9c%9c%a0%88%9b%9c%9c%9c%a0%a0)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))(((%a0%97%8d)^(%9a%9a%9b)^(%a0%9c%8d)^(%ff%ff%ff))(((%8d%a0%88%97%8d%9b%9c)^(%9a%9c%8d%9a%9b%9a%8d)^(%9b%a0%9b%9c%8d%97%9c)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)));這里我們兩種的思想構(gòu)造都是一樣的,都是基于異或的webshell;這里的思想就是要達(dá)到盡可能小的種類(lèi);所以這里使用三個(gè)異或;以達(dá)到不同出現(xiàn)的概率最?。晃业膒ayload打不成功;答案的可以;但是想法是好的,我們卻忽略了一點(diǎn);

其實(shí)這個(gè)題從剛開(kāi)始的構(gòu)造思想就是錯(cuò)的,不應(yīng)該是想著構(gòu)造我們payload中的所謂的%8d%9c什么什么的出現(xiàn)最少,如果只從這方面來(lái)講的話(huà),我的payload也可以過(guò),而且是充分的過(guò)去;然而我的并沒(méi)有過(guò)去;而是死在了種類(lèi)大于13種的地方;(有興趣的師傅可以拿我payload試一試;)我們實(shí)際應(yīng)該著手于我們服務(wù)器過(guò)waf時(shí)的那個(gè)不可見(jiàn)字符的不同種類(lèi)多少,這里也就是間接的證明了一點(diǎn),不可見(jiàn)字符雖然是不可見(jiàn);那是因?yàn)榉?wù)器無(wú)法輸出,而并不是真的不存在,其實(shí)那些字符都是有區(qū)別的;就比如asdf這些個(gè)不同的字符;只是我們看不到而已;那么這道題究竟怎么得出像答案那種的在不可見(jiàn)字符的情況下很巧繞過(guò)waf的呢。那就只有fuzz了;無(wú)腦的fuzz;或者腳本進(jìn)行爆破;

對(duì)于異或的webshell我就解釋到這里,其實(shí)很多東西可以類(lèi)比推理,知道異或的webshell不被殺掉的原理和應(yīng)該注意的地方后我們也可以推出取反的webshell;和自增的webshell;其本質(zhì)差不多都是一樣的;這里就不在過(guò)多的贅述;大家感興趣的可以自己進(jìn)行復(fù)現(xiàn);

以上就是webshell原理以及服務(wù)器處理免殺的流程是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)題目:webshell原理以及服務(wù)器處理免殺的流程是怎樣的
文章路徑:http://muchs.cn/article34/ipgpse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、面包屑導(dǎo)航軟件開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司