pikachu靶场分析笔记

pikachu靶场分析笔记

一、暴力破解

1、基于表单的暴力破解

一个登录表单,也没有验证码之类的安全验证。可以直接抓包爆破

在这里插入图片描述

一开始想看看这里是不是存在SQL注入的,但发现使用了 mysqli 扩展进行预处理:

pikachu靶场分析笔记_第1张图片

  1. 使用 $link->prepare() 函数来准备 SQL 语句,得到一个 mysqli_stmt 对象。
  2. 使用 $line_pre->bind_param() 函数来绑定参数,第一个参数为参数类型,第二个参数为要绑定的参数值。
  3. 使用 $line_pre->execute() 函数执行准备好的语句,并返回执行结果。
  4. 使用 $line_pre->store_result() 函数将查询结果存储在 mysqli_stmt 对象中。
  5. 使用 $line_pre->num_rows 函数获取查询结果的行数。

虽然SQL注入没有,但是这里没有任何防御爆破的措施可以直接抓包爆破

pikachu靶场分析笔记_第2张图片

2、验证码绕过—前端(客户端)验证

这里采用了验证码来防止暴力破解,但是验证码却是由前端生成并校验的

pikachu靶场分析笔记_第3张图片

这种验证码,抓包即可绕过

pikachu靶场分析笔记_第4张图片

验证码只在前端校验,删掉这个字段都可以

3、验证码绕过—服务端验证码复用

这里的验证码由服务器生成

在这里插入图片描述

当登录请求到达服务端后,服务端返回响应包,客户端再次请求验证码,达到刷新的目的。乍一看好像并没有什么问题,但是如果客户端没有收到响应包呢?这样就不会刷新验证码。

在这里插入图片描述

而且服务端在校验验证码非空且正确后,便校验提交的用户名和字典。正常情况下不管校验结果如何,验证码一旦提交到服务端,在验证后,不管对不对,都应该销毁,重新刷新。但这里服务端没有及时销毁更新验证码

pikachu靶场分析笔记_第5张图片

使得抓到请求包后丢弃,便不会刷新验证码,从而达到验证码重复利用,爆破账户的目的

pikachu靶场分析笔记_第6张图片

这里还有一个问题:服务端将验证码字符串以明文COOKIE的方式给了前端

在这里插入图片描述

4、token防爆破

这里使用了token验证来代替验证码,每次登录请求都会带上上一次生成的token

pikachu靶场分析笔记_第7张图片

但是这里有一个问题,那就是生成的token,直接储存在前端,方便下一次请求携带

在这里插入图片描述

只要我们爆破时,把上一次的请求响应包中的token值当作这一次的token一起提交到服务端即可完成token验证,也就达到了爆破的目的。

将token和password两项设置为变量 攻击模式使用Pitchfork。选择Resource Pool将线程数设置为1(递归查找,将上一个请求的相应token作为下一个请求的payload的token,所以就不并发)

pikachu靶场分析笔记_第8张图片pikachu靶场分析笔记_第9张图片

Grep-Extract模块进行相应设置,获取相应的token,截取相应token的前后标识,用于下次截取
pikachu靶场分析笔记_第10张图片

Redirections模块设置允许重定向,选择always

pikachu靶场分析笔记_第11张图片

payloa设置

pikachu靶场分析笔记_第12张图片

开始爆破,成功!

pikachu靶场分析笔记_第13张图片

二、XSS

1、反射型XSS(get)

这里对输入的参数没有任何过滤,就直接拼接在要显示在页面的语句中

pikachu靶场分析笔记_第14张图片

但是前端对输入的内容有字数限制,秉持着”我的地盘我做主“的原则,手动改一下就行了

pikachu靶场分析笔记_第15张图片

输入xss语句,提交触发

pikachu靶场分析笔记_第16张图片

2、反射型XSS(post)

这里和1类似,只是提交参数的方法不同,而且这里还没有字数限制

pikachu靶场分析笔记_第17张图片

输入XSS语句,提交触发

pikachu靶场分析笔记_第18张图片

3、存储型XSS

这里模拟的是留言场景,未经过滤的留言,直接写入数据库,然后显示在页面上,造成了存储型XSS

pikachu靶场分析笔记_第19张图片

我还尝试测试了一下SQL注入,但是很遗憾,这里会转义单引号

