[攻防世界][江苏工匠杯]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{}耽误了很长时间 明明没算错 ...
随机推荐
- PAT (Basic Level) Practice 1020 月饼 分数 25
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- 制造企业有可能自行开发ERP系统吗?
当然可以啊! 生产企业对于ERP的需求是一直存在的,但市场上多为标准化的产品,与企业的个性化需求矛盾着. 有很多制造企业自行开发ERP系统啊!只是各个企业成效不同而已,毕竟不同企业的IT开发能力不同而 ...
- ERP 软件为什么很贵?
ERP软件的贵体现在两个方面,一个是软件系统贵,一个是部署实施贵,究其原因,就是ERP专业性太高.内部业务逻辑忒复杂,而面向形形色色的实体企业时个性化需求又加剧了它整体的复杂性,实施部署客制化无法避免 ...
- [笔记] 二维FFT
假设现在有2个矩阵a和b,分别是n行m列和x行y列,现在你要计算它们的二维卷积,也就是求出矩阵s满足: \(s_{i,j}=\sum_{i'\leq i,j'\leq j}a_{i',j'}b_{i- ...
- 关于Struts访问不到静态资源的问题
今天重新配置了Struts的项目进行开发,但是项目静态资源一直访问不到. 将一些静态资源放在WebRoot下的static包下面便于管理. 一开始以为采用拦截.do,只拦截do后缀的请求,解决了静态资 ...
- 魔改xxl-job,彻底告别手动配置任务!
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. xxl-job是一款非常优秀的任务调度中间件,轻量级.使用简单.支持分布式等优点,让它广泛应用在我们的项目中,解 ...
- TF-GNN踩坑记录(二)
引言 最近在尝试构建GraphTensor时,尝试把默认的特征名hidden_state改成其他时,出现了奇怪的报错. 报错 WARNING:tensorflow:Gradients do not e ...
- Java注解(4):一个真实的Elasticsearch案例
昨天把拼了一半的注解+Elasticsearch积木放下了,因为东西太多了拼不好,还容易乱.休息了一晚上接着来. 接着昨天,创建elasticsearch文档注解(相当于数据表的注解): /** * ...
- 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket failed:Invalid frame header
element-admin-vue 项目console台一直报websocket连接失败 解决办法 1.vue.config.js中配置devServer.proxy的ws为false (我没成功) ...
- Unexpected token u in JSON at position 0
文章目录 1.1 错误原因: 1.2 解决思路: 1.1 错误原因: 因为JSON.parse()不能解析字符串中的undefined 出错的结果:某一行的这个字段的值为空,就会报错,整个表格都显示不 ...