PHP2

bugku

矛盾

flag{bugku-789-ps-ssdf}

看代码,要求输入一个不是数字、数字字符串,同时还==1的东西。

PPT里“字符串到数字”有说数字+字符串等于那个数字,所以输入类似1admin的字符串就可以了。

cgctf

md5 collision

nctf{md5_collision_is_easy}

这个PPT里有一模一样的:md5('240610708') == md5('QNKCDZO'),所以输入?a=240610708就可以得到flag。

PHP decode >nctf

base64_decode()不用多说,是解码;gzinflate查了下也是解码——那整个CLsI函数不就是解码么?把整个复制下来写进.php,最后改成:

$a = eval(xxx);
var_dump($a);

按理来说就可以了,但每回一访问就说“该网页无法正常运作。localhost目前无法处理此请求。HTTP ERROR 500

气死,命令行里一行一行输,就出结果了。

$ php -a
Interactive mode enabled

php > $ZzvSWE = "+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==";
php > $ZzvSWE = gzinflate(base64_decode($ZzvSWE));
php > for ($i = 0; $i < strlen($ZzvSWE); $i++) {
php { $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);
php { }
php > var_dump($ZzvSWE);
string(44) "phpinfo();
flag:nctf{gzip_base64_hhhhhh}"

nctf{cookie_is_different_from_session}

网页叫我登录,但没看到登录框,F12也一片空白。既然题目叫COOKIE,就看了眼COOKIE,发现loginvalue0。

好像没法直接改,就用Burp抓包,和刚讲Burp时那道admin一样,改成1就好了。

shiyanbar

你真的会PHP吗?

FLAG{2dd8711082fe24c19ae8}

header,还有hint,是个txt,所以改网址为该txt看到PHP源代码。

$_POST['number']已设置且不为空,不能是数字,转成int再转成str还得和本身相等。紧接着既得是回文数还不能是回文数,自己试了几个都被卡住了,就上网查WP了。

新火狐的hackbar有问题,POST人家的payload都过不了,写脚本也不行。董斌让我用在线的,成了。换了一个在线网站,又不行了……

总之WP的思路是用intval溢出+%00截断,post number=2147483647%00。因为%00的缘故,is_numeric会返回false。strrev2147483647变为7463847412,它大于32位系统int最大值所以还是2147483647(难道不应该变负的么,绕过第一个“是回文数”的检验。显而易见,第二个回文数检验也是可以通过的。