前言
靶机采用virtual box
虚拟机,桥接网卡
攻击采用VMware
虚拟机,桥接网卡
靶机:momentum-2 192.168.1.40
攻击:kali 192.168.1.16
主机发现
使用arp-scan -l
扫描
信息收集
使用namp扫描
这里的命令对目标进行vulner
中的漏洞数据库进行对比,有的话,会给出漏洞编号及链接,和危害等级
nmap -sV 192.168.1.40 -O --script=vulners --script-args mincvss=5.0
不过这里只进行简单的扫描即可
网站探测
访问网站
和momentum-1
差不多,都是图片,不过这里页面源代码中并没有调用js
函数等,不过图片放在/img
目录,至少确定是目录型网站。
尝试指纹识别
网站目录扫描
使用dirsearch、gobuster、ffuf、dirb、dirbuster
都可以
看到几个目录,尝试访问查看,首先访问js
,可以看到是一个文件上传的js
函数,并且调用ajax.php
文件,采用post
访问ajax.php
文件,全是后端php语言
访问css
,是网站的样式,无其他内容
访问dashboard.html
页面,有文件上传页面,并且查看页面源代码后,发现与之前js
中的获取file
的id对应上了,并且点击提交,调用了js
的函数。并且上传后的文件也给出提示,在owls
OK,到这里网站的信息基本上了解了,下面就是进行总结一下,首先在80端口网站中,有js
目录,其中有一个函数,该函数与dashboard.html
联合在一起,并且涉及到ajax.php
文件以及POST
提交方式。
文件上传—>JS函数---->ajax.php
漏洞寻找
上传php
中的反弹shell
脚本文件进行测试,直接上传发现不行
这里建议了解一下XMLHttpRequest
,参考链接https://blog.csdn.net/abraham_ly/article/details/113526496
function uploadFile() {
var files = document.getElementById("file").files;
if(files.length > 0 ){
var formData = new FormData();
formData.append("file", files[0]);
var xhttp = new XMLHttpRequest();
// Set POST method and ajax file path
xhttp.open("POST", "ajax.php", true);
// call on request changes state
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;
if(response == 1){
alert("Upload successfully.");
}else{
alert("File not uploaded.");
}
}
};
// Send request with data
xhttp.send(formData);
}else{
alert("Please select a file");
}
}
根据上面上传后的提示,以及代码来看,主要是在response==1
这个条件出错
测试上传图片,还是出错
使用burp
抓包分析,对请求修改也没有效果,返回都是0
,无法进入上传成功,怀疑可能是网站目录没有扫全,再检测一遍,这次多加后缀名测试,结果还真出来一些东西,不能太依赖dirsearch
的默认扫描,毕竟有的后缀名还是挺重要的。
使用gobustrt
扫描,-x
表示扩展名,-d
表示对备份进行检测,也就是自己加上常见的扩展备份名,-b
过滤包含状态码400-404
的结果
这里对于dirsearch
不太清楚了,加上备份文件的格式,也无法扫描出来
或者使用ffuf
也是能够扫描出来的
漏洞利用
这里知道有备份,下载备份文件审计代码
直接测试,先直接上传txt
文件看看,是否有该逻辑性.上传成功,说明正确
上传php
反弹sehll的脚本。使用burp
抓包进行修改,然后注意,在代码审计时,有一个注释说,在cookie
的末尾添加一个大写字母,所以,这就需要构造好准备的数据,然后进行爆破
把该数据包发送到intruder
模块,先在末尾加入一个A
,用于知道爆破位置
构造payload
然后攻击测试
得出Cookie
的最后一位为R
反弹shell
此时在kali
中开启监听,这里我在php
脚本设置的是1234端口
在浏览器访问
点击脚本文件后,kali
获取反弹shell
登录成功,查看/home
目录,获取到一个密码,不知道是否可用
ssh登录
测试该内容myvulnerableapp[Asterisk]
是否是ssh
的密码,测试发现并不是,寻找其他可用
找了一圈,没有可用,就网上查了一下,说[Asterisk]
是*
,我真服了,这在英语词典中确实有*
的含义
所以上面文本应该是myvulnerableapp*
,再次登录测试,登录成功
因为之前不知道密码的时候,我把其他方法都看了一下,这里直接find
寻找具有SUID的文件
提权
然后使用sudo -l
列出
首先查看该py
文件,发现无写权限,查看导入的包有哪些
导入三个包,查看这三个包的权限
看了都无写权限,我就再看看代码。
首先用户输入seed
,然后生成cookie
,然后就是执行写入内容到log.txt
,传参是输入的seed
,然后子进程打开这个cmd
。运行py
脚本,然后输入可执行命令
这里通过nc
执行/bin/bash
然后给kali
,但是这里不行,没有提权成功
查看发现,其他人也有执行的权限,所以不能直接变为root
但是吧,突然想到,我是用sudo
获取该文件的,怎么就没有使用sudo
执行呢。
啧啧啧啧啧啧啧啧啧啧啧
重新使用sudo
执行
提权成功
清除痕迹
总结
- 代码审计,知道满足哪些条件才能执行
- 对于网站目录,可以多测几遍,不要错过关键信息
- 多了解点英语单词吧
python
代码要有一定基础nc
命令的一些参数了解