1. 程式人生 > >mssql中public和db_owner許可權下拿到webshell或者系統許可權

mssql中public和db_owner許可權下拿到webshell或者系統許可權

        在看之前我們先回顧一下目前在公開或者已知的public和db_owner許可權拿到webshell或者系統許可權的思路和方法(sysadmin許可權我就不說拉,給你這麼一句,只要是sysadmin,拿不到webshell或者系統許可權那是你的無能)public下面我還沒見到一種可以真正能利用的方法。db_owner目前公開的方法主要有5種:第一種就是最普遍的backup,現在利用差異備份生成的asp檔案確實要比以前小拉不少,但能否得到webshell,目前成功率還不是很高。第二種就是在下的萬能提權,此法成功率幾乎為零,只有在特定的條件下面才能實現。第三種就是LCX大蝦在《Mssql db_owner角色注入直接獲得系統許可權》,所說的利用xp_regread讀出VNC在登錄檔的加密密碼,然後破解,直接拿到系統許可權,這種方法侷限性比較大,要是對方主機沒有裝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裡面有這個功能,不過我覺得不太好用自己又重新寫拉個。這裡多說幾句,一直用工具的話,會把人變傻的,工具只是武器,思想才是靈魂,工具只是提高效率罷了,並不代表你的技術高超。思想決定一切。