攻防系列——pikachu靶场通关练习

目录

一、暴力破解

Burte Force(暴力破解)概述

(一)基于表单的暴力破解

(二)验证码绕过(on server)

(三)验证码绕过(on client)

(四)token 防爆破

二、Cross-Site Scripting

(一)反射型xss(get)

(二)反射型XSS(post)

(三)存储型XSS

​(四)DOM型XSS

(五)DOM型XSS-X  

 (六)XSS盲打

(七)XSS之过滤

 (八)xss之htmlspecialchars

 (九)xss之href输出

(十) xss之js输出

 三、CSRF 

csrf概述

(一)csrf get

(二)POST CSRF

​(三)CSRF Token login

四、SQL-Injection

五、RCE

(一)exec "ping"(远程系统命令执行)后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。

(二)exec "eval"(远程代码执行)后台把用户的输入作为代码的一部分进行执行,造成了远程代码执行漏洞。

六、File Inclusion(文件包含漏洞)

(一)本地文件包含

​(二)远程文件包含漏洞

七、unsafe filedownload

八、unsafe fileupload

九、over permission

(一)op1 login(水平越权)

(二)op2 login(垂直越权)

 十、目录遍历

十一、敏感信息泄露

敏感信息泄露概述

十二、PHP反序列化

十三、XXE(xml外部实体注入漏洞)

十四、URL重定向

十五、SSRF

写在最前面:有个大佬总结的比我的全面多了,我在有些地方稍微详细一些些。

贴上大佬博客地址:pikachu靶场通关_wuydsec的博客-CSDN博客_pikachu靶场通关

