web入门之爆破

admin 52 0

web21

题目描述

爆破什么的,都是基操

进入到网站,提示需要用户名和密码, 那么用户名默认都是amdin了,但是密码我们不清楚。这里提供了一个字典。

字典下载链接:https://ctf.show/files/ad7f1e3ba792041095f82853c9528855/dic.zip

web入门之爆破

这里是个HTTP的Basic认证。传输的用户和密码都在HTTP的请求中的Authorization定义。

web入门之爆破

其中的用户和密码之间使用冒号进行间隔的base64编码。比如我们输入的用户名为admin,密码为Admin123,那么其传输的明文就为admin:Admin123,对应的base64编码就为:YWRtaW46QWRtaW4xMjM=

我们可以使用burpsuite工具的Intruder模块进行爆破测试。

在抓到的数据包处右键将其发送到Intruder模块

web入门之爆破

接着鼠标选中用户名和密码编码的base64,点击Add,将其设置为变量。这里就是我们从字典中替换的位置。

web入门之爆破

第一步先点击选项卡中的Payloads,之后将Payload类型设置为Custom iterator(自定义拼接)

第二步设置拼接的字符为admin

web入门之爆破

第三步将Position(位置)设置为2,也就是第二个段拼接的是什么字符。由于basic发送的认证信息为用户:密码。此时位置1的用户名在第二步已经设置过了。这里需要再位置2,设置英文的冒号即可。

web入门之爆破

设置完毕之后。接着设置位置3的payload,位置3的应该是爆破使用到的密码。这里将位置设置为3,之后点击load加载下载dic.zip解压之后的字典即可。

web入门之爆破

至此payload设置完毕,但是我们这里设置的都是明文的内容,而实际上传给服务器的用户名和密码,是经过base64编码过的。于是,我们将内容编码之后,再提交即可。

web入门之爆破

我们仍然在Payloads选项卡中的Payload Processing(有效载荷处理)处,点击Add添加处理,将其设置为encode(编码处理),之后选择Base64-encode编码点击OK即可。

由于base64编码中可能存在特殊字符=,为了防止其被url编码。导致最终服务器解码错误。因此需要再Paylaods选项卡的底部的Payload Encoding(有效载荷编码)中将url编码取消勾选。将其不使用url编码,编码payload即可。

web入门之爆破

设置完毕之后,点击Start attack(开始攻击)即可。

web入门之爆破

最终认证成功和认证失败,返回数据包的长度不同,即可判断是否登录成功。最终payload为YWRtaW46c2hhcms2Mw==的数据包认证成功。

将该base64解码之后,得到:

web入门之爆破

正确的密码为shark63

web入门之爆破
web入门之爆破
ctfshow{abacf97a-3ebc-4675-be1e-4afdb372dea2}

web22

题目描述:

域名也可以爆破的,试试爆破这个ctf.show的子域名

很多网站的管理后台,可能存在一个子域名下。那么我们可以通过Layer子域名挖掘机加载字典,以爆破的形式,去获取一个网址的子域名。

本道题的子域名为:flag.ctf.show

但是由于域名会更新,该域名会失效,所以这题的flag是公开的。

flag{ctf_show_web}

web23

题目描述:

还爆破?这么多代码,告辞!

题目的源码如下:

web入门之爆破

根据代码可以得知,需要同时满足两个if条件即可得到flag,代码的分析如下:

<?php 

include('flag.php');
if(isset($_GET['token'])){
	// 将通过GET传入的token参数经过MD5加密之后赋值给$token变量
    $token = md5($_GET['token']);

    /* 第一个if语句 需要同时满足两个条件
    第一个条件是$token得第1位必须跟第14位值一致并且$token的第14位要与17位的值一致
    */
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
    	/* 
		第二个条件是$token值的第一位加上第14位的结果加上第17位的结果,之后再除以$token第一位
		如果最终的值等于31的值,则会打印flag
    	*/
        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__);

} 

?>

