成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

本篇文章給大家分享的是有關webshell原理以及服務器處理免殺的流程是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

前言

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

探究

基于POST

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

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

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

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

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

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

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

我們再次傳入相同的字符看看輸出情況;

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

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

解釋

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

探究

基于GET

至于我們get傳入的參數(shù)是否經(jīng)過了urlencode,這里我們有多種途徑進行測試,簡單來驗證一下子;我們隨便寫一個接受參數(shù)并且執(zhí)行的代碼;這里我們也就是變相的寫入了一句話木馬了;

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

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

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

我們在服務端看看接收到的參數(shù):

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

發(fā)現(xiàn)已經(jīng)接受到了urlencode后的結果;這里服務器也是進行兩次解碼;我們傳入的時候瀏覽器給我們進行一次urlencode;然后在處理數(shù)據(jù)時進行兩次urldecode;因為我們傳入的是字母,所以urldecode之后還是其本身;然后進入eval執(zhí)行;這里證明了get形式的傳參確實是經(jīng)過了一次urlencode;然后我們修改傳入代碼看看效果;

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

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

研究不可見字符

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

我自己構造的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)));這里我們兩種的思想構造都是一樣的,都是基于異或的webshell;這里的思想就是要達到盡可能小的種類;所以這里使用三個異或;以達到不同出現(xiàn)的概率最?。晃业膒ayload打不成功;答案的可以;但是想法是好的,我們卻忽略了一點;

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

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

以上就是webshell原理以及服務器處理免殺的流程是怎樣的,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

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

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

廣告

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

成都網(wǎng)頁設計公司
望谟县| 任丘市| 西宁市| 台前县| 二连浩特市| 长丰县| 陆河县| 女性| 万安县| 贡嘎县| 子长县| 绥德县| 无极县| 大名县| 黄骅市| 津南区| 永靖县| 南宁市| 团风县| 泰顺县| 新密市| 普陀区| 宁城县| 盐亭县| 读书| 长泰县| 兰西县| 丹巴县| 额尔古纳市| 策勒县| 无为县| 凭祥市| 呼伦贝尔市| 花垣县| 新竹市| 嘉兴市| 绥芬河市| 汉阴县| 崇州市| 乃东县| 日土县|