代码审计套路
代码审计的一些套路总结
[buuctf] [HCTF 2018]WarmUp strpos/substr截取代码
首先来看源码:
1 |
|
特别注意的点就是:
这里substr截取代码时的第三个参数是截取代码的长度,第二个参数是开始的长度
而巧妙之处就在于:
1 | mb_strpos($_page,'?','?') |
这段代码将page手动加了一个?然后探测?的位置,而在主流编程语言中,字符串位置的参数都是从0开始的,例如我要探测:
1 | mmk&nina? |
这里?的位置在参数8的位置,而截取的时候,长度是8,所以刚好把?前面的截取走了,并没有包含?
这里就可以解释为什么buuctf那道题的payloads为:
1 | /?file=hint.php?/../../../../ffffllllaaaagggg |
为什么本应是../../../../ffffllllaaaagggg,还在前面多加了一个/,因为函数把?前面的字符全部截取走了,只剩下?和前面多加的/以及后面的路径: ../../../../flag,这里的/是include的分割符号
详细见[HCTF 2018]WarmUp1的wp。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!