mysql应急响应 ssh账号 root 密码 xjmysql
ssh env.xj.edisec.net -p xxxxx
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}
1.黑客第一次写入的shell flag{关键字符串}
连接上靶机,这一个靶场,是mysql应急响应,我们思考一下,既然hacker要在mysql里写入shell,那么首先他一定是先拿下了网站,并上传了shell,第一次写入的shell,我们可以去web目录下查找一番!
直接用我之前文章用过的webshell查找命令,来到web目录下
find ./ -name "*.php" | xargs grep "@eval("
可以看到sh.php文件是一句话木马的shell
或者使用工具查找,这里用D盾扫了一下(怎么使用D盾扫Linux目录在上一篇文章有写)
这里的flag为sh.php文件下方的注释字符串flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
2.黑客反弹shell的ip flag{ip}
查看mysql的日志文件,在/var/log/mysql下
这里只有一个error.log文件
查看之后看到有一条很奇怪的信息
在/tmp/目录下上传了一个1.sh的文件,后面则是这个文件引发的一系列错误信息
每行的错误信息,如command not found,指出脚本中的每一行都被解释器当作命令来尝试执行,但由于这些行实际上是HTTP响应的一部分(例如日期、状态信息、长度描述等),shell无法识别并执行它们,从而导致了一系列的错误。
全局查找一下这个文件,还在/var/lib/mysql/下存在
查看文件内容
正是一条反弹shell的命令,hacker的IP也在这文件中
flag{192.168.100.13}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
提权我直接猜测为udf提权了,最常用的提权方式
UDF提权说明
UDF 是什么
UDF(Userdefined function)可翻译为用户自定义函数,其为 mysql 的一个拓展接口,可以为 mysql 增添一些函数。比如 mysql 一些函数没有,我就使用 UDF 加入一些函数进去,那么我就可以在 mysql 中使用这个函数了。
条件:
获取了MySQL控制权:获取到账号密码,并且可以远程连接
获取到的账户具有写入权限,即secure_file_priv值为空
什么情况下需使用mysql提权?
拿到了mysql的权限,但是没拿到mysql所在服务器的任何权限,通过mysql提权,将mysql权限提升到操作系统权限
既然要提权,那黑客肯定知晓了账号密码,而且连接上了,那么我们可以猜想,是不是web目录下有页面泄露了mysql账号密码,回到web目录
find ./ -name "*.php" | xargs grep "root"
通过匹配root关键字符串,发现common.php文件确实泄露了账号密码
连接一下数据库
show global variables like '%secure%';
查到secure_file_priv字段为空,具有写入权限
一般进行了提权,一定会在/usr/lib/mysql/plugin/目录下留下痕迹
来到此目录
这个目录是mysql存放用户自定义函数的,出现了一个udf.so文件,肯定是有人写入了一个自定义函数到库中。
通过md5加密/usr/lib/mysql/plugin/udf.so得到flag
flag{B1818BDE4E310F3D23F1005185B973E7}
4.黑客获的权限 flag{whoami后的值}
既然hacker进行了提权,在库中写入了自定义函数,我们去数据库中查询一下
select * from mysql_func;
这个表会查询到新增函数
使用新增的这个函数执行系统命令
select sys_eval('whoami');
得到flag{mysql}
参考文章