http://123.206.87.240:8006/test/hello.php

    url编码,base64编码,代码审计,php函数(Never give up) - 图1

    进入网站,只有never give up!很无趣,那咋办,一般这个思路,1.先F12 2.再抓包

    然而我们再F12就看到了一些我们想看到的东西。

    url编码,base64编码,代码审计,php函数(Never give up) - 图2

    这个就是一个页面的后缀嘛。但是我们直接输入会直接跳到

    url编码,base64编码,代码审计,php函数(Never give up) - 图3

    作为小白的我懵了。发现这个网站和我输入的网站不一样,那么就是一定发生了跳转

    那我之前的那个网站呢。我只能截包试试

    url编码,base64编码,代码审计,php函数(Never give up) - 图4

    在ETag和X这貌似有个base64的密码,然而解码并没有得到任何东西。那我们就。用php伪协议看看

    view-source:http://123.206.87.240:8006/test/1p.html这个页面的源码到底是怎么样的。

    url编码,base64编码,代码审计,php函数(Never give up) - 图5

    果然找到了一堆的加密字符,用URL解密之后获得

    url编码,base64编码,代码审计,php函数(Never give up) - 图6有==;说明他是个base64加密的。

    再用base64解密(和never give up)主题很符合

    url编码,base64编码,代码审计,php函数(Never give up) - 图7

    又又又一层url~

    继续

    然后发现了新大陆

    url编码,base64编码,代码审计,php函数(Never give up) - 图8

    看来我们又回到了代码审计题;

    代码解析:

    第一行:限制URL查询字符串中必须有非空非零的变量id

    第九行:变量$a中不能含有字符串

    第十五行:要满足以下五个条件表达式才会爆出flag:

    1.变量$data弱等于字符串bugku is a nice plateform!

    2.变量$id弱等于整数类型0

    3.变量$b的长度大于5

    4.字符串1114要与字符串111连接$b的第一个字符构成的正则表达式匹配

    5.变量$b的第一个字符弱不等于整形数4

    注意,源码中爆有flag文件,有可能是出题人的失误,也有可能是出题人故意用15行复杂句来迷惑你,实际上可以绕过。所有直接访问连接 http://120.24.86.145:8006/test/f4l2a3g.txt就可以得到flag

    其实第15行可以可以解的:

    url编码,base64编码,代码审计,php函数(Never give up) - 图9

    由上图可知,变量$id若想满足非空非零且弱等于整形数0,则$id的值只能为非空非零的字符串,这里假设$id-“asd”

    利用php伪协议:源码中变量$data是由file_get_contents()函数读变量$a的值而得的,所以$a的值必须作为数据流。

    在服务器中自定义一个内容为bugku is a nice plateform文件,再把此文件路径赋给$a,显然不太现实。因此这样用伪协议php://来访问输入输出数据流,其中php://input可以访问原始请求数据中的只读流。

    这里令$a=”php://input”,并且在请求主体中提交字符串bugku is a nice plateform!

    eregi()截断漏洞:

    CTF题做多了就知道ereg()函数和eregi()函数存在空字符截断漏洞,既参数中的正则表达式或待匹配度字符串遇到空字符则截断丢弃后面的数据。

    源码中待匹配字符(第二个参数)已确定为1114,正则表达式(第一个参数)由111连接$b的第一个字符组成,若令substr($b,0,1)=”\x00”,既满足1114与111匹配。因此,这里假设$b=”\x0012345”,才能满足以上三个条件

    url编码,base64编码,代码审计,php函数(Never give up) - 图10