alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断
机器在语言编码转换的时候,经常会出现各种各样的异常,这些神奇的字符串就有可能组合成一堆乱码出来,也有可能直接把程序搞崩溃掉,不过总有那么一些字符,可以帮助我们在利用漏洞的时候变得更简单一些,下面我们就来看看是哪些函数这么调皮。
- 字符处理函数报错信息泄露
页面的报错信息通常能泄露文件绝对路径、代码、变量以及函数等信息,页面报错有很多情况,比如参数少了或者多了、参数类型不对、数组下标越界、页面超时,等,
不过并不是所有情况下页面都会出现错误信息,要显示错误信息需要打开在PHP配置文件php.ini中设置display_errors=on或者在代码中加入error_reporting()函数,error_reporting()函数有几个选项来配置显示错误的等级,列表如下:
E_WARNING
其中最常用的是E_ALL、E_WARNING、E_NOTICE
E_ALL代表提示所有问题,E_WARNING代表显示错误信息,E_NOTICE则是显示基础提示信息。
大多数错误提示都会显示文件路径,在渗透测试中,经常遇到webshell的场景要用到文件绝对路径,所以这个利用页面报错来获取Web路径的方式也比较实在了,用户提交上去的数据后端大多是以字符串方式处理,所以利用字符串处理函数报错成了必不可少的方法,对于利用参数来报错的方式,给函数传入不同类型的变量是最实用的方式。
大多数程序会使用trim()函数对用户名等值去掉两边的空格,这时候如果我们传入的用户名参数是一个数组,则程序就会报错,测试代码如下:
<?
当我们请求/1.php?a[]=test时,程序报错如下,如图所示
类似的函数还有很多很多,比如
addcslashes
- 字符串截断
如果你以前做过渗透测试,那字符串截断应该是我们比较熟悉的一个利用方式,在利用文件上传漏洞的时候,经常会用到抓包,然后修改POST文件上传数据包里面的文件,在文件名里面加一个%00,用来绕过文件扩展名的检查,又能把脚本文件写入到服务器中,下面我们就来了解下其中的原理吧。
%00空字符截断
字符串截断被利用最多的是在文件操作上面,通常用来利用文件包含漏洞和文件上传漏洞,%00即NULL是会被GPC和addslashes()函数过滤掉,所以要想用%00截断需要GPC关闭以及不被addslashes()函数过滤,另外在PHP5.3之后的版本全面修复了文件名%00截断的问题,这个版本以后也是不能用这种方式截断。
为什么PHP在文件操作的时候用%00会截断字符?
PHP基于C语言开发,%00在URL解码后为0,0在C语言中是字符串结束符,遇到0的时候以为到了字符串结尾,不再读取后面的字符串,自然而然的就理解成了截断。
做一个简单的测试,测试代码(1.php)
<?
在同目录下面新建文件2.txt,内容为输出phpinfo信息代码,当我们请求
/
实际上包含了2.txt这个文件,正常执行phpinfo代码。
- iconv函数字符编码转换截断
iconv()函数用来做字符编码转换,比如从UTF-8转换到GBK,字符集的编码转换总会存在一定的差异性,导致部分编码不能被成功转换,也就是出现常说的乱码。
在使用iconv()函数转码的时候,当遇到不能处理的字符串则后续字符串会不被处理。
我们来做一个简单的测试,测试代码如下:
<?
我们执行这段代码的行结果如图所示。
可以看到第一次输出$a变量,1和2都被正常输出,当使用iconv()函数转换编码后,从chr(130)字符开始之后的字符串都没有输出,已经被成功截断。经过笔者fuzz测试,当我们文件名中有chr(128)到chr(255)之间都可以截断字符。
- 建站之星模糊测试实战之任意文件上传漏洞
漏洞发生在/module/mod_tool.php文件第89行起,img_create()函数,代码如下:
public
这是一个文件上传的代码,其中此漏洞的关键代码在:
if
在这里调用_savelinkimg()函数保存文件,跟进该函数,函数代码如下:
private
代码中:
$struct_file
对文件名进行转码,之后:
move_uploaded_file(
写入文件,这里就出现了我们上面说到的编码转换,最终导致可以上传任意文件。
alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断相关推荐
- alxc tool 报错数组超出了界限_Stack Overflow上59万浏览量的提问:为什么会发生数组越界?
在逛 Stack Overflow 的时候,发现了一些访问量像昆仑山一样高的问题,比如说这个:为什么会发生 ArrayIndexOutOfBoundsException?这样看似简单到不值得一问的问题 ...
- weblogic启动项目报错找不到类_启动类报错是经常出现的事但是单一的从一个地方找原因会越找越错...
Error starting ApplicationContext. To display the conditions report rerun your application with 'd ...
- 【matlab报错问题个人总结】数组超出索引维度
意外的是for循环读取数组的情况下遇到"数组超出索引维度"问题,检查发现是数组的长度设置出现bug.在n=a:(a-b)/100:b时,多次迭代ab值,在ab值过于接近eps(程序 ...
- sqldataadapter.fill 索引超出了数组界限_小学生学习C++||第十五节 数组
存储数据的方式 第一种,变量: 存放1个学生的数学成绩可以定义1个变量存放,那么如果想要存放100个学生的数学成绩应该如何存储呢? 第二种,数组: 引入数组概念: 可以用来表达类型相同的元素的集合,集 ...
- 关于nmonanalyser报错“输入超出文件尾”的解决方法
关于nmonanalyser报错"输入超出文件尾"的解决方法 运行环境:nmonanalyserV4.7 原因分析: 这个是工具的VBA宏报错,原因是*.nmon文件中 ...
- alxctools索引超出了数组界限_[译]V8中的数组类型
译者:蒋海涛 JavaScript 对象可以和任何属性有关联.对象属性的名称可以包含任何字符.有趣的是 JavaScript 引擎可以选择名称为纯数字的属性来进行优化,而这个属性其实就是数组 inde ...
- Matlab报错——数组索引必须为正整数或逻辑值
使用min函数时报错数组索引必须为正整数或逻辑值 解决方法:重启matlab,或clear all
- (求解答)phpcms报错:【DNS解析“不支持采集和报错远程图片”】
PHPCMS报错: DNS解析 · "不支持采集和报错远程图片" 报错 · 截图示下: 原因分析: 网上有说是虚拟机问题? 如何解决? //欢迎大家给出参考意见或者解决方案. // ...
- 05_SQL注入_功能语句报错注入盲注
05_SQL注入_功能语句&报错回显&盲注 1. SQL 语句和网站功能 1.1 Web开发中常见语句 [本章代码来源于pikachu和sqli-lab中的靶场] 开发中,根据不同的需 ...
最新文章
- 工厂模式、构造函数入门
- 送一个全新的AirPods Pro
- Python中常用的高阶函数
- 首届UBDC全域大数据峰会:未来的数据一定是全域数据
- Redux-学习笔记
- python 定义字符串变量_python 字符串(1)
- Es6常用方法filter
- Python(14)-模块
- 数据结构专题(二):2.1单链表与顺序表的关系
- [洛谷P4234]最小差值生成树
- 2020 年 AI 产业报告:100 个岗位抢 1 个人,计算机视觉成最大缺口
- 栈--进栈,出栈指针修改的顺序问题
- 线程的常用方法(1)
- 启动vue项目的时候报错提示To install it, you can run: npm install --save core-js/modules/es.regexp.dot
- 微服务如何聚合 API 文档?这波操作也太秀了
- 一文看懂RabbitMQ
- python两列时间间隔计算器_python时间差计算器时分秒_python 实现日期计算器
- tomcat查看运行日志
- Centos8(Liunx) 中安装PHP7.4 的三种方法和删除它的三种方法
- 热门话题“30岁还没结婚你会考虑将就么?”数据告诉你,网友们都如何做出抉择
热门文章
- static和瞬态_具有瞬态属性的视图对象的钝化和激活
- lucene创建索引_Lucene概述第一部分:创建索引
- apache shiro_Apache Shiro:简化应用程序安全性
- 使用Fabric8在CDI管理的bean中注入Kubernetes Services
- 用Java弹出创建新的消息通知
- Java中常见的代码冲突
- TestNG或JUnit
- 设置Java EE 6开发环境
- WebSphere Application Server性能调整工具包
- 地理信息系统概论_地理信息系统概论黄杏元第3版配套练习题库——才聪学习网...