基于pikachu的漏洞学习(一)暴力破解XSSCSRF

文章目录

    • 暴力破解
      • 确定范围
      • 表单弱口令
      • burp测试
      • 验证码暴破
      • js前端验证码
      • token?
    • XSS
      • 反射型xss
      • 存储型xss
      • DOM型xss
      • xss钓鱼
        • get
        • post
        • 基于basic认证
      • 键盘记录
      • 盲打-针对其他用户
      • XSS过滤绕过
        • 正则
        • 编码
        • 关于htmlspecialchars()
        • javascript伪协议
      • 补充说明
    • CSRF

暴力破解

在测试过程中经常会遇到类似的登录接口

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第1张图片

随便输入一个用户名密码,输入正确的验证码,提示用户名或密码不存在

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第2张图片

通过猜测尝试登录,这个猜测的过程就是暴力破解,猜当然也是有技巧也有限制的

确定范围

测试时,应首先确定被测试对象的范围

如验证码暴破:它的范围是4位或6位数字或字母组成的,根据具体场景有所不同,登录时手机或邮箱会收到这种验证码验证登录

但是一些没有具体范围的只能尽量缩小范围,再尝试用使用频率较高的值进行暴破,或者结合目标信息进行组合暴破,就是弱口令

表单弱口令

所谓弱口令,就是设置的比较简单,比如nordpass公布的2021年最常用的top200密码

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第3张图片

最常用的依然是123456这种非常容易猜测的密码,woaini,呵呵,147258369是9键数字键盘纵向密码,zxcvbnm,键盘最下一排字母,都是非常方便记忆的

而一些开发测试人员,网站管理员在使用某些程序时,会设置一些类似test,admin,user…等比较方便通用的用户名或者使用程序默认的用户名,比如我的数据库用户名为root就是默认的

burp测试

burpsuite抓包,设置两个变量,选择 Cluster bomb 模式,适用于用户名+密码破解

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第4张图片

配置字典

set 1对应用户名,set 2对应密码 ,runtime file是选择指定文件,文件名是英文的

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第5张图片

还有一个非常好的功能,就是结果匹配

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第6张图片

因为登录成功会返回login success,我们在结果中匹配就可

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第7张图片

登录成功

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第8张图片

但是可以看到这里一共有3个用户

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第9张图片

我们只找到两个,使用网站相关的用户名也是比较常见的一种方式,比如公司缩写+年份,学校缩写+学号…这个看似只能靠经验了,我觉得在测试过程中可能还是大海捞针,或者一些软柿子系统或者没人维护才会有这样的漏洞

不喜欢很讨厌很烦

验证码暴破

on-server 这个流程是后端生成验证码

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第10张图片

showvcode.php

session_start();              //开启session
include_once 'function.php';  //引用function.php 生成验证码图片
$_SESSION['vcode']=vcodex();  //验证码赋值 

将我们输入的值与 $_SESSION[‘vcode’] 进行对比,这里还把字符转为小写再比对

if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) {
    $html .= "

验证码输入错误哦!

"
; }else{登录操作} //strtolower()转为小写

但是缺少了一个操作,导致验证码可以暴破

登录抓包,重放请求,验证码正确且不变,多次尝试更改用户名密码都不显示验证码错误

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第11张图片

这里我们继续暴破就可以了,要注意如果没有拦截请求重发,而是放包后重发,验证码已经被刷新,需保持一致

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第12张图片

那么这里的防护措施也很简单,就是在验证过后,将vcode的值清空,做到一次一密,正常session的过期时间是24分钟,在这一段时间内验证码都是有效的

//应该在验证后,销毁该变量
unset($_SESSION['vcode']);

手机接收的验证码并不需要一验一换,很多都是设置了几分钟的失效时间的

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第13张图片

这时就需要一种次数验证机制了,一般是 5 次以后锁定账户短时间不允许登录

js前端验证码

顺便说一下 on-client 的验证码绕过,一切前端的验证都是纸老虎,在js里生成验证码,在js里验证

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第14张图片

这些都是可控的,可绕过的,在burp里抓包,随意修改,甚至为空都不会进行验证,因为在burp里不加载js

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第15张图片

当然暴力破解不限于用户名密码的破解,像是网站路径,后台,订单号,服务,一切能猜的都可以猜,好的字典是最重要的。

token?

通过生成随机序列标记每一次请求,通过表单发送,如果token值不匹配,则无法登录

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第16张图片

该token的生成过程是请求该页面时,就下发到客户端,输出到页面上了,然后在发送登录请求时自动带上token,如果页面刷新,或者登录失败,或者重复登录,token都会刷新,我们很容易获取 token

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第17张图片

尝试写脚本

发现需要cookie验证,因为必须是同一个session的token,服务端就是通过session id区分不同会话

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第18张图片

session id不同则失效

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第19张图片

XSS

所谓的xss就是输入的数据–>在前端当成js代码执行

反射型xss

js我们前两篇文章已经接触过一些了,一种就是包裹在标签中的javascript代码,尝试输入

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第20张图片

它是在

标签中直接输出的,完全可以执行js代码,看下源码

$html.="

who is {$_GET['message']},i don't care!

"
; <form method="get">"message"参数<form> <?php echo $html;?>

修改一下最大输入长度,弹个窗

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第21张图片

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第22张图片

弹窗字符串,发现双引号被转义了

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第23张图片

既然转义了,就使用其他等效的方式,比如使用函数将Unicode转成字符串

<script>alert(String.fromCharCode(88,83,83))script>//大写
<script>alert(String.fromCharCode(120,115,115))script>//小写

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第24张图片

反射型xss就是构造一次执行一次的,刷新了就没了

这里是通过get参数传递,点击一次url链接就可以执行一次

xss_reflected_get.php?message=%3Cscript%3Ealert%28String.fromCharCode%2888%2C83%2C83%29%29%3C%2Fscript%3E&submit=submit

post传参也一样,重点是参数怎么在页面源代码中显示

存储型xss

顾名思义,就是存储在html源代码中了,每次加载页面都会执行

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第25张图片

DOM型xss

DOM型也是反射型xss,只不过输出在DOM树中,闭合有一些微小差异

输入标签,发现标签被输出到标签的href属性中了

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第26张图片

我发现有js基础看这个就是很顺理成章的东西,建议大家都去学基础知识

闭合一下就完事了

输入 #' onclick="alert('xss')"> 正常弹窗

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第27张图片

有一个地方要注意,闭合href 为什么用单引号呢?当然因为源码href 属性是单引号包裹的,单双引号是必须要匹配的,虽然 f12显示的双引号,但是用双引号闭合真的不行

document.getElementById("dom").innerHTML = "what do you see?";

只要是成对匹配,单引号双引号都可以,修改一下源码的单双引号,测试

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第28张图片

基于pikachu的漏洞学习(一)暴力破解XSSCSRF_第29张图片

为什么用onclick 事件属性,因为加入 //加载js //加载图片 //加载css