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时,程序报错如下,如图所示

dc4b71f17282644439928a7a5682a706.png

类似的函数还有很多很多,比如

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()函数转码的时候,当遇到不能处理的字符串则后续字符串会不被处理。

我们来做一个简单的测试,测试代码如下:

<?

我们执行这段代码的行结果如图所示。

e2f9f88b742a3a04bcc2bab937b33201.png

可以看到第一次输出$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(

写入文件,这里就出现了我们上面说到的编码转换,最终导致可以上传任意文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言,去你的策略模式!

前言 这里先插一点题外话&#xff0c;在C语言中&#xff0c;实现封装、继承、隐藏、多态等等特性&#xff0c;是完全没有问题的。但是在使用过程中&#xff0c;必定是不如自带这些特性的语言方便好用的&#xff0c;比如C \java等。一旦要通过C语言来实现各种设计模式&#xff0…

eager_EAGER的获取是代码的味道

eager介绍 Hibernate获取策略确实可以使几乎没有爬网的应用程序和响应Swift的应用程序有所不同。 在这篇文章中&#xff0c;我将解释为什么您应该选择基于查询的获取而不是全局获取计划。 取得101 Hibernate定义了四种关联检索策略 &#xff1a; 提取策略 描述 加入 原始S…

什么时候会是用treeset?_flex:1 到底代表什么?

今天在做项目的时候遇到一个关于布局的问题, 就是 flex: 1; 我一直以为 flex: 1; 代表的是 flex: aoto; 后来发现结果并不是这样, 所以写一篇博客来讲解一下 flex: 1; 代表什么代码第一版<div class"container"><div class"div">我是一个div&l…

纠缠不清的C语言位域(位段)详解

位域是什么&#xff1f;有些数据在存储时并不需要占用一个完整的字节&#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态&#xff0c;用 0 和 1 表示足以&#xff0c;也就是用一个二进位。正是基于这种考虑&#xff0c;C语言又提供了一种叫做位域的…

matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文

直方图上显示数值close all ,x rand(100,1);%获得直方图的数据[n,y] hist(x);maxN max(n);%设置显示x,y长度限制axis([0 1.2 0 maxN2])%根据直方图的数据绘制出图形bar(y,n);for i 1:length(y)%直方图上面数据对不齐&#xff0c;利用水平和垂直对齐 &#xff0c;可以参考se…

django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建

项目说明 该电商项目类似于京东商城&#xff0c;主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。 项目开发模式采用前后端不分离的模式&#xff0c;为了提高搜索引擎排名&#xff0c;页面整体刷新采用jinja2模板引擎实现&#xff0c;…

mysql解压缩 1067_windows安装mysql8.0.0解压版附出现1067错误解决方法

1、自己到mysql官网下载mysql-8.0.0-dmr-winx64.zip解压缩安装包2、下载页面地址&#xff1a;https://dev.mysql.com/downloads/mysql/3、解压缩到任意目录(我自己是D:\DevTools\mysql-8.0.0)4、配置环境变量添加path路径为你的mysql8.0.0路径下面的bin目录(我的目录是D:\DevTo…

基于C语言的函数指针应用-消息命令处理框架

简述大家都知道&#xff0c;在C语音中指针的地位很重要&#xff0c;各种指针&#xff0c;功能很强大&#xff01;但是用不好&#xff0c;指针也比较容易出问题。这里介绍的是函数指针的一种应用方法&#xff0c;即使用函数指针来实现消息命令的注册与回调处理。代码测试的处理函…

easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍

EasyExcel简介Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是…

python3进阶_Python3 进阶教程 2020全新版

REVENGE_7771天前如果不创建class类的话&#xff0c;直接使用dog.name是会报错的&#xff0c;因为一般数据类型不接受这种调用方式0赞 0采集潘某人永不屈服2天前class Student()定义的时候&#xff0c;需要在括号内写明继承的类Person在__init__()方法&#xff0c;需要调用sup…

C语言中的输入输出

在C语言中提供了许多内置的输入输出函数。标准文件的定义在C语言中会把所有设备当文件来处理。为了访问键盘和屏幕&#xff0c;以下三个文件会在程序执行时而打开。标准文件文件指针设备标准输入stdin键盘标准输出stdout屏幕标准错误stderr屏幕C 语言中的输入/输出通常使用内置…

lambda 延迟执行_Java Lambdas和低延迟

lambda 延迟执行总览 有关在Java和低延迟中使用Lambda的主要问题是&#xff1a; 他们会产生垃圾吗&#xff0c;您能做些什么吗&#xff1f; 背景 我正在开发一个支持不同有线协议的库。 这个想法是&#xff0c;您可以描述要写入/读取的数据&#xff0c;并且有线协议确定它是否…

C语言“悬空指针”和“野指针”究竟是什么意思?

各位&#xff0c;提起C语言我们很自然就会想到指针二字&#xff0c;没错&#xff0c;作为C的核心和灵魂&#xff0c;它的地位咱们就不再赘述了&#xff0c;今天我们想跟大家讲的是指针中的两个特有名词&#xff1a;“悬空指针”和“野指针”。悬空指针C语言中的指针可以指向一块…

grad在python什么模块_深度学习(Deep Learning)基础概念1:神经网络基础介绍及一层神经网络的python实现...

此专栏文章随时更新编辑&#xff0c;如果你看到的文章还没写完&#xff0c;那么多半是作者正在更新或者上一次没有更新完&#xff0c;请耐心等待&#xff0c;正常的频率是每天更新一篇文章。 该文章是“深度学习&#xff08;Deep Learning&#xff09;”系列文章的第一部分&…

ubuntu终端命令停止_从命令行关闭Linux计算机的5种方法

没有操作系统是完美的。 即使相对稳定,驱动程序和应用程序也可能存在问题。 Linux也不例外。 尽管比Windows更稳定(在许多情况下,并非全部!),但可能还需要重新启动Linux计算机。 这可能是因为某些东西不起作用。 或者,您可能通过SSH连接到远程计算机或服务器,并希望它重新…

C语言编写简单朗读发音小工具!!

各位&#xff0c;今天给大家带来C语言结合VBS脚本写的一个简单的朗读小工具&#xff0c;做一个能够发音的C语言程序&#xff08;保证简单&#xff0c;人人都能学会&#xff09;。具备的知识体系&#xff1a;C语言基本框架C语言输入输出C语言文件操作C语言system函数VBS指令&…

未发现oracle(tm)客户端和网络组件_SpringColud Eureka的服务注册与发现

一、Eureka简介本文中所有代码都会上传到git上&#xff0c;请放心浏览 项目git地址&#xff1a;https://github.com/839022478/Spring-Cloud在传统应用中&#xff0c;组件之间的调用&#xff0c;通过有规范的约束的接口来实现&#xff0c;从而实现不同模块间良好的协作。但是被…

sap寄售退货单_多个退货单

sap寄售退货单我曾经听说过&#xff0c;过去人们一直在努力使方法具有单个出口点。 我知道这是一种过时的方法&#xff0c;从未认为它特别值得注意。 但是最近我与一些仍坚持该想法的开发人员联系&#xff08;最后一次是在这里 &#xff09;&#xff0c;这让我开始思考。 因此…

课堂经验值管理小程序_微信小程序怎么管理门店?

微信门店小程序是一种不用注册下载就能使用的购物平台&#xff0c;近年来很是流行&#xff0c;而且它操作简单&#xff0c;能让用户快速找到自己需要的产品&#xff0c;然后进行购买&#xff0c;深得用户喜爱&#xff0c;有用户的地方就会有商家&#xff0c;商家想拥有自己的微…

C语言 | 直接插入排序

解题思路&#xff1a;直接插入排序是一种最简单的排序方法&#xff0c;其基本操作是将一条记录插入到已排好的有序表中&#xff0c;从而得到一个新的、记录数量增1的有序表。C语言源代码演示&#xff1a;#include//头文件 int main()//主函数 {void insort(int post[],int n)…