2021 | NEWSCTF | Web
NEWSCTF - easy_web
Hint¶
这个图片真好看呀,没啥隐藏的东西吧
解题思路¶
- 首页是源码以及好看(ミク确实好看)的背景图
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>EasyWeb</title> <style> html, body { margin: 0; padding: 0; width: 100%; height: 100%; text-align: center; } body { background-image: url(backImg.jpg); background-size: contain; } .content { width: 80%; text-align: left; padding : 10px; margin: 0 auto; background-color: rgb(255, 255, 255, 0.7); } </style> </head> <body> <h1>EasyWeb</h1> <div class="content"> <?php highlight_file("index.php") ?> </div> <div class="content"> <?php $six_number = $_POST['webp']; $a = $_POST['a']; $b = $_POST['b']; $c = $_POST['c']; if (md5($six_number) == 'e10adc3949ba59abbe56e057f20f883e' && md5($a) === md5($b) && $a !== $b) { if($array[++$c]=1){ if($array[]=1){ echo "nonono"; } else{ require_once 'flag.php'; echo $flag; } } } ?> </div> </body> </html>
e10adc3949ba59abbe56e057f20f883e
在线 MD5 解码后得到123456
- 关于
md5($a) === md5($b) && $a !== $b
可以参考 Web - Funhash,传入两个不同的数组即可 - 当数组赋值未指定键值(如
$array[]=1
)时,将取当前(上次数组重新索引后存在过的)最大整数索引值加 1,若还没有整数索引,则键值为 0- 64 位系统下的整数溢出
<?php $large_number = 9223372036854775807; var_dump($large_number); // int(9223372036854775807) $large_number = 9223372036854775808; var_dump($large_number); // float(9.2233720368548E+18) $million = 1000000; $large_number = 50000000000000 * $million; var_dump($large_number); // float(5.0E+19) ?>
$array[++$c]=1
需要能够成功赋值,而$array[]=1
(相当于$array[$c+2]=1
)赋值失败才能获得$flag
,那么$c
的值应为 \(9223372036854775806\)
- 64 位系统下的整数溢出
- 由于
$_POST
默认只能接受到Content-Type: application/x-www-form-urlencoded
的数据,因此以 GET 请求为基础修改并发送 POST 请求时,除了修改请求方法、添加请求主体外,要记得在请求头添加Content-Type
字段 - 获得
$flag
的内容你觉得就这么简单吗???,可以告诉你密码哦! password: xluoyyds123456@@@
- 密码?(ŏωŏ)密码肯定是用在别的地方啦~根据提示从
/backImg.jpg
下载背景图片(实际上下载下来的是 PNG…) - 然后是图片类题目的「常规操作」
$ binwalk backImg.png DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 1054 x 745, 8-bit/color RGBA, non-interlaced 1522188 0x173A0C Zip archive data, encrypted at least v2.0 to extract, compressed size: 43, uncompressed size: 36, name: trueflag.txt 1522367 0x173ABF End of Zip archive, footer length: 22 $ dd if=backImg.png of=res.zip skip=1522188 bs=1
- 输入密码即可获得压缩包内的 Flag:
newsctf{this_1s_veryveryveryeasyweb}
参考资料¶
最后更新:
2021年12月13日 11:23:59
Contributors: