黑客技巧:利用Log備份獲取Webshell
發(fā)布日期:2021-12-17 10:38 | 文章來源:源碼之家
dbowner通過注射得到一個(gè)shell應(yīng)該不是什么難事情了,比較麻煩的是就算利用增量備份,仍然有很多不確定的因素,如果之前別人有過什么錯(cuò)誤的寫入信息,可能備份出來得到的還是一些不能用的500錯(cuò)誤,如何能夠提高成功率及重用性呢?如果單從調(diào)整增量備份的方式來看,盡管能夠達(dá)到一些效果,但是方法比較復(fù)雜而且效果不明顯。加上關(guān)于重用性的考慮,例如多次備份的成功率,backup database的方法并不太適用。這里將要講述的是另外一個(gè)備份的方法,導(dǎo)出日志文件到web目錄來獲得shell。
飯要一口一口的吃,技術(shù)問題也要一個(gè)一個(gè)的解決,得到webshell首先要知道物理路徑,然后才能說其他的。關(guān)于物理路徑的暴露有很多方法,注入也可以得到,這點(diǎn)nbsi2已經(jīng)做到了,就不再多說。值得注意的是,如果數(shù)據(jù)庫和web分離,這樣肯定得不到webshell,備份出來的東西可以覆蓋任何文件,一些關(guān)于開始菜單的想法還是有效的,只要注意擴(kuò)展名就好。扯遠(yuǎn)了,反正如果數(shù)據(jù)庫和web在一塊的,你就有機(jī)會(huì),反之還是想其他的辦法吧。
然后你要得到當(dāng)前的權(quán)限和數(shù)據(jù)庫名。如果是sysadmin當(dāng)然沒有必要做很復(fù)雜的事情,dbowner足矣,public則不行。當(dāng)前打開的庫名用一個(gè)db_name()就可以得到,同樣很簡單。
默認(rèn)的情況是,一般選擇的數(shù)據(jù)庫故障還原類型都是簡單,這時(shí)候不能夠?qū)θ罩疚募M(jìn)行備份。然而我們都是dbowner了,還有什么不能做的呢,只要修改一下屬性就可以。由于不能去企業(yè)管理器中修改,只有用一段SQL語句,很簡單的,這樣就可以:
alter database XXXX set RECOVERY FULL
其中XXXX是你得到的數(shù)據(jù)庫的名字,執(zhí)行過后就可以備份日志了。這種修改是破壞性的,因?yàn)槟悴恢酪郧暗墓收线€原模式是什么,細(xì)心的管理員看到異樣,可能就要開始起疑心。如果之前你能得到數(shù)據(jù)庫的狀態(tài),最好還是在備份完以后把這個(gè)數(shù)據(jù)庫的屬性改回來。
剩下的事情就是怎樣讓數(shù)據(jù)庫用最原始的方式記錄下你的數(shù)據(jù)了。這一點(diǎn)和backup database中設(shè)定表名為image的問題相對應(yīng),如果你只是建立一個(gè)之類的表,日志里面的記錄還是以松散的格式記錄的,也就是< % % >,沒有任何效果。通過實(shí)際的測試,發(fā)現(xiàn)還是可以通過與backup database類似的方式記錄進(jìn)去,如下:
create table cmd (a image)
insert into cmd (a) values (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
這樣你已經(jīng)得到一個(gè)webshell了。
到這里就完了么?沒有,呵呵,我們繼續(xù)。
到這里有兩個(gè)分支方向,第一個(gè),讓注入的時(shí)候不出現(xiàn)單引號,太簡單了,我都懶得寫;第二個(gè),減小這個(gè)webshell的長度以及提高成功率。下面的方法就是討論第二個(gè)分支問題的,同樣適用于backup database的減小。
首先是初始化這個(gè)日志。
backup log XXXX to disk = ’c:\caonima’ with init
這樣有點(diǎn)類似于增量備份的第一步,不過有點(diǎn)不同的是,你做了這個(gè)以后,你備份出來的可用的shell是固定的。這一點(diǎn)比較重要,因?yàn)橛辛诉@一步,不管管理員在數(shù)據(jù)庫里面做了什么擾亂你back database的手腳,或者你之前有多少混蛋(你肯定會(huì)這么想的)弄了些你不喜歡的東西,都沒有關(guān)系,甚至你做過以后,別人在后面再按照你的方法來一次,還是會(huì)成功,這對于偶爾出現(xiàn)的反復(fù),比如對方機(jī)器重裝但是數(shù)據(jù)庫和代碼沒變,有不小的幫助。
然后是調(diào)整一下backup中各個(gè)語句的順序。通過第一點(diǎn),大概的步驟已經(jīng)確定下來了,那就是:
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 (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
這樣不好,感覺上多了一條沒用的東西。
create table cmd (a image)
確實(shí)有點(diǎn)討厭,不過這句是必要的,只好調(diào)整一下位置,弄到其他地方去。
調(diào)換一下順序似乎還可以小一點(diǎn),對于backup database中的增量情況同樣是可以的,backup database甚至可以僅僅在update后馬上備份,不過由于涉及到了數(shù)據(jù)的存儲(chǔ)格式,情況很復(fù)雜,這里不討論。調(diào)整后的是:
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 (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
成功的話,備份出來的shell(上面的2.asp)有78.5k,文件長度固定的是80,384字節(jié)。很挑剔的朋友也可以接受了吧,當(dāng)然用這個(gè)來生成一個(gè)干凈的木馬也可以——這本來就是頂端cs木馬的s端,很通用的。
飯要一口一口的吃,技術(shù)問題也要一個(gè)一個(gè)的解決,得到webshell首先要知道物理路徑,然后才能說其他的。關(guān)于物理路徑的暴露有很多方法,注入也可以得到,這點(diǎn)nbsi2已經(jīng)做到了,就不再多說。值得注意的是,如果數(shù)據(jù)庫和web分離,這樣肯定得不到webshell,備份出來的東西可以覆蓋任何文件,一些關(guān)于開始菜單的想法還是有效的,只要注意擴(kuò)展名就好。扯遠(yuǎn)了,反正如果數(shù)據(jù)庫和web在一塊的,你就有機(jī)會(huì),反之還是想其他的辦法吧。
然后你要得到當(dāng)前的權(quán)限和數(shù)據(jù)庫名。如果是sysadmin當(dāng)然沒有必要做很復(fù)雜的事情,dbowner足矣,public則不行。當(dāng)前打開的庫名用一個(gè)db_name()就可以得到,同樣很簡單。
默認(rèn)的情況是,一般選擇的數(shù)據(jù)庫故障還原類型都是簡單,這時(shí)候不能夠?qū)θ罩疚募M(jìn)行備份。然而我們都是dbowner了,還有什么不能做的呢,只要修改一下屬性就可以。由于不能去企業(yè)管理器中修改,只有用一段SQL語句,很簡單的,這樣就可以:
alter database XXXX set RECOVERY FULL
其中XXXX是你得到的數(shù)據(jù)庫的名字,執(zhí)行過后就可以備份日志了。這種修改是破壞性的,因?yàn)槟悴恢酪郧暗墓收线€原模式是什么,細(xì)心的管理員看到異樣,可能就要開始起疑心。如果之前你能得到數(shù)據(jù)庫的狀態(tài),最好還是在備份完以后把這個(gè)數(shù)據(jù)庫的屬性改回來。
剩下的事情就是怎樣讓數(shù)據(jù)庫用最原始的方式記錄下你的數(shù)據(jù)了。這一點(diǎn)和backup database中設(shè)定表名為image的問題相對應(yīng),如果你只是建立一個(gè)之類的表,日志里面的記錄還是以松散的格式記錄的,也就是< % % >,沒有任何效果。通過實(shí)際的測試,發(fā)現(xiàn)還是可以通過與backup database類似的方式記錄進(jìn)去,如下:
create table cmd (a image)
insert into cmd (a) values (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
這樣你已經(jīng)得到一個(gè)webshell了。
到這里就完了么?沒有,呵呵,我們繼續(xù)。
到這里有兩個(gè)分支方向,第一個(gè),讓注入的時(shí)候不出現(xiàn)單引號,太簡單了,我都懶得寫;第二個(gè),減小這個(gè)webshell的長度以及提高成功率。下面的方法就是討論第二個(gè)分支問題的,同樣適用于backup database的減小。
首先是初始化這個(gè)日志。
backup log XXXX to disk = ’c:\caonima’ with init
這樣有點(diǎn)類似于增量備份的第一步,不過有點(diǎn)不同的是,你做了這個(gè)以后,你備份出來的可用的shell是固定的。這一點(diǎn)比較重要,因?yàn)橛辛诉@一步,不管管理員在數(shù)據(jù)庫里面做了什么擾亂你back database的手腳,或者你之前有多少混蛋(你肯定會(huì)這么想的)弄了些你不喜歡的東西,都沒有關(guān)系,甚至你做過以后,別人在后面再按照你的方法來一次,還是會(huì)成功,這對于偶爾出現(xiàn)的反復(fù),比如對方機(jī)器重裝但是數(shù)據(jù)庫和代碼沒變,有不小的幫助。
然后是調(diào)整一下backup中各個(gè)語句的順序。通過第一點(diǎn),大概的步驟已經(jīng)確定下來了,那就是:
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 (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
這樣不好,感覺上多了一條沒用的東西。
create table cmd (a image)
確實(shí)有點(diǎn)討厭,不過這句是必要的,只好調(diào)整一下位置,弄到其他地方去。
調(diào)換一下順序似乎還可以小一點(diǎn),對于backup database中的增量情況同樣是可以的,backup database甚至可以僅僅在update后馬上備份,不過由于涉及到了數(shù)據(jù)的存儲(chǔ)格式,情況很復(fù)雜,這里不討論。調(diào)整后的是:
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 (’’)
backup log XXXX to disk = ’c:\xxx\2.asp’
成功的話,備份出來的shell(上面的2.asp)有78.5k,文件長度固定的是80,384字節(jié)。很挑剔的朋友也可以接受了吧,當(dāng)然用這個(gè)來生成一個(gè)干凈的木馬也可以——這本來就是頂端cs木馬的s端,很通用的。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章