PHP的urldecode()函数解码一次,变成:%61%64%6d%69%6e 最后的if语句比较时,%61%64%6d%69%6e不等于"admin",所以不会显示flag 结语 通过这个CTF题目,我们深入探讨了PHP中URL编码绕过的原理。我们发现,在这个特定的例子中,两次编码是获取flag的关键。三次或四次编码虽然看起来更复杂,但实际上无法成功绕过检查。
编解码绕过(urldecode、base64_decode、json_decode 编码注入) 以urldecode编码注入为例:对注入语句进行两次编码,首先前端会进行一次解码,然后将依旧是url编码的注入语句传递给后端,使得addslashes()过滤失效,最后urlencode函数进行解码还原注入语句 php $id=$_GET['id'];$id= addslashes($id);$id= urldecode($id);...
这里让我们get方式传入一个id值需要绕过,先看第一个"admin"===$_get[id] 需要为假,那我们将'a' urldecode一次就不等于了绕过了它 接着我们看到下面将我们传入的参数再一次urldecode一次,还要求编码过后等于admin,于是我们 构造payload: ?id=%2561dmin 提交url时,它会自动urldecode一回,%25就成为了%,然后进入...
curl_setopt($curl,CURLOPT_POST, 1); $n=urldecode('%00'); $o='O:4:"come":2:{s:12:"'.$n.'come'.$n.'method";s:5:"echos";s:10:"'.$n.'come'.$n.'args";a:1:{i:0;s:3:"&ls";}}'; curl_setopt($curl,CURLOPT_POSTFIELDS, ['come'=>$o]); curl_exec($curl); curl...
file_put_contents中可以调用伪协议,而伪协议处理时会对过滤器urldecode一次,所以是可以利用二次编码绕过的,不过我们在服务端ban了%25(用%25太简单了)所以测试%25被ban后就可以写个脚本跑一下字符,构造一些过滤的字符就可以利用正常的姿势绕过。知道可以用二次编码绕过了. ...
第一次见到index.phps 其用于查看php的源代码 我感觉这道题的精髓就在于index.phps 在本题中,加上/index.phps后可以看到php代码 php代码 可以看到了过滤了admin,之后进行了urldecode 可以通过url编码绕过 url编码中,如果是ASCII码包含的字符,会被编码为%xx,xx为16进制ASCII值 ...
第一次见到index.phps 其用于查看php的源代码 我感觉这道题的精髓就在于index.phps 在本题中,加上/index.phps后可以看到php代码 php代码 可以看到了过滤了admin,之后进行了urldecode 可以通过url编码绕过 url编码中,如果是ASCII码包含的字符,会被编码为%xx,xx为16进制ASCII值 ...
通过urldecode进行对%00进行解码 代码语言:javascript 代码运行次数:0 运行 AI代码解释 <?php $curl=curl_init();curl_setopt($curl,CURLOPT_URL,'http://192.168.27.144/?first=doller&a=var=give%26bbb=me%26ccc=flag');curl_setopt($curl,CURLOPT_POST,1);$n=urldecode('%00');$o='O:4:"come"...
strcmp()# 这个在前面介绍过,就是数组绕过技巧。 curl_setopt()# 存在ssrf漏洞。 代码示例: 使用file协议进行任意文件读取 除此之外还有dict协议查看端口信息。gopher协议反弹shell利用等。 preg_replace()# 此函数前面详细介绍过,/e模式下的命令执行。 urldecode()# url二次编码绕过。 代码示例: ...
不过有更快的方法。。。直接通过postman的urlencode/urldecode即可。因为0x00也就是url编码中的%00。所以url编码一下就完事。要用%00包裹住类名,不能包多了也不能包少了,虽然%00也算一个字符,但是Php序列化的时候已经帮我们算好了,所以不需要修改,或者说,我们之前的那个长度值就是错的。。。