靶机基本信息
靶机地址:https://www.vulnhub.com/entry/lord-of-the-root-101,129/
靶机难度:中等(CTF)靶机描述:这是KoocSec为黑客练习准备的另一个Boot2Root挑战。他通过OSCP考试的启发准备了这一过程。它基于伟大的小说改制电影《指环王》的概念。目标:得到root权限&找到flag.txt
主机发现
也可以使用nmap进行主机发现
信息收集
全端口扫描:
从扫描结果中可以看得出仅仅开放了22端口
ssh尝试登录:
发现信息:Easy as 1,2,3
意思是让敲震端口3次
端口碰撞:
端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。
端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
由于对外的Linux服务器通过限制IP地址的方式来控制访问,因此可以利用这种端口试探方式来进行防火墙对于访问IP地址的控制。
如何进行端口碰撞?
首先需要我们知道端口碰撞的序列,否则暴力碰撞开启的机会太小。
1)第一种方法:knock 命令
linux安装:sudo apt install knockd
使用:knock <IP> <PORT1> <PORT2> <PORT3> <PORT4> -v
例如需要碰撞 172.16.1.1 的 3,4,7,8 端口:
knock 192.168.255.131 1 2 3 -v
2)第二种方法:hping3:TCP/IP数据包组装/分析工具
hping3 -S [IP地址] -p 1 -c 1
hping3 -S 192.168.255.131 -p 1 -c 1
hping3 -S 192.168.255.131 -p 2 -c 1
hping3 -S 192.168.255.131 -p 3 -c 1
-S(–syn):SYN是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN-ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
-p --destport: 目的端口(默认为0),可同时指定多个端口
-c --count:指定数据包的次数
参考资料:https://blog.csdn.net/qq_30247635/article/details/86243448
敲震三次后:
nmap全端口查看情况:
sudo nmap -p- 192.168.255.131
**信息枚举:**http://192.168.255.131:1337/
访问http://192.168.255.131:1337/404.html
其实这是一个容错处理,请求一个不存在的资源,也会指向这个页面
审查元素发现:
在kali通过base64解码这串字符:
发现还是base64继续解码:
发现目录
访问http://192.168.255.131:1337/978345210/index.php
漏洞发现与利用
尝试使用sqlmap注入:
爆破数据库库信息:
结果:
爆破出了数据库四个,继续获取webapp数据表信息
Optimization
-o:开启所有优化开关
–predict-output:预测常见的查询输出
–keep-alive:使用持久的HTTP(S)连接
–null-connection:从没有实际的HTTP响应体中检索页面长度–threads=THREADS:设置请求的并发数
–forms参数,sqlmap会自动从-u中的url获取页面中的表单进行测试
爆破数据库表信息:
命令:sqlmap -o -u "http://192.168.255.131:1337/978345210/index.php" --forms -D Webapp --tables
结果:
可以看到Users数据表,继续查看数据表信息
爆破数据库表字段信息:
命令:sqlmap -o -u "http://192.168.255.131:1337/978345210/index.php" --forms -D Webapp -T Users --columns
结果:
可看到数据库Webapp的表Users中存在字段id,password,username信息
爆破字段内容信息:
命令:sqlmap -o -u "http://192.168.255.131:1337/978345210/index.php" --forms -D Webapp -T Users --columns -C id,username,password --dump
结果:
获得用户密码,分别将用户名保存成username.txt,密码保存成password.txt
命令参数解析:
-D dbname指定数据库名称
-T tablename:指定某数据表的名称
–columns:列出指定表上的所有列
-C Cnmme:指定列名
–dump:导出列里面的字段
进行SSH爆破:
有两种办法进行爆破
1、利用Hydra爆破ssh
2、利用MSF爆破ssh
若有用户名和密码字典的话,使用auxiliary/scanner/ssh/ssh_login模块
若不知道,使用auxiliary/scanner/ssh/ssh_enumusers模块先探测用户名是否存在
参考:https://blog.csdn.net/huweiliyi/article/details/105590291
ssh登录:
权限提升
查看内核版本信息:
谷歌搜索引擎搜索:Ubuntu 14.04 exploit
exp参考链接:https://www.exploit-db.com/exploits/39166
本地使用python开启http服务:
命令:python2 -m SimpleHTTPServer 8081
提权并读取root目录的Flag.txt:
Mysql UDF提权:
UDF提权先查看mysql版本:
命令dpkg -l | grep mysql
,查看历史安装包版本
查看mysql运行权限是不是root:
命令ps aux | grep root
—查看mysql进程信息
再寻找mysql账号密码:
命令:find / -name login.*
发现信息:/var/www/978345210/login.php
获得mysql密码:darkshadow
登录mysql:
mysql -uroot -pdarkshadow
首先看一下是否满足写入条件:
show global variables like 'secure%';
是可以进行UDF提权的!
查看插件目录:
show variables like '%plugin%';
插件目录在:/usr/lib/mysql/plugin/
查看能否远程登陆:
只能本地登录!
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
MySQL的四种BLOB类型:类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G可以利用lib_mysqludf_sys提供的函数执行系统命令,lib_mysqludf_sys:
sys_eval,执行任意命令,并将输出返回
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。
使用python开启http服务:python2 -m SimpleHTTPServer 8081
这种方法也一样可以提升为root权限!
免责声明:本文章涉及的知识和技能仅用于学习研究,如有用于非法途径或未被授权的真实网络环境,所造成的后果及连带责任自行承担,与本文作者无关,倡导把安全知识和技能用于正当、正规、正义的途径。