GET键值

介绍

GET数组获取urlquery的参数,但是当其键值为一些特殊字符时,php会将其替换为_

测试

http://127.0.0.1?.*=abc,后台代码为:

<?php
var_dump($_GET['_*']);
var_dump($_GET['.*']);

结果如图: 发现.*被替换成了_*

这是由于在PHP中,对于传入的非法的$_GET数组参数名,会将其转换成下划线。

结论

可以fuzz下有哪些字符会被替换成下划线。

import requests

for i in range(0,256):
    url='http://127.0.0.1/index.php?aaa'+chr(i)+'aaa=1'
    r=requests.get(url)
    if '_' in r.content:
        print str(i)+': '+chr(i)

'''
32:  
43: +
46: .
91: [
95: _  # 这个不算。
'''


for i in range(0,256):
    url='http://127.0.0.1/index.php?'+chr(i)+'aaa=1'
    r=requests.get(url)
    if '_' in r.content:
        print str(i)+': '+chr(i)

'''
46: .
95: _  # 这个不算
'''

import requests

for i in range(0,256):
    url='http://127.0.0.1/index.php?aaa'+chr(i)+'=1'
    r=requests.get(url)
    if b'_' in r.content:
        print( str(i)+': '+chr(i))

'''
32:  
43: +
46: .
91: [
95: _  # 这个不算
'''


import requests

for i in range(0,256):
    url='http://127.0.0.1/index.php?'+chr(i)+'=1'
    r=requests.get(url)
    if b'_' in r.content:
        print( str(i)+': '+chr(i))


'''
46: .
95: _  # 这个不算
'''

非法字符开头或者只有一个非法字符的情况,会被转换成_的有:.。 非法字符在中间,或者非法字符结尾的情况,会被转换成_的有:.空格+[

值得一提的是,如果只有一个空格或者空格开头的字符串作为键值,那么空格在url中会被转换成(%20),并且$_GET不会取到空格

参考

results matching ""

    No results matching ""