这里编写php代码,将满足以上两个if条件的结果打印出来。

解题思路:

先试用for循环,打印出05000的数字,之后再将这些数字经过md5加密之后。使用题目的两个if语句判断,将满足要求的打印即可。

web入门之爆破

通过结果,可以得知422MD5值,是满足题目的两个if语句的。

web入门之爆破
ctfshow{dac7bb07-bd6e-4c87-8dba-4e554c5cf12e} 

web24

题目描述:

爆个🔨

题目源码如下:

web入门之爆破

通过审计代码可以得知,这里设置一个随机数种子。

随机数种子(random seed)是指在伪随机数生成器中用于生成伪随机数的初始数值。

web入门之爆破

当使用mt_srand()函数播下一个随机数种子1000的时候,那么之后再生成的随机数的初始值,就为一个固定值,这里为1403572953

因此题目也播下了一个随机数种子,只不过值为372619038。那么该种子得到的随机数就为1155388967

web入门之爆破
web入门之爆破
ctfshow{dd93f389-b641-4a42-ab66-e595100cbf8a}

web25

题目描述:

爆个🔨,不爆了

题目的源码如下:

web入门之爆破

代码审计如下:

<?php 

if(isset($_GET['r'])){
    $r = $_GET['r'];

    // 先截取flag的前8位,然后将其转为十进制之后。作为随机数种子
    mt_srand(hexdec(substr(md5($flag), 0,8)));

    // 将r参数取整然后减去取整后的随机数种子,再赋值给$rand
    $rand = intval($r)-intval(mt_rand());

    // 将$rand取反,如果要得到flag,$rand的值必须为0。
    if((!$rand)){
    	// cookie里面的token值 与 两次随机数的值相加的结果相等 才会打印最后的flag
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}

?>

通过传入参数?r=0,可以得到随机种子第一次生成的数值。因为代码是让$r的值与第一次生成的随机数相减。那么假设随机数是100,那么0减去100的结果,就是-100

web入门之爆破

得到第一次随机数生成的种子,我们可以已使用php_mt_seed反向推出该数值的随机数种子

程序下载地址:https://github.com/Al1ex/php_mt_seed/blob/master/php_mt_seed-4.0.tar.gz

先试用make编译该文件,之后使用执行该程序,并在程序后面加上我们得到的第一次随机出来的值1780920432

web入门之爆破

那么接下来,我们如果通过第一个if语句呢,我们已经知道第一次随机出来的数值为1780920432,那么我们就传入?r=1780920432。那么$r和随机出来的1780920432相减之后,结果就为0。之后$rand的值就为0。0为false,取反之后就为true,因此就过了。第一个if语句。

<?php 
 # ?r=1780920432
 $r = $_GET['r'];
 mt_srand(hexdec(substr(md5($flag), 0,8)));
 $rand = intval($r)-intval(mt_rand());
 if((!$rand)){ 
     echo "第一个if已通过";
}
?>

那么如何通过第二个if语句呢。这里只需要通过cookie传参mt_rand() + mt_rand()的值即可。因为有了随机数种子,每次随机出来的数值都是固定的。

web入门之爆破

经过php_mt_seed程序的推算,并经过多次尝试,发现随机种子为3014925613是正确的。

那么随机三次,将第二次和第三次的结果相加,就可以作为cookie提交了。

web入门之爆破

得到的第二次和第三次相加的结果为:1964153084

web入门之爆破
ctfshow{18131380-6206-4fc6-8f7e-8e1a10b0a7a4}

web26

题目描述:

这个可以爆

在提交数据库连接的时候抓取数据包,之后将所有的值都清空提交即可。

web入门之爆破

至于为什么是这样,可能是代码逻辑的问题。

ctfshow{3296d487-2aa9-4daf-a5b5-83d7e7973ad9}

web27

题目描述:

CTFshow菜鸡学院招生啦

进入到网站之后,发现是个教务管理系统。在网站的首页发现了录取名单。

web入门之爆破
web入门之爆破

在该名单中,并没有发现学号信息,而是发现了部分身份证号码,但是其中的8位生日,并没有显示,需要我们爆破。

并在网站首页发现学院录取查询页面,只需要姓名加身份证即可。但是姓名我们有了,身份证的8位生日是空缺的。

web入门之爆破

编写脚本,生成有效的身份证号码,就以爆破高先伊同学的为例。

<?php

$prefix = '621022';
$suffix = '5237';

/* 
第十八位数字(校验码)的计算方法为:
1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.将这17位数字和系数相乘的结果相加与11进行相除。
3.余数0 1 2 3 4 5 6 7 8 9 10这11个数字,其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
例如 余数为 0, 则身份证最后一位就是1
*/
function legal($code) {
	// 定义相加的初始值
	$sum = 0;
	// 定义系数列表
	$x = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
	// 将传入的身份证号码字符串转为列表
	$code = str_split($code,1);

	for ($i = 0;$i < 17;$i++) {
		// 将身份证的第n位 跟 系数列表的第n位相乘,的结果累加到$sum变量
		$sum += $code[$i] * $x[$i];
	}

	// 由于我们的校验值为7,那么对应的余数就是5
	if ($sum % 11 == 5) {
		return true;
	}else{
		return false;
	}

	
}

// 年
for ($year = 1990;$year <= 2000;$year++) {
	// 月
	for($month = 1;$month <= 12; $month++) {
		if ($month < 10) {
			$month = '0' . $month;
		}	
		// 日
		for ($day=1;$day <= 31;$day++) {
		    // 如果天数小数10就在前面追加0,比如01,02,03,04
			if ($day < 10) {
				$day = '0' . $day;
			}

		// 将年月日进行拼接,比如19900101
		$date = $year . $month . $day;

		// 将身份证的前缀+出生年月日+后缀进行拼接。
		$code = $prefix . $date . $suffix;


		if (legal($code)) {
			$file = fopen('code.txt','a');
			fwrite($file,$code . "\n");
			fclose($file);
		}
	  }
   }
}

脚本运行之后,会自动生成code.txt,该txt文件,就是有效身份证的内容。

设置代理开启抓包,输入姓名高先伊,身份证号码随便输入,点击查询抓包。

web入门之爆破
web入门之爆破

将身份证的参数设置为变量

web入门之爆破

点击Load,加载code.txt文件即可。之后点击Start attack

web入门之爆破

通过查询成功和查询失败返回数据包内容长度的不同,即可得知查询失败的数据包长度应该是250,而成功的只有388。

web入门之爆破

响应的内容是经过Unicode编码的。在浏览器右键检查。在控制台中console.log()打印即可。

web入门之爆破

这里得到学号为02015237,那么初始为身份证号码,也就是刚刚爆破出来的621022199002015237

直接在网站首页登录即可

web入门之爆破
ctfshow{545c5370-8f66-4bf2-8d26-e37d29a277a3}

web28

题目描述:

大海捞针

访问网站,发现如下url地址和界面

web入门之爆破

通过目录结果的特殊性,我们可以得知,这里应该是0-N目录下的0-N个目录的2.txt中藏有flag。

我们抓包使用burpsuite进行爆破

web入门之爆破

注意:这里可能由于环境问题,爆破的时候需要将2.txt去掉。不然每条结果都是302;每个目录的索引文件都为2.txt。因此不加文件名也可以。

这里的Attack Type选择为Cluster bomb,该类型可以为每一个变量,设置一个字典。

为变量1设置字典类型为Numbers,之后再设置从0100,每次的步长为1即可。

web入门之爆破

变量2也是相同设置。

web入门之爆破

点击Start Attack,通过返回的状态码,以及内容长度的不同,得到flag

web入门之爆破
ctfshow{f00afa15-fc85-448b-9d85-fa56d282dae8}

发表评论 取消回复
表情 图片 链接 代码

分享