burpsuite中intruder模块基础
Burp Intruder主要有四个模块组成:
1:Target 用于配置目标服务器进行攻击的详细信息。 2:Positions 设置Payloads的插入点以及攻击类型(攻击模式)。 3:Payloads 设置payload,配置字典 4:Opetions 此选项卡包含了request headers,request engine,attack results ,grep match,grep_extrack,grep payloads和redirections。你可以发动攻击之前,在主要Intruder的UI上编辑这些选项,大部分设置也可以在攻击时对已在运行的窗口进行修改。
1:Target 目标选项(Target tab)
这个选项是用来配置目标服务器的细节:
2:Positions 位置选项(Positions tab)
这个选项是用来配置在攻击里产生的所有 HTTP 请求的模板:
3:Payloads 有效负荷选项(Payloads tab)
这个选项是用来配置一个或多个有效负荷的集合。如果定义了”cluster bomb”和”pitchfork”攻击类型,然后必须为每定义的有效负荷位置(最多8个)配置一个单独的有效负荷。使用”payload set”下拉菜单选择要配置的有效负荷。
选项1:Payload Sets Payload数量类型设置
选项2:Payload Opetions[Simple list] 该选项会根据选项1中Payload type的设置而改变
选项3:Payload Processing 对生成的Payload进行编码、加密、截取等操作
选项4:Payload Encoding 你可以配置哪些有效载荷中的字符应该是URL编码的HTTP请求中的安全传输。任何已配置的URL编码最后应用,任何有效载荷处理规则执行之后。 这是推荐使用此设置进行最终URL编码,而不是一个有效载荷处理规则,因为可以用来有效载荷的grep选项来检查响应为呼应有效载荷的最终URL编码应用之前。
4:Opetions 选项卡(Options tab)
此选项卡包含了request headers,request engine,attack results ,grep match,grep_extrack,grep payloads和redirections。你可以发动攻击之前,在主要Intruder的UI上编辑这些选项,大部分设置也可以在攻击时对已在运行的窗口进行修改。
选项1:Request Headers 这些设置控制在Intruder是否更新配置请求头。
选项2:Request Engine 设置发送请求的线程、超时重试等。
选项3:Attack Results 设置攻击结果的显示。
选项4:Grep – Match 在响应中找出存在指定的内容的一项。
Burp Suite Intruder的4种攻击类型
Sniper(狙击手模式)
狙击手模式使用一组payload集合,它一次只使用一个payload位置,假设你标记了两个位置“A”和“B”,payload值为“1”和“2”,那么它攻击会形成以下组合(除原始数据外):
attack NO. | location A | location B |
---|---|---|
1 | 1 | no replace |
2 | 2 | no replace |
3 | no replace | 1 |
4 | no replace | 2 |
Battering ram(攻城锤模式)
攻城锤模式与狙击手模式类似的地方是,同样只使用一个payload集合,不同的地方在于每次攻击都是替换所有payload标记位置,而狙击手模式每次只能替换一个payload标记位置。
attack NO. | location A | location B |
---|---|---|
1 | 1 | 1 |
2 | 2 | 2 |
Pitchfork(草叉模式)
草叉模式允许使用多组payload组合,在每个标记位置上遍历所有payload组合,假设有两个位置“A”和“B”,payload组合1的值为“1”和“2”,payload组合2的值为“3”和“4”,则攻击模式如下:
attack NO. | location A | location B |
---|---|---|
1 | 1 | 3 |
2 | 2 | 4 |
Cluster bomb(集束炸弹模式)
集束炸弹模式跟草叉模式不同的地方在于,集束炸弹模式会对payload组进行笛卡尔积,还是上面的例子,如果用集束炸弹模式进行攻击,则除baseline请求外,如果payload组合1的值为“1”和“2”,payload组合2的值为“3”和“4”,会有2×2=4次请求:
attack NO. | location A | location B |
---|---|---|
1 | 1 | 3 |
2 | 1 | 4 |
3 | 2 | 3 |
4 | 2 | 4 |
web21
进入页面后需要登录
题目提示需要下载zip,里面有字典
bp抓包,发现抓取的包没有直接的用户名和密码
但发现有一处像加密字符
Authorization: Basic YWRtaW46MTIz
base64解码
正是输入的用户名和密码
所以需要对加密的字符串进行爆破
1、首先需要载入下载好的字典
2、加入前缀 admin:
3、取消URL字符编码,因为base64中含有=会造成解码失败
web22
提示爆破子域名
子域名爆破网站
爆破出几个域名
挨个点进去
发现在vip.ctf.show的标签处有提示
web23
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
代码审计类
读取代码
1、传入的token值,经过md5加密
2、加密后的md5,经过substr截取,下表从0开始读取,所以第1位为第个数字,第1位等于第14位并且第14位等于第17位
3、intval函数,获取变量的整数型。第1位+第14位+第17位÷第1位等于第31位
加密代码用PHP写,可以用PHP写逆转算法
<?php
for ($i=0;$i<10000;$i++){
$token=md5($i);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo 'token = '.$i.'md5 ='.$token;}
}
}
解出有多个token
访问得到flag
web24
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
代码审计
1、通过get方式传入参数r
2、生成随机数mt_srand(372619038)
3、如果传入参数r和生成随机数值一样,输出flag
依然改写PHP进行输出
<?php
mt_srand(372619038);
echo intval(mt_rand());
得到随机数值后,/?r=数值 ,得到flag
web25
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
代码审计
1、种子mt_srand值没有给出,但可以通过传入参数r设置为0,得到mt_rand的值,即随机数的值
2、通过判断!$rand=0后,再判断传入的cookie值token等于两个随机数,输出flag
通过r设为0求出随机数值
通过工具php_mt_seed逆求出PHP各版本的种子值
./php_mt_seed 1570160772
猜测题目环境的PHP版本为7.1.0+
那么种子值为 0x8949f82b
最后根据代码审计的结果,逆向写出PHP解法
<?php
mt_srand(0x8949f82b);
mt_rand();
echo mt_rand()+mt_rand();
输出的两个随机数之和,为cookie值
写入cookie里的token
然后根据r=0得出的数值的绝对值,传给r
这一步是确保!$rand不为0,r=1879496888时,$rand = intval($r)-intval(mt_rand())=0
经过!$rand取反后,不为0
web26
进入界面,发现什么都没填写直接提交后提示连接成功
说明默认填写的数据是正确的,可以连接成功
查看源代码,发现有checkdb.php
按照里面的变量post数据,即可连接成功返回flag
web27
进入界面后是一个登陆界面
点击录取名单,里面有人员信息
但没有学号,其中身份证号码中间出生年月日被隐藏
再点击查询系统
只要有姓名和身份证号码就可以查到学号
抓包用bp进行爆破
bp的intruder模块可以用出生年月日生成八位数字,并加上已知的前缀后缀数字进行爆破
爆破出长度不一样的,查看返回包进行解码
利用控制台console.log(” “)进行Jason解码
然后利用爆破出的学号和身份证号码登录拿flag
web28
登录页面,提示哪里存在flag
观察url,比较特别
子目录为/0/1/
应该是对子目录进行爆破
抓包,删除末尾的2.txt,只对0、1爆破,选择cluster
生成数字1-100,交替爆破,共10000次