一直没学过截断上传的原理,今天借着一道CTF题目学习一下。
题目如下:
前面就是常规试探,修改filename的后缀,但是不行,这个时候就要考虑是否存在截断漏洞。
抓包:
可以看到,要求上传php文件。
截断漏洞的原理可以参考如下:
截断的核心在于chr(0)这个字符,这个函数表示返回以数值表达式值为编码的字符,举个例,print chr(78) 结果是N,所以char(0)表示的ascll字符是null,当程序输出包含chr(0)变量时,chr(0)后面的数据会被截断,后面的数据直接忽略,导致漏洞产生。
回到这道题目里:
所以在这道题目里,可以控制path,那就修改呗:
加上%00的意思就是后面无论filename是什么,都给截断,不管了,但是还是不行,原因是什么尼?
铛铛铛铛!!!!
原来是post请求的时候会自动进行URL编码,%00进行URL编码以后变成了:
这样当然起不到截断的作用,所以要是用burp的URL先进行一次解码,如图:
记住这里只需要选中%00进行解码即可,其他不需要选中。
解码之后是这样:
这样在进行post请求时,会再编码成%00
bingo!!!
获得了女朋友一枚,然而咱是有老婆的人,不稀罕!
完毕!