【Ctfshow_Web】信息收集和爆破

0x00 信息收集

web1

直接查看源码

web2

查看不了源码,抓包即可看到(JS拦截了F12)

web3

抓包,发送repeater,在响应包中有Flag字段

web4

题目提示后台地址在robots,访问/robots.txt看到Disallow: /flagishere.txt访问即可

web5

phps源码泄露,尝试访问/index.phps(或者扫描)

phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替

web6

工具扫描或者访问/www.zip,此题需要多熟悉各种源码下的目录结构

web7

hint:版本控制很重要,但不要部署到生产环境更重要。

这题需要了解git或者svn等版本控制软件的使用。访问/.git即可

.git是git这个软件在本地初始化的一个隐藏文件,代码修改后第一次提交是提交到.git文件夹内,再push才是提交到远程管理仓库等,如果配置不当,直接将 .git文件加载到线上环境,这样便引起了.git文件泄露

web8

同样也是考察版本控制,访问/.svn即可

当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN泄露漏洞

web9

hit:发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

考察的是使用vim编辑时,突然中断退出,会生成一个文件.swp,访问/index.php.swp直接用sublime打开得到flag。

这个文件是一个临时交换文件,用来备份缓冲区中的内容。如果原文件名是data,那么swp文件名就是.data.swp。如果文件正常退出,则此文件自动删除。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生swp文件的。

web10

cookie 只是一块饼干,不能存放任何隐私数据

F12--存储--cookie的flag字段中

web11

域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息

web12

有时候网站上的公开信息,就是管理员常用密码

robots.txt发现disallow:/admin/

访问xxxxxx/admin/出来弹框,输入用户名admin,密码在网页最下方

robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

web13

技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码

发现网页底部的document是可以点击的,点击发现是一个文档(系统使用手册)内含敏感信息。

web14

有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
小0day:某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录

根据提示,源代码中搜索editor,可以发现

这一题考察的是源码中的敏感信息——目录

img标记中的src属性会暴露出图片的目录,如果图片没有单独存放在同一个文件夹中,则可能会暴露出敏感的目录名

这一题比较考验眼力,/upload一般是文件上传的文件夹,且别的图片都不在该目录下!

访问xxxx/editor/upload——》403Forbidden

访问xxxx/editor:

这里应该考察的就是编辑器的一些漏洞了,查找编辑器版本:kindeditor4.1.11,查找相关漏洞

kindeditor上传漏洞复现(CVE-2017-1002024)

我感觉这才web14,不会出这么复杂吧,查看wp,好像没那么复杂,不过也和文件上传相关

回形针一样的图标那里存在BUG,竟然可以查看根目录,访问/var/www/也就是网站根目录

/var/www/html/nothinghere不是此地无银三百两嘛(fla000g.txt)

访问/nothinghere/fl000g.txt得到flag

web15

公开的信息比如邮箱,可能造成信息泄露,产生严重后果

 访问xxx/admin竟然出现后台登录页面

 

在哪个城市:西安(邮箱暴露了QQ),可疑修改密码得到flag

web16

对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露

PHP探针:

php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。

默认的雅黑探针:访问/tz.php

点击查看PHP信息 发现FLAG字段中存在flag

web17

备份的sql文件会泄露敏感信息

一开始访问sql.bak没反应,查看WP发现是backup.sql

web18

不要着急,休息,休息一会儿,玩101分给你flag

 太难玩了,直接查看源代码,发现js文件(一般这种玩游戏的题目都会和js有关)

肯定和这行代码有关:

直接复制到控制台

访问/110.php得到flag

 web19

密钥什么的,就不要放在前端了

 说明密钥就在前端,查看源代码,可疑:

pazzword尝试了base64和DES都没解出来,直接抓包更改密码:

 web20

mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。

 这一题主要是体验一下以前的文件泄露方法,现在很少见到asp+access架构了

直接访问/db/db.mdb,使用notepad++打开即可


总结

1、在源码中可以搜集,若不能F12可以通过抓包,再抓包的时候flag可能藏在响应包的Flag字段;

2、后台地址可以通过访问/robots.txt得知浏览器第一个爬的页面可以知道哪些文件不被允许查看,还可以访问/admin可能就到了后台的登录页面;

3、phps源码泄露可以访问index.phps查找有用信息,此外要熟悉各种源码的目录结构;

4、考察git和svn版本控制,可能存在泄露;(访问/.svn或者/.git)

5、cookie中可能存在重要信息;

6、有时候网站上公开信息要注意,比如QQ/邮箱/技术文档/源码中一些路径信息都要注意;

7、PHP探针会造成信息泄露,一般默认路径是/tz.php;

8、备份的SQL文件/源码中的JS都要注意。


0x01 爆破

web21

题目自带爆破字典dic.zip

弹出登录框,输入admin/123456后抓包发送到repeater:

使用burp自带解密(base64):

可以authorization包含了“用户名:密码”,使用BP载入字典

添加前缀“admin:”(熟练使用burpsuite)

加编码:base64

去掉√:因为有“=”,base64自带等号,不能让=编码

设置完成后开始爆破,爆破的时候可以不断点击status排序,如果不是401可能就是我们想要的结果了。

 

or:

web22

考察子域名查询:

域名更新后,flag.ctf.show域名失效,内容是flag{ctf_show_web}

web23

还爆破?这么多代码,告辞!
<?
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;
    //substr(字符串,开始位置,个数) 
    //intval()函数可以获取变量的整数值,常被用来进行数据类型转换,将字符串类型的变量转换为为整数类型
        }
    }
}else{
    highlight_file(__FILE__);

}
?> 

 根据所给代码写脚本:

