目录
一、测试环境
二、测试目的
三、操作过程
Flag1
Flag2
Flag3
Flag4
四、结论
一、测试环境
靶场介绍:国内厂商设置的玄机靶场,以应急响应题目著名。
地址:https://xj.edisec.net/challenges/23
环境ssh登录:ssh env.xj.edisec.net -p 31871
靶机简介:
二、测试目的
分析靶机环境,进行应急响应,完成靶场目标。
三、操作过程
参考文章:https://tryhackmyoffsecbox.github.io/Target-Machines-WriteUp/docs/Xuanji/Unit-2/23/
Flag1
题目:黑客第一次写入的shell flag{关键字符串}
寻找shell文件,根据php环境,查找eval函数来寻找shell
find / -name '*.php' -type f | xargs grep 'eval('
查看shell文件,找到关键字符串
Flag1:flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
Flag2
题目:黑客反弹shell的ip flag{ip}
cd /var/log/mysql
cat error.log
查询mysql的错误日志,可以发现有陌生IP连接,保存了可疑的1.sh文件
在网页目录中,common.php页面找到数据库的登录凭证
root/334cc35b3c704593
SELECT * FROM mysql.general_log ORDER BY event_time DESC;
SHOW VARIABLES LIKE 'general_log';
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'log_bin';
进入mysql查看是否开启日志,没有开启日志
查看apache的登录日志,可以看到与数据库有交互
使用脚本筛选日志信息
from urllib.parse import unquotewith open("./access.log", "r") as f:data_log = f.read().strip().split("\n")data_log = [i.split('"') for i in data_log]data_log = [i for i in data_log if i[1].startswith("POST /adminer.php")]for i in data_log:tmp = i[1].split(" ")[1]tmp = unquote(tmp)print(tmp)
将登录日志拷贝出来进行处理,靶机缺少python库文件
可以看到使用sql注入,写入1.sh文件,内容是base64加密的内容
解密得到反弹shell的IP
Flag2:flag{192.168.100.13}
Flag3
题目:黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
select * from func;
查看mysql的自定义函数,可以看到黑客使用了udf提权,成功调用了系统命令
查找mysqludf.so的动态库文件
find / -name 'mysqludf.so'
找到文件路径,但这不是正确答案
进入plugin目录查看,除了mysqludf.so就是udf.so文件很可疑了,并且udf.so文件的修改时间和mysqludf.so文件一致
完整路径:/usr/lib/mysql/plugin/udf.so
MD5加密后就是正确答案
Flag3:flag{b1818bde4e310f3d23f1005185b973e7}
Flag4
题目:黑客获取的权限 flag{whoami后的值}
进入mysql并调用系统命令,执行whoami命令,得到flag
Flag4:flag{mysql}
四、结论
熟悉mysql的应急响应排查思路。