(这个靶场的作者真的好良心,呜呜u,好适合我 ✧(≖ ◡ ≖✿)ʕ̯•͡ˑ͓•̯᷅ʔ

一、暴力破解

从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基

Burte Force(暴力破解)概述

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!

你可以通过“BurteForce”对应的测试栏目,来进一步的了解该漏洞。

(一)基于表单的暴力破解

首先看需要用户名和密码登录,没有验证码。按照常规思路,先看了下源码。没有啥有价值的东西。直接随便用个用户名和密码试试。

 

显示用户名或者密码不存在。抓包看看

  burp-intruder小知识请移步(第一个比较白话,第二个比较全。我喜欢第一个哈哈):

[Burp Suite完整教程] Intruder Attack type和Payloads – 拥有上千种姿态的攻击模式 - 腾讯云开发者社区-腾讯云

Burpsuite—Intruder模块详解_大成小慧的博客-CSDN博客_burpsuite设置线程

通过post提交,在响应界面正常返回一个登陆失败的的界面。

 

 既然没有验证码,考虑下直接爆破。

第一步:选中此条post请求发送到Intruder中

第二步:清除变量

 第三步:选中用户名和密码点击Add$将其设置为变量。attack type选cluster bomb

 第四步:分别加载两个变量的字典

第一个变量的字典:

 第二个变量的字典(将上面的payload选择下拉的2,就可以开始加载第二个变量的字典)

第五步:由于爆破会有大量无效的用户名和密码,产生很多无效界面。所以设置一下

在grep-match中删除原有字符串,添加username or password is not exists,burp就会将所有含有此字符串的数据包flag出来。没有被flag出的数据包则是我们破解成功的数据包。点击username or password is not exists(这串是每次错误以后界面的提示信息)进行排序,没有勾选的则表明破解成功,有勾选的则表明破解失败。

(这样的提效思路参考的带佬:wuydsec)

 第六步:回到payloads或者positions,点击右边的start attack,查看长度不一样的那一个就是爆破的登录用户与密码(admin,123456)

字典请移步:https://github.com/rootphantomer/Blasting_dictionary

(二)验证码绕过(on server)

验证码知识

验证码的作用:
防止登录暴力破解
防止机器恶意注册
验证码大概的的认证流程:

客户端request登录页面,后台生成验证码:
1.后台使用算法生成图片,并将图片response给客户端;
2.同时将算法生成的值全局赋值存到SESSION中;
校验验证码:
1.客户端将认证信息和验证码-同提交;
2.后台对提交的验证码与SESSION里面的进行比较;
客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数,所以每次刷新都会改变;

直接开始吧:(源码就不看了,跟第一题应该大同小异。)

第一步:随便输入一个用户名和密码-抓包-直接--右键转发至repeater。

发现一共是三个变量(username、pwd、vcode)。提交看回显。

 第二步: 尝试直接修改username和pwd(不改vcode),并提交看回显。回显是username or password is not exists。和之前用admin 123提交后的提示是一样的。虽然我们没有改验证码,但是提示奥。(说明后台并没有验证码是否正确,根本不需要改)

 到这里,就可以明白,其实不用管验证码,只需要像第一题(基于表单的暴力破解)一样的办法,只要找到正确的username和pwd就行。方法同第一题。

ps:一般提交的验证码会被与存储在服务器session中的验证码做验证,但是这道题由于在验证完成后,没有及时的销毁session,使用过的session值仍然可以重复使用,所以产生了可利用漏洞。

(三)验证码绕过(on client)

通过on server同样的办法抓包修改发送,发现验证码同样没有经过与后台的验证。所以用on server的办法去爆破登录即可。

(四)token 防爆破

(1)Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。  
(2)Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。  
(3)使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮  
        如果我们没有这个token值得话,无法去请求得到想要的数据。
以上来自pikachu靶场之暴力破解_花墩墩的博客-CSDN博客

第一步:先随便输入一个username和pwd,抓包看看。发现和之前不同的是,虽然和第一类一样没有验证码,但是这种题目多了一个变量,就是token值。

第二步:利用返回的token值进行爆破,右键send to intruder并选择attack为pitchfork,同时清空并重新选择增加变量(pwd和token)

根据开头的token知识,后端是先验证每次用户提交的随机的token再进行后续的验证,所以每次都得考虑绕过token检验。token是一直变化的,爆破难度增加,但是既然token值既然已经返回到前端,就可以利用返回的token值进行爆破(这里涉及到burp的一个小用法)。

随便输个账号密码然后抓包。(token爆破适合运用于已知账号,然后爆用户密码。这里先假设username是admin。)

 第三步:options处为payload2做准备,也就是变量token的载荷。(token没有字典,是随机生成,所以需要在这里做特殊的设置,利用收集被返回到前端的token值进行后续的撞库)。第一次的token值记得复制下来待会要用。(如果失效了就再reftech一次)。

 第四步:payloads处为两个变量加载字典

以下是payloads1(也就是pwd的字典)

 以下是payloads2(也就是token的“字典”)

 第五步:设置一下线程。2022.8版本的burp根本没有resquest engine处拿来设置线程(把线程设置为1,因为一个token对应一次爆破)。所以百度了一下。参考Burp爆破时出现Error:recursive grep payloads cannot be used with multiple request threads_Minorko的博客-CSDN博客

第六步:attack。找到长度不一样的那一条。密码是123456.token值对应305176352b77513030496197936

 ps:本题假设的是username为admin,后来试了一下,如果不假设,直接开始爆破,那么三个变量都爆破试一试也是可以的。

小总结:针对登陆爆破类的题目,从做题角度来说,像token防爆破这道题和没有验证码的那道爆破题目,从访问界面来看是没有差别的(不看源代码的话),这类题一定要先抓包,看看变量有哪些再修改变量提交看看,多试一下。

二、Cross-Site Scripting

XSS(跨站脚本)概述

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型
    1.反射性XSS;
    2.存储型XSS;
    3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。(XSS漏洞可以用来进行钓鱼攻击、前端js挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。漏洞利用场景可参考XSS的高级利用:盗取用户Cookie - Zeker62 - 博客园
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因:是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

借用一下大佬的图:

跨站脚本漏洞常见类型

●反射型
交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
●存储型
交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。
●DOM型
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。

(危害:存储型>反射型> DOM型)

跨站脚本漏洞测试流程
①在目标站点上找到输入点,比如查询接口,留言板等;
②输入一组”特殊字符+唯一识别字符”, 点击提交后,查看返回的源码,是否有做对应的处理;
③通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件 (构造闭合) ;
④提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

ps:利用漏洞时,由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行(浏览器) ;通过变化不同的script ,尝试绕过后台过滤机制。

(一)反射型xss(get)

 第一步:发现上图界面,类似查询界面。

第二步:输入一组”特殊字符+唯一识别字符”(比如;"’<>9999), 点击提交后,查看返回的源码,是否有过滤。

 从上图可以看出,没有过滤,原封不动的返回了。(看页内源码,CTRL+F在页面内查找我们输入的字符。)

第三步:既然没有过滤,那直接写脚本

<script>alert("123")</script>,发现无法完整输入。说明搜索框有长度限制。

 第四步:修改限制输入长度。

一般长度限制都是通过前端html代码校验,所以这里我们有两种方法:

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值