【web安全學習篇1】VBS指令碼基礎編寫總結

2020-10-19 12:00:26


引言:非科班出身,自學web滲透的小白。初次寫部落格,不到之處還望多多包涵。學習是個漫長的過程,而且經常產生疑惑,感覺學的東西沒什麼實際意義,不知道怎麼用。個人也比較健忘,筆記一直胡亂地寫。看了不少博文,就想著自己也寫一些。一來可以整理一下自己的筆記,複習所學的知識。再者就是想跟這裡的學者交流一下,這樣才有進步。筆記如若有不完整或者錯誤的地方,歡迎大家在留言欄提出糾正。

VBS初始及變數

VBS是windows內建指令碼,用記事本直接編輯,將檔案字尾名改為「vbs」即可執行。
第一個指令碼:

dim a
a="Hello,world!!"
msgbox a

其中「msgbox」如python的「」print一樣是列印的意思。
變數以dim命名,並且可以用「:」號在命名同時賦值。
如:dim a:4
我們可以用「inputbox」進行輸入,達到互動效果

dim name
	    name=inputbox("請輸入你的名字。")
		msgbox "你的名字叫"&name

常數

常數用「const」命名,目的是為了減少程式碼量以及增加規範。

const a="nihao,china"
      msgbox a

註釋與數學運算

  1. 在每句的開頭寫入「rem"在或者"’"即可註釋掉整行。

如:

dim a,b
    a=46
   'a=15151
rem b=78
	b=77
	msgbox a,b
  1. 數學的運運算元大部分在指令碼都能通用。

「*」表示乘法
「**」表示平方
「/」表示除法
「+」純數位表示加法,字串表示拼接
a=12+5和a=「12」+"5"意義是不一樣的

布林型別

true表示正確;false表示錯誤

dim a,b
   a=15
   b=12
   msgbox a>b

輸出結果為true,可以用布林型別判斷比較結果。

if判斷

常見的if判斷語句:
if then……end if
if then……else…… end if
if then ……else if……else……end if end if
例子
1.

dim a,b,c,d
a=inputbox("請輸入a的值:")
b=inputbox("請輸入b的值:")
c=inputbox("請輸入c的值:")

d=a*2+b*2
c=int(c)
if c=d then
msgbox "你是對的!!!!"
else 
msgbox "你是錯的!!!"
end if
dim a
a=inputbox("請輸入一個大於50的數位")
a=int(a)
if a>50 then
msgbox "正確"
else if a=50 then
msgbox "不要輸入50!!!!"
else 
msgbox "錯誤"
end if
end if
dim num:num=0
for i=0 to 9
num=num+1
if num=5 then
exit for
end if
next
msgbox num

有多少個「if」就要有多少的end if結尾!

select語句實現多條件迴圈

利用select case +變數實現。看個例子就明白,跟DOS命令的goto很像。

dim a
a=inputbox(「請輸入小於4的數位」)
a=int(a)

select case a
case 1
msgbox "one"
case 2
msgbox "two"
case 3
msgbox "three"
case else					
msgbox "你輸入的數位不符合要求"
end select  

迴圈結構

  1. do迴圈

利用do……exit do……loop迴圈實現

dim password,ctr
ctr=0
const pass ="123456"

do
password=inputbox("請輸入密碼:")
if password=pass then
msgbox "密碼輸入成功!"
exit do
else
if ctr=3 then
msgbox "你的輸入次數有限,程式將關閉!!!"
exit do
else
ctr=ctr+1
msgbox"密碼出錯,請重新輸入"
end if
end if
loop
  1. for迴圈
dim count
for count=0 to 10
msgbox count
next

迴圈巢狀

  1. do迴圈巢狀while條件語句
dim count
count =0 
do while count<11
msgbox count
count=count+1
loop
  1. for迴圈巢狀if條件語句
