- 5.矛盾---(脑洞 运算符)
- 6.Web3---(编解码)
- 7.域名解析---(Host文件头修改)
- 8.你必须让他停下---(Burp使用)
- 10.变量1
- 11.web5
- 12.头等舱
- 13.网站被黑---(Burp 字典)
- 14.管理员系统---(X-Forwarded-For)
- 15.Web4
- 16.flag在index里
- 17.输入密码查看flag
- 18.点击一百万次
- 19.备份是个好习惯
- 20.成绩单
- 21.秋名山老司机
- 22.速度要快
- 23.cookies欺骗
- 24.never give up
- 27.字符?正则?
- 30.你从哪里来
- 31.md5 collision(NUPT_CTF)
- 32.程序员本地网站
- 33.各种绕过---(sha1、===、sha1-0e开头)
- 34.Web8---( 猜文件名)
- 35.细心---(robots.txt)
- 36.求getshell---(content-type(大小写)、可执行文件名)
- 40.PHP_encrypt_1(ISCCCTF)---(PHP代码审计、解密)
- 42.flag.php---(序列化与反序列化、代码审计)
- 49.江湖魔头---()
5.矛盾—(脑洞 运算符)
打开链接,内容如下:
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
is_numeric():检测字符串是否只由数字组成,如果字符串中只包括数字,就返回Ture,否则返回False。(注意是只包括数字)
要求我们不能输入纯数字1,但是num变量的结果还要等于1
既然不能只包括数字,那我们加入运算符试试
6.Web3—(编解码)
打开链接,如下:
验证跳出弹窗,查看网页源代码:
有一串Unicode编码。这个时候可以复制Unicode编码到解码网站上解码,也可以直接复制到
<body> </body>
里,会自动解码。
方法一:复制到解码网站上解码:
方法二:复制到<body> </body>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222130848324.png
7.域名解析—(Host文件头修改)
听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag
设置Burp Suite代理拦截
首先我们访问ip123.206.87.240,拦截,修改Host文件头为:flag.baidu.com
8.你必须让他停下—(Burp使用)
打开链接
界面一直在刷新,突然闪过一直图片。
我刚开始以为图片上就是flag。尝试提交,结果不是。
F12进入控制台,发现了这个:
上面说flag is here ,然后一直盯着那个地方,果然出现了flag。不过一闪而逝了。
然后Burp Suite设置代理拦截
10.变量1
flag In the variable ! <?php
error_reporting(0); // 关闭php错误显示
include "flag1.php"; // 引入flag1.php文件代码
highlight_file(__file__); //对文件进行语法高亮显示
if(isset($_GET['args'])){
// 条件判断 get方法传递的args参数是否存在
$args = $_GET['args']; //赋值给变量 $args
if(!preg_match("/^\w+$/",$args)){
// /^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
die("args error!"); //输出 args error!
}
eval("var_dump($$args);"); // 将字符串作为php代码执行结尾加分号 var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与 值。数组将递归展开值,通过缩进显示其结构。$$args 可以理解为$($args)
}
?>
writeup1
writeup2
(代码看懂了,不知道其他变量名,得不到flag,所以参考了Writeup)
11.web5
打开链接,看到一个输入框和提交按钮。随便输入什么东西提交,结果如下:
F12查看源码,发现了如下字符串:
把上面的字符串复制到控制台输入(火狐好像不可以0.0),会得到输出:ctf{whatfk} ------原理
输入得到的字符串,提示:唉吆,已经非常非常接近了。。。
回想一下题目要求是大写。将其改为大写。
ok,解决。
12.头等舱
打开链接,啥都没有 F12查看源码也没有什么发现(题目名为头等舱,会不会和请求头或者响应头有关)
设置Burp Suite代理拦截,结果如下:
13.网站被黑—(Burp 字典)
URL带有webshell,应该是有webshell可以用
御剑扫一下后台页面,扫到了http://123.206.87.240:8002/webshell/shell.php
要输入密码的,用Burp Suite自带的字典跑一跑。
然后找一下不同的那个密码(这里是hack)
输入得到flag。
14.管理员系统—(X-Forwarded-For)
F12发现了一串Base64密文,解密得到test123
随便提交点啥,返回结果如下:
我们伪造请求为本地。
通过修改http请求的header请求头来伪造ip
管理员用户名既然没提示就应该可以猜到(我猜的root,test123,admin…)
密码应该就是test123了
Burp Suite拦截修改
15.Web4
打开链接,让我们查看源码,找到如下信息:
unescape() 函数可对通过 escape() 编码的字符串进行解码
进行解码后得到如下代码:
//检测提交
function checkSubmit(){
var a=document.getElementById("password");
if("undefined"!=typeof a){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
将67d709b2b54aa2aa648cf6e87a7114f1提交得到falg。
16.flag在index里
打开链接又一个链接,再点进去
是一个文件包含漏洞
文件包含漏洞的利用
题目说flag在index里,那么就读文件就好了
将file参数修改file=php://filter/read=convert.base64-encode/resource=index.php
得到Base64密文,解密
17.输入密码查看flag
打开链接:如图;
既然是5位数字密码,且找了一下,没发现什么提示
那密码应该不会太难,可以跑一下字典
也可以Burp Suite爆破
以下是爆破结果
18.点击一百万次
GG
19.备份是个好习惯
这里确实没什么思路
看了大佬的WP,知道要找 .bak 文件,御剑扫一下:
这里可以看到有index.php.bak文件
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
上面的php代码意思是获取get参数,将get参数中的 key 替换为空,之后将 key1 参数与 key2 参数通过md5加密后输出。
如果 md5加密后的 key1 和 key2 相同,并且 key1 与 key2 的值或类型不同,则输出flag。
首先的问题是它会将我们上传的参数key替换为空,那么我们将如何为key1和key2赋值呢?
我们可以这样子:kekey
y1。这样会将中间的key替换为空,就相当于上传了参数key1,key2同理。
第二个问题是如何使加密后的key1和key2相同,但是key1和key2的值或类型不同呢?
- 一、利用 == 的特性
- 在php中,== 会将左右两边的值进行比较,但是如果 == 两边的类型不同,其会将类型转换成相同的再进行比较。
"0e123456"
=="0e456789"
相互比较的时候,会将0e这类字符串识别为科学计数法的数字,0乘以10的无论多少次方都是零,所以相等。- 0==字符串成立
这里我们利用第二个特性,使key1和key2加密后为0e....
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
- 二、利用md5()的特性
- md5函数的参数不能传为数组,参数为数组时会返回null