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}"
COOKIE
nctf{cookie_is_different_from_session}
网页叫我登录,但没看到登录框,F12也一片空白。既然题目叫COOKIE,就看了眼COOKIE,发现login的value是0。
好像没法直接改,就用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。strrev后2147483647变为7463847412,它大于32位系统int最大值所以还是2147483647(难道不应该变负的么),绕过第一个“是回文数”的检验。显而易见,第二个回文数检验也是可以通过的。