dim num:num=0
for i=0 to 9
num=num+1
if num=5 then
exit for
end if
next
msgbox num
  1. 雙for巢狀迴圈
dim i,j,k
for i=1 to 9
for j=1 to 9
k=i*j
msgbox k
next
next

指令碼會逐一輸出結果。需要注意的是,兩個for迴圈,第一個每完成一次,第二個會完成全部。

陣列的定義與應用

陣列由()定義,並且從0開始

如定義陣列裡有十個元素,並對前三個元素進行賦值:

dim name(9)
name(0)=12
name(1)="mylove"
name(2)=5.26
msgbox name(2)

跟變數一樣,陣列也可以同時被定義呼叫:

dim name(2),high(2),mark(2)
dim n
for n= 0 to 2
name(n)=inputbox("請輸入第"&n+1&"個學生的名字")
high(n)=inputbox("請輸入第"&n+1&"個學生的身高")
mark(n)=inputbox("請輸入第"&n+1&"個學生的成績")
next
msgbox name(0)
msgbox high(1)
msgbox mark(2)

此時通過使用者輸入來實現陣列賦值

定義二維陣列及應用

二維是指行跟列
如 dim name(1,1)表示定義一個兩行兩列的二維陣列。第一個數位代表行數,第二個代表列數。
其實就是個表格,可以用來收集使用者資料
如:
1.

dim name(2),high(2),mark(2)
dim n
for n= 0 to 2
name(n)=inputbox("請輸入第"&n+1&"個學生的名字")
high(n)=inputbox("請輸入第"&n+1&"個學生的身高")
mark(n)=inputbox("請輸入第"&n+1&"個學生的成績")
next
msgbox name(0)
msgbox high(1)
msgbox mark(2)
dim msg(1,1)
dim i,j
for i=0 to 1
   for j=0 to 1
dim opt
select case 1
case 0
opt="name"
case 1
opt ="age"
end select
msg(i,j)=inputbox("請輸入第"& i+1 &"個人的"& opt)
next
for i=0 to 1
for j= 0 to 1
msgbox msg(i,j)

初識函數

  • 與定義變數差不多,將dim替換成function,最後以end function結束函數的定義。函數內可定義變數,實現更復雜的運算。
    如定義一個函數,需要使用者輸入名字並且列印一句話。
function fun(name)
name=inputbox("請輸入你的名字")
msgbox "吃飯啦!!!!"&name
end function
call fun(name)

用call+函數名呼叫函數!

定義函數進行互動

dim num1,num2
num1=inputbox("請輸入第一個數位")
num2=inputbox("請輸入第二個數位")
num1=int(num1)
num2=int(num2) 
function fun(num1,num2)
num=num1*num2
msgbox num
end function
call fun(num1,num2)

內建函數不需要定義,直接能呼叫。可以百度查詢,有很多。

如:

dim a
a=now()/time()/date()
msgbox a

子程式

子程式跟函數差不多,定義時將function換成sub。
如:

sub msg(name,age)
msgbox "hello,word"&name
end sub
call msg("xiaohua",14)

return msg("xioahua",14)

用VBS指令碼執行可執行檔案

  • 開啟cmd:
set ws=wscript.createobject("wscript.shell")
ws.run"C:\Windows\System32\cmd.exe"

這裡的ws.run可換成ws.exec,檔案路徑最好是絕對路徑,就是從碟符到檔名都要寫清楚。

當然也可以不用絕對路徑,前提是你要開啟的檔案路徑可以在指令碼執行路徑後面追加。

  • 開啟記事本:
set ws=wscript.createobject("wscript.shell")
ws.run"notepad.exe"

總結

多敲程式碼,多練練。其實就入門而言,我發現很多程式語言都有許多相似之處。如python,php,JavaScript等,入門學的內容其實差不多。要注意分號,冒號,花括號等等符號的使用,熟練日常類和函數的使用。程式碼敲多了,就會有一種觸類旁通的快感。