在这里插入图片描述

构造XSS语句,提交,触发弹框

pikachu靶场分析笔记_第20张图片

这里源代码提示还有一个SQL注入彩蛋,虽然insert语句中参数有引号保护,但是删除留言的delete语句没有。但是这里有一个id是否为数字的判断,无法注入

pikachu靶场分析笔记_第21张图片

如果没有这个确实可以注入

pikachu靶场分析笔记_第22张图片
pikachu靶场分析笔记_第23张图片

4、DOM型XSS

这里的XSS只是涉及前端,影响浏览器本地的DOM结构。前端代码获取到输入内容直接拼接在href标签中

pikachu靶场分析笔记_第24张图片

构造XSS语句,只要闭合掉前面的标签即可

pikachu靶场分析笔记_第25张图片

也可以直接在href标签内插入javascript伪协议构造的语句:javascript:alert(document.cookie),点击what do you see?(a标签))即可触发

5、DOM型XSS—X

这里与4略有不同,这里是通过URL获取输入的内容

pikachu靶场分析笔记_第26张图片

构造xss语句

pikachu靶场分析笔记_第27张图片

6、XSS盲打

XSS盲打是指在一些自己并不能立即触发(自己能触发,那么普通用户也可以)的一些场景,比如留言需要审核的场景或者网站管理人员收集信息的一些表单。这场景并不是普通用户或者说是攻击者可以访问的,于是就不能立即判断这类场景是否存在XSS漏洞,只能通过搭建接收平台(盲打平台),看是否收到测试目标的信息(一般是cookie),因此叫做盲打。

这里是一份类似调查问卷的东西,需要管理员登录后台查看

在这里插入图片描述

提交后,登录触发

pikachu靶场分析笔记_第28张图片

7、xss之过滤

这里使用preg_replace函数正则匹配过滤掉了";}

pikachu靶场分析笔记_第107张图片

十三、XXE

这儿运用了simplexml_load_string() 函数来处理接收到的xml实体。这个函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素。

对于输入的xml这里没有做任何过滤,直接就传入simplexml_load_string() 函数,并且在页面中输出结果

Xxe漏洞利用方式

任意文件读取
探测内网地址、端口
通过DTD窃取文件
远程代码/命令执行

这里利用这个漏洞读取文件

payload:
 DOCTYPE ANY [      ]> <x>&f;x>

pikachu靶场分析笔记_第108张图片

这里使用的是file协议,这里也可以使用http协议或者php伪协议等

如果要RCE则使用例如下列payload:



]>
&xxe;

XXE防御

1、使用开发语言提供的禁用外部实体的方法

1.PHP:

libxml_disable_entity_loader(true);

2.JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

3.Python:

from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2、过滤用户提交的XML数据

过滤关键词:

十四、URL重定向

这里点击第四行文字时会有一个url参数

pikachu靶场分析笔记_第109张图片

这里url参数接收到url后,header Location重定向到url,这里没有对url参数做任何的过滤和限制

pikachu靶场分析笔记_第110张图片

输入url为哔哩哔哩网站

pikachu靶场分析笔记_第111张图片

点击跳转

pikachu靶场分析笔记_第112张图片

url跳转比较直接的危害是:
钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站

十五、SSRF

1、SSRF(CURL)

curl是PHP的一个扩展,curl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。

这里使用curl_exec()执行一个cURL会话。$URL未经任何过滤直接传入curl_exec()中,造成SSRF

pikachu靶场分析笔记_第113张图片

这里的功能是info.php引用过来了显示在页面上
pikachu靶场分析笔记_第114张图片
可以直接显示网站的根目录

pikachu靶场分析笔记_第115张图片

也可以通过file等协议读取文件

pikachu靶场分析笔记_第116张图片
还可以使用dict协议扫描内网主机开放端口

示例:url=dict://192.168.198.1:21

2、SSRF(file_get_content)

这里使用了file_get_contents函数来读取文件内容并显示下页面中。file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

pikachu靶场分析笔记_第117张图片

这里同样可以通过file等协议读取文件,受限于file_get_contents函数,这里利用多是读取文件

这里演示使用php伪协议读取:php://filter/read=convert.base64-encode/resource=xxx.php

pikachu靶场分析笔记_第118张图片

你可能感兴趣的:(代码审计与分析,web安全,网络安全)