皇冠体育寻求亚洲战略合作伙伴,皇冠代理招募中,皇冠平台开放会员注册、充值、提现、电脑版下载、APP下载。

首页科技正文

usdt交易平台(www.caibao.it):记一次Java Servlet实战审计

admin2021-02-0485安全技术WEB安全

USDT自动充值接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

记一次Java Servlet实战审计

0x00 靠山

某次渗透中,遇到个jsp的站,弱密码进到后台以后,却发现功效很少,并不好搞,简朴排查后并无突破,然而老大给的要求是尽快搞到shell。。。
一番梳理后,我的想法是:要么通过破绽拿下后台,要么搞到源码直接白盒开冲。白盒的话很香,对审计能力提升也大,以是可以按下面几步来试试:

  • 目录扫描。使用dirbuster的字典directory-list-2.3-medium.txt指定后缀jsp来扫,工具就随便用个随手的,dirseach
  • 网盘泄露。这套系统并不开源,估量厂家发版的时刻放了不少在网盘,简朴一搜就有效果了。在网盘搜索引擎上,搜到了厂家安装包,但似乎是PE文件,还得安装,且不清晰是否有混淆/加密,暂弃捐。

心里OS:这年头——可不敢乱点。

  • Github、gitlab泄露。实验了多个关键词,均无果
  • Fofa找同类型的站。这个无需多说,不管是发版的时刻没有把备份文件删除,照样运维的疏忽大意,都是很容易被发现的。同时,在fofa上,用favicon.ico,或是用title来搜,准确率都相当惊人


那工具方面,首先是选用了broken5师傅的https://github.com/broken5/WebAliveScan,1024个线程猛冲之后,却并无发现。。。
思量是不是字典不够牛,接着使用dirsearch自带的字典(约17,000条),

 只要字典大没有拿不下
python3 dirsearch3.py -e "jsp" -l ip_port.txt -t 50 --plain-text-report=ip_port_DirScan.txt  -q

跑目的列表花了一个上午,终于有了收获——web.rar,香!
天黑了,打开IDEA!天亮了,关闭IDEA。

我发现jsp的代码虽然不难明,可基础知识不牢,代码审起来简直让人打脑壳,于是有了下面这第一章。

0x01 Servlet简介


正常情况下的目录结构,长下面这样

exampleApp
└─images
└─WEB-INF                             
   ├─classes      包罗了所有的 Servlet 类和其他类文件主要
       └─com  
          └─example
   
   └─lib          项目依赖包的储存位置.jar文件
└─web.xml          Servlet的设置文件主要

界说路由
路由的界说,可以在这两个地方举行:Servlet注解web.xml, 设置的时刻二选一即可。

Ⅰ Servlet中的注解

@WebServlet("/Hello")
public class HelloServlet extends HttpServlet{
  //处置 GET 方式请求的方式
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    //实现的代码
  }

  //处置POST方式请求的方式
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    //实现的代码
  }
}

Servlet3.0之前,需要在web.xml中设置,才气够使用Servlet,这一块由于路由跟逻辑并不在一块儿实现,对照生疏,因此我们重点看下它。

Ⅱ 设置文件web.xml

Java项目中的web.xml,可以设置web的路由,内里的属性许多,咱们主要体贴两条:

  1. <servlet-class></servlet-class>对应类的名字
  2. <url-pattern>,</url-pattern>路由。为servlet提供一个缺省的URL:http://host/webAppPre fix/servlet/ServletName

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <servlet>
     <servlet-name>HelloServlet</servlet-name>
     <servlet-class>com.example.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
     <servlet-name>HelloServlet</servlet-name>
     <url-pattern>/Hello</url-pattern>
    </servlet-mapping>
    </web-app>
    

    ,, Ⅲ jsp:useBean标签
    同时,在jsp代码的开头,看到大量使用<jsp:useBean...的代码,见图片中的第2~4行。

    这器械,叫**<jsp:useBean>**标签,它的界说,整理出来是这样的:

    ,

    Usdt第三方支付接口

    菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

    ,

    <jsp:useBean>标签可以在 *** P中声明一个JavaBean,然后使用。

    • 声明后,JavaBean工具就成了剧本变量,可以通过剧本元素或其他自界说标签来访问。
    • <jsp:useBean>标签的语法花样如下:
      <jsp:useBean id="HttpSession" scope="session" class="example.HttpSession"/>
      
      • id值,可随意界说,只要跟上下文不重复;在习惯上,跟class的最后一级相同(HttpSession);
      • scope值,可以是pagerequestsessionapplication,划分对应差别的作用局限,注重不要将【需要经常更改的 bean】 的 scope设为 applicationsession
      • class值,指定对应的java类;一样平常是WEB-INF/classes/为起点的一个相对路径(用作路径分隔符)

