8.2.1 字符处理函数报错信息泄露
页面的报错信息通常能泄露文件绝对路径、代码、变量以及函数等信息,页面报错有很多情况,比如参数少了或者多了、参数类型不对、数组下标越界、页面超时,等,不过并不是所有情况下页面都会出现错误信息,要显示错误信息需要打开在 PHP 配置文件 php.ini 中设置 display_errors=on 或者在代码中加入 error_reporting() 函数,error_reporting() 函数有几个选项来配置显示错误的等级,列表如下:
E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_STRICT E_RECOVERABLE_ERROR E_ALL
其中最常用的是 E_ALL、E_WARNING、E_NOTICE、E_ALL 代表提示所有问题,E_WARNING 代表显示错误信息,E_NOTICE 则是显示基础提示信息。
大多数错误提示都会显示文件路径,在渗透测试中,经常遇到 webshell 的场景要用到文件绝对路径,所以这个利用页面报错来获取 Web 路径的方式也比较实在了,用户提交上去的数据后端大多是以字符串方式处理,所以利用字符串处理函数报错成了必不可少的方法,对于利用参数来报错的方式,给函数传入不同类型的变量是最实用的方式。
大多数程序会使用 trim() 函数对用户名等值去掉两边的空格,这时候如果我们传入的用户名参数是一个数组,则程序就会报错,测试代码如下:
<?php echo trim ( $_GET['a'] );
当我们请求/1.php?a[]=test 时,程序报错如下,如图 8-2 所示。
图 8-2
类似的函数还有很多很多,比如
addcslashes()、addslashes()、bin2hex()、chop()、chr()、chunk_split()、convert_cyr_string()、convert_uudecode()、convert_uuencode()、count_chars()、crc32()、crypt()、echo()、explode()、fprintf()、get_html_translation_table()、hebrev()、hebrevc()、html_entity_decode()、htmlentities()、htmlspecialchars_decode()、htmlspecialchars()、implode()、join()、levenshtein()、localeconv()、ltrim()、md5_file()、md5()、metaphone()、money_format()、nl_langinfo()、nl2br()、number_format()、ord()、parse_str()、print()、printf()、quoted_printable_decode()、quotemeta()、rtrim()、setlocale()、sha1_file()、sha1()、similar_text()、soundex()、sprintf()、sscanf()、str_ireplace()、str_pad()、str_repeat()、str_replace()、str_rot13()、str_shuffle()、str_split()、str_word_count()、strcasecmp()、strchr()、strcmp()、strcoll()、strcspn()、strip_tags()、stripcslashes()、stripos()、stripslashes()、stristr()、strlen()、strnatcasecmp()、strnatcmp()、strncasecmp()、strncmp()、strpbrk()、strpos()、strrchr()、strrev()、strripos()、strrpos()、strspn()、strstr()、strtok()、strtolower()、strtoupper()、strtr()、substr_compare()、substr_count()、substr_replace()、substr()、trim()、ucfirst()、ucwords()、vfprintf()、vprintf()、vsprintf()、wordwrap()、strtolower()、strtoupper()、ucfirst()、ucwords()、ucfirst()、ucwords(),等等函数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论