<?php 
$i=0;
for($i;$i<10000;$i++){
	$token = md5($i);
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
    	//echo 'token= '.$i.' md5= '.$token;
    	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= 422 md5= f85454e8279be180185cac7d243c5eb3
token= 1202 md5= 147702db07145348245dc5a2f2fe5683

 

 web24

<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;
    }
    //生成一个随机数种子判断r和随机数种子是否一致
    //随机数种子设置:只要种子是相同的,那么生成的值就是一样的
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

?> Linux version 5.4.0-135-generic (buildd@lcy02-amd64-066) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 Linux version 5.4.0-135-generic (buildd@lcy02-amd64-066) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022

# PHP中生成随机数的函数有rand()和mt_rand(),它们分别对应srand()和mt_strand()两个用于播种随机数种子的函数

 测试:

<?php
	mt_srand(372619038);//只要种子是相同的,那么生成的值就是一样的
	echo intval(mt_rand());
?>

 

尝试提交?r=999695185,提交后发现是没有回显,这个和PHP版本有关,换成PHP7(小皮——网站——管理——PHP版本)

提交?r=1155388967

考点:同一个随机数种子生成的随机数序列是一样的,和机器无关(虽然它是在服务器生成,我是在本机生成,但是只要种子一样,生成的随机数种子就是一样的)。

在日常开发中,一般不设置固定值种子,建议如果要设置的话就跟时间相关,这样可以保证更随机。

web25

 <?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));//hexdec() 函数把十六进制转换为十进制
    $rand = intval($r)-intval(mt_rand());//如果r=0,那么值就是负的第一次的随机数
    if((!$rand)){  //r要和mt_rand()相等就可以输出flag
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}
Linux version 5.4.0-135-generic (buildd@lcy02-amd64-066) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 Linux version 5.4.0-135-generic (buildd@lcy02-amd64-066) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022

mt_srand()是伪随机,通过分发种子,如果有种子的话,生成随机数的值也是固定的,生成的值也和php的版本有关 

此题没有明确的给出种子,需要自己爆破(爆破随机数种子要用到php_mt_seed这款工具,在kali中安装)

$rand = intval($r)-intval(mt_rand());//如果r=0,那么值就是负的第一次的随机数

?r=0,就会得到第一个随机数1979052344

知道随机数要爆破随机数种子,用工具php_mt_seed

可以看到php3-php5没有找到随机数种子,从上一题知道应该是PHP7

seed = 0x0e8c5fc8 = 244080584 (PHP 7.1.0+)

<?php
    mt_srand(0xd951c381);
    mt_rand();//第一次生成的随机数
    echo mt_rand()+mt_rand();//返回第二次和第三次生成的随机数之和
?>

将第二次和第三次生成的随机数之和写入cookie

 web25没做出来,具体不知道哪出问题了?

web26

什么都不填,直接抓包:

至于为什么什么都不填就可以造成数据库连接成功,应该是写代码的时候代码的逻辑问题,此题也可以像web21一样使用burp爆破

web27

发现有一份录取名单,还有一个学时信息查询系统,可以根据此系统查询+名单得到线索

身份证六位被隐藏(出生年月),很明显可以用burp爆破,选择高先伊试一下

估摸着差不多1995-2006年这个范围去爆破一下,哎,burp线程调不了,换了个,这个爆破出来就行了。

此外h1xa师傅还写个个python脚本(生成合法身份证号码),用了校验和可以排除非法的身份证号码提高效率:

<?php
$card=array();
//生成所有的从1990年到2000年的身份证号码
for($y=1990;$y<2000;$y++){
	for($m=1;$m<13;$m++){
		if($m<10){
			$m='0'.$m;
		}
		for($d=1;$d<32;$d++){
			if($d<10){
				$d='0'.$d;
			}
			array_push($card,'621022'.$y.$m.$d.'5237');
		}
	}
}

//这个函数是根据身份证最后面1位的校验位来算是否是合法身份证,如果不是合法身份证可以通过这个函数来剔除
function checkCard($c){
	$list=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];//定义一个数组里面有不同的权值,这个是每一个位数的权重,顺序是不能乱的
	$crc=[1,0,'X',9,8,7,6,5,4,3,2];//有一个校验码,每个人身份证的最后一位就是在十一个数字之内
	$ca=str_split($c);//接收到c,将c拆分为数组
	$sum=0;
	for($i=0;$i<count($ca);$i++){
		$sum+=$ca[$i]*$list[$i];//每个数组拿出来以后,和它的权重相乘,比如身份证第一位*7...,两两相乘求和
	}
	$crc_ =$sum%11;//取余之后得到最后一位的值,和传入的身份证最后一位进行比较,如果相等说明校验通过,否则false
	if($ca[count($ca)-1]==$crc[$crc_]){
		return true;
	}else{
		return false;
	}
	
}

//被刚才所有的身份证号进行校验和的验证,拿到合法的身份证号码
foreach($card as $c){
	if(checkCard($c)){
		echo $c.'<br>';
	}
}


?>

返回值是jason,直接在console台弹框就可以解码:console.log("....")

web28

 这个URL看着就古怪

这里0和1比较可疑,url后面不管输入什么都会跳转到/0/1/2.txt这个页面,接下来抓包

txt文件是固定的,改的话不好改,作为一个靶场环境肯定是动态环境,我们可以把2.txt删除,访问默认文件index.php

加入结束符:ctfshow

可以爆破知道:/72/20/index.php

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值