本帖最后由 新手480107 于 2020-9-14 15:49 编辑
题目内容:
访问后发现没有什么内容,查看一下源码。 发现存在challenge3.txt文件,尝试访问。 发现源码
stripos()stripos()函数:查找字符串在另一字符串中第一次出现的位置(不区分大小写) strpos() - 查找字符串在另一字符串中第一次出现的位置(区分大小写) strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写) stripos()函数返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。字符串位置从 0 开始,不是从 1 开始。
file_get_contents()file_get_contents()函数:把整个文件读入一个字符串中,加上@是屏蔽对应的错误
PHP中fopen,file_get_contents,curl函数的区别:1、fopen/file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen /file_get_contents 好很多。 2、fopen /file_get_contents 在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。 3、fopen / file_get_contents 函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响。 4、curl 可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。而fopen / file_get_contents只能使用get方式获取数据。
eregi()eregi()函数:在一个字符串中搜索指定的模式的字符串,搜索不区分大小写。eregi()可以特别有用的检查有效字符串,如密码。
题目观察完代码后发现为php弱类型绕过。 首先$data通过读取$a,进行POST传递。 当$a为php://input,$data可以通过php://input来接受post数据。 $id传一个字符进去,会被转化为0。 对于$b,要求长度大于5,其次满足eregi()函数的要求(也就是截取$b的第一个字符与'111'拼接,和'1114'进行对比)和首字符不为4。 可以设置$b为%00111111,这样,substr()会发生截断,在匹配时进行eregi('111','1114')满足,同时%00不
|