ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name ="我的模块"
近些阵子反序列化漏洞横行,看了几篇文章,整个漏洞发现过程是非常有意思的,所以希望总结下来,分享给大家一起研究讨论,如有不足还请多多指正。
文章背景: 在VBA中创建弹窗对话框,可以使用MsgBox函数;但是该函数得到的消息框,必须手动关闭它。下面介绍一个未公开的Windows API函数,可以使用该函数得到一个自动定时关闭的消息框。
文件上传 $name = "picture"//文件名 $f_type = ".png"//文件类型 $tmp = $_FILES['file']['tmp_name']; $filepath = 'file/document/';//上传的路径 if(move_uploaded_file($tmp,$filepath.$name.$f_type)){ echo "上传成功"; }else{ echo "上传失败"; } 统计目录下文件数 $folderPath = "file/docume
可以看到File的close()方法会去调用file_get_contents,可能存在文件读取。User类中存在close方法,并且该方法在对象销毁时执行。同时FileList类中存在call魔术方法,并且类没有close方法。如果一个Filelist对象调用了close()方法,根据call方法的代码可以知道,文件的close方法会被执行,就可能拿到flag。
在执行下一段代码之前,如果需要暂停Excel VBA代码运行,该如何做呢?本文探索在Excel VBA中添加暂停的最佳方法。
文章背景: VBA中,变量的作用域,决定变量在哪里能被获取和使用。VBA中的过程和函数,与变量类似,也具有不同的作用域。
文章首发于跳跳糖社区https://tttang.com/archive/1732
Excel里有个分列的功能,能根据单元格中指定的符号,把单元格拆分为多个单元格,并按列存放。
工作中碰到过这种情况:有些外部收集来的资料,由于表格制作者不知道如何在单元格中输入换行符,他的做法是设置单元格格式自动换行,为了达到排版换行目的,是输入了一些空格用来占位的,这种表格在列宽变化了后,很可能就会变的有点乱,替换为真正的换行符或者其他符号就很有必要了:
phar文件本质上是一种压缩文件,在使用phar协议文件包含时,也是可以直接读取zip文件的。使用phar://协议读取文件时,文件会被解析成phar对象,phar对象内的以序列化形式存储的用户自定义元数据(metadata)信息会被反序列化。这就引出了我们攻击手法最核心的流程。 构造phar(元数据中含有恶意序列化内容)文件–>上传–>触发反序列化 最后一步是寻找触发phar文件元数据反序列化。
示例:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...。现在需要统计数量总和,如C列所示。例如,单元格B3中,包装明细为100*3+115*1,对应的包装个数就是3+1。
文章背景: 最近发现有些办公电脑打开一些excel文件(xls格式)时,会弹出一个对话框,显示""隐藏模块中出现编译错误:<module name>"。在网上查阅一些资料后,发现早期的VBA代码存在兼容性问题。
在一个工作簿中,如果工作表太多了,要选中需要操作的Sheet还挺麻烦的。对于Excel用的不大熟练的人,只会按左下角的方向箭头,然后用眼睛去查找,有的人为了让Excel显示多一些工作表名称,还会把右下角的滚动条拉的只剩一点点,造成操作Sheet都不方便。
实现了二维表格转换为一维表格,反过来的功能偶尔也是会用到的: 首先在customUI.xml中增加代码: <button id="rbbtnTarnsTable1To2" label="
VBA数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。另外,数组在赋值计算效率上面也是非常高的,大家可以自行尝试下。
phar由四个部分组成,分别是stub、manifest describing the contents、 the file contents、 [optional] a signature for verifying Phar integrity (phar file format only),以下是对详细的介绍:
接着上一次的例子,表格汇总完成后,你又得到了一个任务,需要对表格的数据进行处理,需要增加出生日期、性别。
要创建工作簿的目录,其实就是遍历获取所有的文件,然后过滤一下,再增加超链接就可以:
对于做管理工作的,收集表格这种工作应该会经常有,设计一个表格模板,发给各个有关单位去填写,收集起来后再合并到一起。
使用VBA时,有可能需要根据分隔符将字符串拆分为不同的部分。此时,就可以使用VBA的Split函数。
Windows 反恶意软件扫描接口 (AMSI) 是一种通用接口标准,可以集成在应用程序和服务与机器上存在的任何反恶意软件产品中。可以增强杀毒软件的查杀能力。
会使用Excel的人都知道数字和文本是应该分开列来存储的,可是总是会碰上一些人仅仅是把Excel当作制作表格的一个简单工具,至于使用函数进行数据处理是根本不会的!
序列化实际是为了传输的方便,以整个对象为单位进行传输, 而序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。如果了解底层的同学可以知道,类中的方法本就不在类中。
有了前面的功能分析基础,使用VBA代码实现这个功能就不是很难了,逐行读取CommandBarDir.txt里面的信息,然后创建弹出式菜单或者按钮,最终实现的效果如下:
有个表格,有许多单元格的数据,制作者为了方便,很多数据是写在一行的,类似下面这种:
通常我们在利用反序列化漏洞的时候,只能将序列化后的字符串传入unserialize(),随着代码安全性越来越高,利用难度也越来越大。但在不久前的Black Hat上,安全研究员Sam Thomas分享了议题It’s a PHP unserialization vulnerability Jim, but not as we know it,利用phar文件会以序列化的形式存储用户自定义的meta-data这一特性,拓展了php反序列化漏洞的攻击面。该方法在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作。这让一些看起来“人畜无害”的函数变得“暗藏杀机”,下面我们就来了解一下这种攻击手法。
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
Windows注册表用于存储与计算机相关的各种设置,VBA中的GetSetting函数和SaveSetting函数能够读写Windows注册表,这样,我们不仅能够获取应用程序和硬件的信息,也可以将应用程序中的信息存储在注册表中以供使用。
phar文件会以序列化的形式存储用户自定义的meta-data这一特性,拓展了php反序列化漏洞的攻击面。该方法在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作
在VBA中,join函数可以快速的将一个String类型的数组连接成一个字符串,用的还比较多。
phar反序列化就是可以在不使用php函数unserialize()的前提下,进行反序列化,从而引起的严重的php对象注入漏洞。
MyVBA加载宏主要功能是设置为自动加载,作为打开其他宏文件的一个程序,做好后大概是这么一个东西:
使用Excel如果经常处理英文资料的话,应该会经常碰到需要转换大小写的情况,Excel提供了UPPER、LOWER等转换函数。
Workbook.FullName在VBA中是一个非常常用的属性,返回的是工作簿的全路径,首先查看一下帮助文件:
在处理Excel表格的时候,偶尔会碰上这种需要,定位选中单元格区域内的空白单元格,然后让空白的单元格等于它上面的单元格,一般在Excel是这样操作的:
11年前,刚工作的我开始接触Excel,我还记得问的同事第一个问题:我写个1,怎么能拉下去的时候变成1、2、3、4、5?
该文摘要总结:通过分析一个VBA程序,讲解了ExcelVBA编程中的一些基本概念和常用函数,包括循环、条件语句、数组、字符串和数字操作函数等。通过实际代码示例,让读者更好地理解和掌握ExcelVBA编程的基本方法和技巧。
excel是一款很经典的数据分析的工具,里面包含了很多内置函数,但实际情况有时却复杂得多,而excel的宏编程提供了自定义函数的功能,正好有老师需要帮忙做一些数据分析,就学习了一下,下面是我的学习笔记。本人使用的是excel2013。有出入的地方可以参考。
如果能有一个在筛选状态下也可以使用的数值粘贴功能就方便多了,让我们用VBA来实现它,效果:
有合并工作表,自然也离不开拆分工作表,将一个总表,按照某一列的内容拆分为多个工作表,然后可以再结合前面的一个工作簿的工作表另存为工作簿功能,就可以生成多个工作簿进行分发了:
在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作
在Blackhat2018,来自Secarma的安全研究员Sam Thomas讲述了一种攻击PHP应用的新方式,利用这种方法可以在不使用unserialize()函数的情况下触发PHP反序列化漏洞。
经常用Excel的人,应该会经常需要把Excel里的数据复制到Word等其他软件中,复制过去经常会碰上格式上的问题。
文章背景:测试仪器的数据有些会以Excel文件的形式保存,有时需要将测试数据转化为pdf格式。上篇文章(见文末的延伸阅读)通过VBA代码,采用ExportAsFixedFormat函数将excel文件转化为pdf文件,对于部分excel文件的转化效果不太好,有些谱图显示不完整,如下图所示。
在利用VBAProject来共用VBA代码里介绍了使用VBAProject管理代码的方法,但是有一个不方便的地方,如果想把一个做好的功能(引用了一些其他工程代码)发送给其他人使用,就需要把所引用的工程代码复制到一起,再发给其他人,这样手动处理有些麻烦。
大家好,前面示例中都涉及过输入inputbox函数,但都是最简单的形式,本节就将补充inputbox输入函数的完整版,顺带简单说下复合语句和语句断行的知识。
文章背景:在编写VBA代码时,有时需要一个用户输入的对话框,以实现跟用户的交互。Inputbox函数是VBA自带的,功能相对简单;使用Application对象的inputbox方法,也可显示一个接收用户输入的对话框。接下来分别对两者进行介绍。
这里是一个VBA用户定义函数(UDF),它显示带有一个、两个或多个选项的消息框,其中一个选项(默认)将在秒时间计数结束时自动选择。它是一个改进的MsgBox函数,这里名为MsgBoxT函数。
领取专属 10元无门槛券
手把手带您无忧上云