最近发现,之前学的各种东西已经比较生疏了,所以重新来通关一个靶场来回忆一下
暴力破解
基于表单的暴力破解
看到这个,再看到题目名字,直接使用burp中的爆破功能,我们抓取他登陆的包
然后导入我们的字典,开始爆破,成功得出账号密码分别是admin和123456
验证码绕过(on server)
1.保持bp的抓包状态,随便输入账号和密码,先不输入验证码。
2.打开bp,右击选择send to repeater,把请求发送到 repeater
3.打开Repeater,点击GO,观察状态。
4.这时,右侧会显示验证码不能为空,因为此前没有输入验证码
5.如果随便输入一个验证码,此时显示验证码错误!
6.然后把pikachu平台中的正确的验证码输入进去,则显示账号或密码错误!说明了后台会把提交的验证码进行验证,看是否正确,接下来进行暴力破解!
7.然后把pikachu平台中的正确的验证码输入进去,则显示账号或密码错误!说明了后台会把提交的验证码进行验证,看是否正确,接下来进行暴力破解!步骤和基于表单的暴力破解是一样。将Proxy中抓到的,右击发送到Intruder,然后添加账户和密码变量,放入字典。
(我这里因为知道了他账号密码,所以就直接不上字典了)
验证码绕过(on click)
验证码输入正确、为空、输入错误分别提示login success,请输入验证码,验证码输入错误。
什么都不输入或只输入用户名和密码点击登录,页面弹出“请输入验证码!”的提示框,而不是用户名和密码不存在
我们查看源码,输入的验证码在本地验证,我们可以在burp suite不输入验证码或者输入错的验证码完成爆破
burp suite抓包,删除验证码,发送到intruder模块
token防爆破?
抓包,发现有一个token
点击右键发送至intruder。
点击intruder模块中positions选择攻击类型为Pitchfork,设置password与token为变量。
选择options,Grep-Extract 打勾点击add。
点击refetch response 找到响应包中的token的值选择点击确定。然后在
Redirections中选择always。
点击payloads set 1 type类型选择runtime file加载密码字典,set 2 type选择
recursive grep 复制刚才的token值粘贴至first request:
点击start attack进行破解。
注意,这里需要把线程数设置为1,否则爆破不了
CSRF
CSRF(get)
首先点击右边的提示,使用他提供的账号登陆
然后开启代理,burp抓包,抓取提交修改信息的包
把报文中GET请求的东西复制下来,输入url+复制的东西
如果被攻击者此时登录状态或cookie/session没有过期,则她的信息被修改,步骤如下图
CSRF(post)
选择一个账号登陆,开启burp抓包,照样抓取修改信息提交的包
我们可以看到POST方式传入的参数有sex phonenum add email submit
这时候我们需要自己写一个php表单来构造这个post请求
这里直接贴上代码
之后访问我们构造的表单的界面,按下回车即可
1 |
<!DOCTYPE html> |
SQL-Inject
数字型注入(post)
首先我们是在网页上提交了一个id返回到了后端,后端返回了一个名称和邮箱,正常情况下,所有用户的数据应该是存放在数据库里面的,所以当我们输入了一个1发送到后端,后端应该会在数据库中做一个查询,所以后端代码的逻辑我们可以猜测为
1 |
$id=$_POST['id'] |
字符型注入(get)
Payload:
1 |
1' union select 1,2 # 判断列数 |
搜索型注入
Payload:
1 |
' order by 3 # //爆回显位 |
xx型注入
开始做直接用单引号闭合后报错,我也是一脸懵逼,点开了提示,他说管tmd的什么型,能够制造出闭合,就是本事,所以我们尝试一下,加一个单引号后报错,两个不报错,加双引号也不报错,后面发现要用括号闭合,直接上payload
1 |
1') order by 3 # //爆字段数,三个报错,证明两个字段 |
insert/update注入
猜测后台的mysql语句应该是
1 |
insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4) |
那我们可以在xxx的位置构造我们的注入语句
1 |
xxx' or updatexml(1,concat(0x7e,database()),0) or ' |
后台的mysql语句被我们拼凑成了
1 |
insert into user(name,password,sex,phone,address1,address2) value('xxx' or updatexml(1,concat(0x7e,database()),0) or '',123,1,2,3,4) |
接下来是update注入,我们正常注册一个账号以后登陆,修改信息时推测后台语句如下
1 |
update tables set sex = '$sex' where name = 'sbb'; |
这样我们可以在$sex处构造语句
1 |
xxx' or updatexml(1,concat(0x7e,database()),0) or ' |
构造出来的语句
1 |
update tables set sex = 'xxx' or updatexml(1,concat(0x7e,database()),0) or ' |
之后就可以爆破我们的数据库了
RCE
File Inclusion
File Inclusion(local)本地文件包含
File Inclusion(remote)远程文件包含
Unsafe Fileupload
Unsafe Fileudownload
点击名字可以下载图片,我们使用Burpsuite进行抓包
1 |
GET /vul/unsafedownload/execdownload.php?filename=ai.png HTTP/1.1 |
我们这里可以发现,他filename=ai.png 这是要下载的文件,我们这里为了验证他,在网站根目录创建一个1.txt 内容为filedownfile
把get传入的参数filename=ai.png换成filename=../../../1.txt(这里具体可以看文件目录遍历那里)
然后点击repeat 发包
Over Permisson
水平越权
水平越权是相同权限下的越权,比如A和B同一个权限, 通过A来完成B的操作
随便选个账号登陆进去,选择查看信息按钮
可以发现这里url里有个参数和我们的用户名一样
1 |
http://pikachu.com/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF |
我们猜测这里是不是根据这里传入的username来获取我们的信息的,我们把这里的username替换成他提供的其他账号试试
成功完成水平越权
垂直越权
垂直越权是从低权限用户来对高权限用户操作的过程
这里有两个账号,pikachu是低权限,admin是高权限,我们分别登陆进去
发现pikachu只有查看权限,admin有添加用户权限
我们先来看看http://pikachu.com/vul/overpermission/op2/op2_user.php 这个代码
op2_admin_edit.php中只对登录情况计行了判断,而没有对用户的权限进行判断,所以普通用户也可以进入该网站添加新用户实现垂直越权
而op2_admin.php对session中的level进行判断,如果没有登录或者登陆的用户的level不是1,就全部退出,所以只要登陆的用户的level不是1就会自动退出登陆
造成这种越权的原因是高权限的操作界面没有验证当前登陆用户的级别,从而导致了越权的发生
我们这里开两个浏览器,一个浏览器先登录普通的用户pikachu,另外一个浏览器登陆管理员用户admin
目录遍历
我们先随便点击一个,发现他的url如下
1 |
http://pikachu.com/vul/dir/dir_list.php?title=jarheads.php |
猜测他这里的title可控,我们可以通过修改这里的title参数来修改他读取的文件,为了测试,我们在网站根目录下建一个1.txt
内容是验证目录遍历,通过他的url可知,我们在根目录下建立的1.txt应该位于当前目录上面三级,也就是../../../
文件名是1.txt,所以我们应该传入title=../../../1.txt
敏感信息泄露
PHP反序列化
1 |
class S{ |
靶场的主要代码如图所示
先是class一个对象,初始化了一个test属性,还有一个_construct魔法函数,这个函数在对象被创建时使用
然后post方法传入一个o参数赋给变量S
如果unser变量不等于反序列化以后的S变量的值,$html就要输出“大兄弟,来点劲爆点儿的!”
我们这里可以让他输出一个弹窗 比如
1 |
<script>alert('xss')</script> |
所以这里就要想办法跳过if为真时的情况,就是unser=unserialize($s)
所以我们这里要自己写一个poc,来生成序列化后的内容
poc: 这里如果直接echo serialize($a); 的话,他直接执行里面的弹窗的script代码
所以我使用了一个textarea标签,把他里面的Payload直接输出到这个textarea标签里,方便观看
1 |
<?php |
所以最后的Payload:
1 |
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";} |
1 |
常见的几个魔法函数: |
XXE
URL重定向
SSRF
相关推荐: 2021TCTF总决赛进入倒计时,极客之巅谁将问鼎?
9月26日,第五届腾讯信息安全争霸赛(TCTF)总决赛进入第二个比赛日,经过30多个小时的激烈角逐,来自俄罗斯的More Smoked Leet Chicken战队和浙江大学AAA战队暂时分列国际赛和新星邀请赛积分榜第一。 冲刺进行时 紧追不舍,战况焦灼 第二…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论