萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> mssql中public和db

mssql中public和db

  在看之前我們先回顧一下目前在公開或者已知的public和db_owner權限拿到webshell或者系統權限的思路和方法(sysadmin權限我就不說拉,給你這麼一句,只要是sysadmin,拿不到webshell或者系統權限那是你的無能)public下面我還沒見到一種可以真正能利用的方法。db_owner目前公開的方法主要有5種:第一種就是最普遍的backup,現在利用差異備份生成的asp文件確實要比以前小拉不少,但能否得到webshell,目前成功率還不是很高。第二種就是在下的萬能提權,此法成功率幾乎為零,只有在特定的條件下面才能實現。第三種就是LCX大蝦在《MSSQL db_owner角色注入直接獲得系統權限》,所說的利用xp_regread讀出VNC在注冊表的加密密碼,然後破解,5自學網,直接拿到系統權限,這種方法局限性比較大,要是對方主機沒有裝vnc,你怎麼辦。第四種就是利用xp_regwrite再注冊表裡直接加個系統帳號或者直接寫個webshell,在主機重起的時候就可以拿到webshell或者系統權限。此法適用范圍比較大,成功率也相對前3種較高點,但缺點也是顯而易見的,就是不能夠馬上得到webshell,需要對方重起。第五種就是利用添加作業的一些存儲過程,sp_add_job,sp_addtask之類得到系統權限。理論上應該說是目前這5種裡面成功率最高的的一種吧(郁悶,我在本機測試的時候一次也沒成功過,可能是操作系統的原因吧)。看過以上5種方法後,應該說目前在db_owner權限下面得到系統權限的的手段無論是成功率還是從結果來看,都還是不太理想的。呵呵要是我告訴你還有第6種,第7種,第8種呢,而且每個都比以上任何一種的方法的成功率都高。呵呵,你信不信。我先介紹一個大家應該都知道的,而且可能大家都經常用,可是卻沒想到他還有另一面的方法,我把他叫做——瞞天過海。再介紹之前還得有請各位看官先把我制作的動畫看一下。看拉之後,不知道網管們會做何感想啊,想不到只有相對public權限(我在movie裡面只有public權限,相信看過動畫的各位也應該看清楚拉,之所以說是相對,那是因為我在master中有db_owner權限)的我們竟然可以使用只有sysadmin才能用的sp_oacreate及sp_oamethod吧,利用sp_oacreate,sp_oamethod我們可以說是無所不能,你可以用來寫個webshell甚至直接加個系統帳號。而且利用sp_oacreate及sp_oamethod寫出來的webshell可是沒有亂碼的哦。那麼為什麼只有 sysadmin 固定服務器角色的成員才能執行的 sp_OACreate、sp_oamethod(呵呵,M$講的),而只有相對public權限的我們卻好使用,原因我也不太清楚,可能是M$送給我們的“彩蛋”吧。可能你會問,那要是在master中是public權限,其他數據庫都是public權限的情況下,我們還能得到webshell或者系統權限嗎?我現在就告訴你,那是絕對不可能的事情,注意我的意思是說,在絕對public權限下面,你想通過存儲過程以及擴展存儲過程,得到webshell或者系統權限那是絕對不可能的事情,除非你借助其他方法才有可能在絕對的public權限下面,才有可能得到webshell或者系統權限,單靠sql的力量是肯定不夠的。我在我的《終極利用方法》一文裡面說的public權限的用戶拿到webshell甚至系統權限的方法至少有4種,是指在相對的public權限下面,至少有4種以上。絕對的情況下面,你想用存儲過程或者擴展存儲過程拿到webshell或者系統權限是絕對不可能的。下面我來說說為什麼在絕對的public權限下面是絕對不可能的.可能會有人說可以利用sp_add_job,sp_add_jobstep,sp_add_jobserver,sp_start_job,sp_addtask這些存儲過程可以得到webshell或者系統權限啊,的確是可以,(郁悶,我在自己機器上作實驗一次也沒成功過,肉雞上卻可以,不懂)但要在SQLSERVERAGENT服務開啟的情況下面,而且默認是不開啟的哦,你想利用xp_servicecontrol來啟動啊,你到查詢分析器輸入exec master..xp_servicecontrol 'start','SQLSERVERAGENT'試試看,看看是不是出現錯誤拉。就算是public可以使用的xp_regread,xp_dirtree,xp_subdirs這些稍微對你有用的存儲過程,就算是給你用,你在檢測對方的網站的時候也沒辦法用,你首先要建個表吧,然後才能把你要讀的鍵值或者你要看的盤符插到表裡面吧,最後才能通過暴出來才能看見你想要看見的內容。可是不要忘拉public是沒有建表,插入,更新,備份等權限的,所以第一關你就過不去,你只能除拉select還是select。至於其他的有危險的存儲及擴展存儲我就不一一舉例拉,不是權限不夠就是有限制。所以綜上所述,在絕對public權限下,想要只憑借sql的力量拿到webshell及系統權限是絕對不可能的事情(假如你可以做到的話,作個動畫給大家看看,成功的話,那你絕對是牛人中的牛人拉。)網管們也不要開心的太早拉,就算是在絕對的public權限下,只要條件成熟,sql注射配合其他手法還是可以拿到webshell的,假設你的網站有sql injection漏洞,但是是絕對的public權限,“黑客”們雖然光憑sql的力量是無法得到webshell,但可以利用select暴出你的管理員密碼然後到後台,通過上傳(或者干脆就是上傳漏洞)或者備份,修改,創建得到一個webshell,也可能用木馬代替你的一個正常文件,得到webshell。當然方法還有很多,不可能一一列舉出來。 sql injection只是腳本漏洞的冰山一腳,網管們不要以為杜絕拉sql injection就可以高枕無憂,就算你真的杜絕拉sql injection,可是一旦在其他地方出拉問題,自學教程,列如跨站拉(中國目前至少90%以上的網站都有這個問題,即使大型門戶網站也不能幸免),上傳拉(最近上傳漏洞的確是火拉一陣啊),暴庫拉(通過暴庫得到數據庫名,要是後綴是asp或asa的可以插入一句話木馬),等等,只要你一個很小的地方出現拉問題,那麼就有可能帶來巨大的損失。在這裡我想給所有網管們一個建議:對於那些公開的或者是已知的漏洞和問題,我們一定要處理好,解決好,而對於那些沒有公開或者只有少數人掌握的漏洞,我們只有作好完備的防范措施,這樣才能在"災難"來臨時把損失降到最低。總之一句話:安全是一個整體。後記:可能會有人說有誰回在其他數據庫裡面都是public的情況下面,而惟獨給master,db_owner權限呢?確實,這種概率確實很低。在實戰public提權中也沒多大利用價值。呵呵,那要是在其他數據庫是db_owner權限,你認為master中具有db_owner的概率大不大?我以我實戰的的經歷告訴你,至少90%的網站會在給他默認數據庫db_owner權限的同時,同時給master,db_owner權限,尤其是在他數據庫少的時候,只有2,3個用戶數據庫的情況下,100%在master中具有db_owner權限。呵呵,那你說在db_owner權限下利用價值大不大。而且在所有有關的書籍裡面都說拉只有sysadmin才能用的sp_oacreate及sp_oamethod,所以大多數網管都會認為即使我們找到注射點,也沒有權限使用而不會刪除。即使刪除拉,也無所謂,由於MSSQL強大的功能再加上大量豐富的存儲過程及擴展存儲過程,我們還是有辦法得到webshell甚至系統權限的,所以說最好的方法就是杜絕sql injection。 應該有不少人都會在看拉之後回說我在N年前就知道拉,早就會用sp_oacreate和sp_oamethod拉,不錯,你可能很早就知道拉,我也很早就知道拉,可是你知道只要有相對public權限或者說db_owner權限也可以使用嗎?你可能還以為只有sysadmin固定服務器角色的成員才能執行吧。可能有的人看過以後會有人問我要工具,呵呵,其實網上面早就有拉,xiaolu寫sqlcomm裡面有這個功能,不過我覺得不太好用自己又重新寫拉個。這裡多說幾句,一直用工具的話,會把人變傻的,工具只是武器,思想才是靈魂,工具只是提高效率罷了,並不代表你的技術高超。思想決定一切。
copyright © 萬盛學電腦網 all rights reserved