JavaBean,个人认为就是Java的一种工具,遵照一些规范,有一些特征。

因此,在审计时,只需先在jsp文件中找敏感函数,凭据当前文件中的标签界说,找到界说函数的.class,完成破绽的确认就好了。用IDEA可以很方便地举行查看。

Ⅳ 取HTTP参数

*** P中取request参数的写法,虽然非常好明白,但对小白来说,也是有一些需要注重的点。

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
    ...
<% 
String id;  
id = request.getParameter("id");

// 处置中文
String name =new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
...

上面这段代码中,使用request.getParameter来接受client发送的HTTP参数。但对于id参数,无论你以GET、照样POST方式来提交的,都能被server吸收。
也就是说:request.getParameter是兼容POST/GET参数滴!有点像PHP中的$_REQUEST方式。
同时,对于中文数据,需要对其转码,才气正常显示。
固然, *** P中另有其它取参数的写法,由于并未在本次渗透中泛起,也就不再赘述。感兴趣的师傅可以自行领会。

Ⅴ 文件的包罗

此外,在项目中还泛起了文件包罗的写法

<%@ include file="check.jsp"%>

经由一番学习,这个跟PHP中的文件包罗有点像

那看看check.jsp的内容吧,

很明显,下面这段代码一泛起,就意味着本页面的功效属于后台功效了。

<%@ include file="check.jsp"%>

不外呢,我另有一点没搞懂,又没看到有exit函数,为啥include以后的代码,走到out.print以后就不再执行了呢?估量跟servlet的生命周期有关。有领会的师傅贫苦在谈论区抬一手。
OK,基础知识弥补得差不多了,下面开冲,实验完成前台RCE的挖掘。

0x02 后台SQLi

轻松找到一处注入,无任何过滤。

不外,思量到可能需要SQLMAP作自动化行使——删除型的注入点,照样算了。

那么,又重新找到一处拼接表名的注入点。

问题又来了,这个测试环境的数据库文件,我之前作目录扫描的时刻是搞了一份的,找半天咋找不到task_开头的数据表呢???
没办法,只能FUZZ了,接纳SecLists内里的raft-large-words.txt来举行FUZZ。哈哈,果真没用!

最后,审计呗,找到一处完善注入点,既不危险数据库,又不需要花里胡哨地FUZZ。SQLMAP跑的效果如下:

注重到是DBA权限,且通过大小写判断目的是Windows环境。
对我来说,一是想到可以用UNC地址举行带外注入(可以,但在团结注入眼前,没必要);
二是写webshell。一样平常而言,windows通过注入写webshell比linux更难一些,由于路径相对更难猜。不外,由于我手上有系统的部门源码,很快翻找到了web路径,是C:\example,实验使用--os-shell写shell,并不乐成;一开始还预测是当前环境更换了盘符,效果26个字母捋了一遍,都不乐成。。。

0x03 路径泄露 => 后台getshell

天无绝人之路啊。我回想起目的环境的Tomcat似乎很拉跨,并未对报错举行屏障,经常露源码出来,嘿嘿!

通过让后台备份功效发生报错,乐成获得路径d:\exam\bak\
接着通过SQLMAP --os-shell参数,也是不费功夫就拿到了SQLMAP的shell,允许上传随便文件了。

0x04 前台getshell

话又说回来,现在这个目的是拿下来了,可毕竟是弱密码,难免被诟病“不讲武德”。
于是,全局搜索没有包罗check.jsp的代码,发现一处前台SQL注入。。。

好的,前台getshell的方式有了,不外要知道目的环境的web路径才行,但思量到该产物差不多接纳的都是销售OEM服务器的形式,基本不会出太大岔子,以是就到此为止吧。

谢谢旁观,本文主要是简朴的代码审计,有许多思绪不到位的地方,请列位师傅不惜指点!

Refs

  • https://www.runoob.com/servlet/servlet-writing-filters.html
  • https://www.w3cschool.cn/jsp/jsp-javabean.html
  • https://www.cnblogs.com/sharpest/p/6117629.html

网友评论