CTF Web 1
Web安全入门课后作业
level0 [极客大挑战 2019]Havefun
打开就发现一只猫,没有其他提示信息,于是查看源代码发现
由此可知,需要GET传参使其符合该要求,使用HackBar用GET方式传参
1 |
|
得到flag
level1 [RoarCTF 2019]Easy Calc
打开后,在表达式上线乱输一通,发现好像只有数字能被识别并正确计算,如果输入字母便会提示算不出来,于是查看一下源代码,发现线索。
找到一个叫calc.php文件,尝试访问看看。
分析代码,发现过滤了以上得的多种字符,于是先尝试Get传参?num=phpinfo()
发现行不通,于是尝试? %20num=phpinfo(),发现可以(php解析规则:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行解析,假如waf不允许num变量接收字母,那么使用 num就可以,而php解析时就会自动把空格去掉)
接着,使用scandir查看目录中的内容,找到存有flag的文件(由于“/“被过滤了,所以使用chr对/的ascii码进行转换绕过)
1 |
|
绕过成功,发现一个f1agg的文件,依旧采用上面的方法去访问,将f1agg依次用ASCII码表述
1 |
|
得到flag
level2 [极客大挑战 2019]BuyFlag
打开是一个炫酷的页面,在这里乱翻找到
由此可知,我们需要是CUIT;然后还需要正确的密码。
第一步,用bp抓包,将Set-Cookie的user=0改成user=1
可以看到我们已经是Cuiter了,下一步就是密码了
查看一下源代码,发现有用的信息
分析代码,这道题注释的代码逻辑是要输入一个非纯数字的字符串且等于404,密码才能正确。(查了一下is_numeric()这个函数,他的作用是判断输入是否是数字的。如果是纯数字返回true,如果不是返回false。)
is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断。
因此,可以构造一个payload,404空格 这样的话is_numeric会判断成非数值,然后执行判断语句==404 ,进而得到flag。
成功了,不过它提醒我们要支付100000000去买flag,因此再多传一个money=100000000
真的服了这个老6,它有提示数字长度太长,网上查一下,发现用数组可以(是strcmp函数的锅。于是查一下这个函数的漏洞。发现只有在PHP5.3之前才有的漏洞。这个函数在数据类型不匹配的时候会返回0,也就是和比较成功的结果是一样的。因此只要传入非字符串类型就可以了。这里是传的数组。)
拿到flag
level3 [CISCN2019 总决赛 Day2 Web1]Easyweb
就给了个这样的页面,先看一下源代码看有没有提示信息
可能是我水平不够,不知道怎么利用这些信息,于是换个方向试试运气,用御剑扫描一下看看有没有其他东西
扫出来一个文件,打开,根据文件信息并结合源代码,尝试访问一下image.php.bak
下载下来一个文档,打开发现
又是折磨人的php,这里我也是参考了别人的wp
1 |
|
也就是说,\\0
在传入变量$id
的值后,首先被转义为\0
,再经过addslashes()
函数的处理,变量$id="\\0"
,再由str_replace()
函数的替换,最终变为\
。
有空继续解,未完待续。。。。。。