web15
提示:公开的信息比如邮箱,可能造成信息泄露,产生严重后果
进入题目后看到有个QQ邮箱,我们搜一下它的QQ。没啥信息,返回到刚才的网站加后缀看能不能进去后台:
不知道用户名密码哎,那忘记密码吧!发现一个信息:
刚才搜的QQ用户在西安,我们 试试,
果然不出我所料,然后返回输入密码,得到flag。
web16
提示:对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
啥是探针呢?搜索一下,最后看到有关于PHP探针的解释
php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。
具体解释请点击php探针。
我们试试**/tz.php**
有个PHP信息,打开看看:
打开之后直接找关键字符“ctfshow”,得到flag。
web17
提示:备份的sql文件会泄露敏感信息
没思路啊我在网上搜了一下查看自己备份的SQL文件也不知道怎么办。但备份的英语好像是backup,看一下**/backup.sql文件**,找到flag。
知识点
sql文件的备份一般为backup.sql
web18
提示:不要着急,休息,休息一会儿,玩101分给你flag
我第一反应就是抓包改数据,那就试试吧!
抓了好几次,没用。像往常一样,看看源代码点开看看:
直接找“ctfshow”找不到,那看看有什么间接的信息。好像有线索,是某种类型的编码,尝试解一下。
去110.php看看,出现flag。
web19
提示:密钥什么的,就不要放在前端了
是用post传入的,
得到flag。
注意
第一反应看到有账号密码时我就直接输入了,那肯定是错误的,因为我没有仔细看题意。错了之后才知道是post传参。
反省:一定要仔细审代码,这关乎着成败。
web20
提示:mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。
asp+access最大的安全隐患在于access数据库可以被别人下载。
mdb文件是早期asp+access构架的数据库文件 直接查看url路径添加/db/db.mdb 下载文件通过txt打开或者通过EasyAccess.exe打开搜索flag
ACCESS数据库的隐患
Access数据库的存储隐患
在ASP+Access应用系统中,如果获得或者猜到Access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。
Access数据库的解密隐患
由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址“&H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻松地得到Access数据库的密码。基于这种原理,可以很容易地编制出解密程序。
程序设计中的安全隐患
ASP代码利用表单(form)实现与用户交互的功能,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“…… page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页面。因此,在设计验证或注册页面时,必须采取特殊措施来避免此类问题的发生。
解决方案
自己在网上搜索
爆破
web21
爆破什么的,都是基操
给了一个字典文件,保存一下要用到。
打开链接后让我们输入账号密码,明显需要用bp抓包。
被加密了,base64解密后得到用户:密码OK,我们sent to intruder设置好要爆破的内容,切换到payloads页面
添加第一部分:用户名
添加第二部分::(英文状态下)添加第三部分:密码,用刚才下载的文件字典。
别忘了再编码,因为抓包时用户密码被加密了。
取消勾选
开始爆破,得到密码,然后再base64解码,得到用户密码,输入之后便可得到flag。
思路:
抓包后是得到加密后的用户密码,然后解密后看到用户密码被加工了。将数据发送到爆破模块,选中base64编码后的用户名和密码。选择payloads,设置为custom iterator(自定义迭代器)自定义迭代器可以自定义拼接方式 position的位置即为我们的拼接方式,根据上述base64解码的tomcat密码的格式:用户名:密码 ----->则position的位数为3。3个拼接完成后,需要进行base64编码;payload processing 进行编码设置。取消Palyload Encoding编码。然后爆破成功!
web22
提示:域名也可以爆破的,试试爆破这个ctf.show的子域名
查询一下他的子域名,最后在vip.ctf.show的源代码中看到了flag。![在这里插入图片描述](https://img-blog.csdnimg.cn/2a451f2b521e412385ed8cc04660d26c.jpeg#pic_center
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__);
}
?>
分析一下代码:
如果存在一个token值,且token值是被md5加密过的,如果if中的条件满足,则打印出flag。需要传递一个 token值,写脚本爆破,在这里我用PHP语言,脚本如下:
<?php
error_reporting(0);
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 $i."\n";}
}
?>
思路是因为token存在一个整数值,但现在不知道是多少,我假设是在10000之内,运行一下,得到422和1202然后在url后加上**?token=1202或?token=422**回车后得到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');
}
?>
mt_srand通过seed给mt_rand播种,然后mt_rand通过梅森旋转算法生成伪随机数。如果指定seed,那么mt_srand播出来的种子是固定的,mt_rand生成的伪随机数也是固定的:
<?php
mt_srand(372619038);
print(mt_rand());
?>
get传参传入?r=1122388967,得到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');
}
mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。
这里没有明确给出seed,因此我们需要用工具逆推出seed。
$rand = intval($r)-intval(mt_rand());
从这里我们可以判断出,如果我们输入的r为0,那么$rand为第一个随机数的负数,并且因为非零,在if判断中会在else中输出,因此我们先GET输入?r=0,得到第一个随机数的负数。
虚拟机打开终端输入ls查看,得到文件php_mt_seed,输入* ./php_mt_seed第一个随机数*
bp抓包repeater后send为php7.0以上版本
这里有三个(用php7.0版本以上运行代码)
<?php
mt_srand(3095355977);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
三种可能都试一下,
通过代码:
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
令r=1374935140可以使得!$rand为真,然后执行if语句,如果cookie传入值正确,得出flag。
利用hackbar进行get传参,进行cookie传参得到flag。