java代码审计基础学习笔记分享(一)

admin 2023年9月11日18:34:05评论48 views字数 5525阅读18分25秒阅读模式

# 以下内容仅为个人学习小迪安全课程自己记录的笔记,文章仅用于学习交流安全技术使用,因为自己是用obsidian md格式记录,用的在线网址md转公众号文章,所以排版可能有点问题,各位师傅们见谅。

Servlet路由技术

概念 :

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器

位置&标签:

通常在:src/main/webapp/WEB-INF/web.xml文件java代码审计基础学习笔记分享(一)

标签及含义:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns="http://java.sun.com/xml/ns/javaee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
                               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
  
    <servlet>      
        <servlet-name>ekkoo</servlet-name> //servlet的名称和下面路由中的对应  
        <servlet-class>com.example.demo1.IndexServlet</servlet-class> 
        //需要加载类的路径 
    </servlet> 
    <servlet-mapping> //路由 
        <servlet-name>ekkoo</servlet-name>   //与上面的对应
        <url-pattern>/ekkoo</url-pattern>    //url访问地址
    </servlet-mapping>  
</web-app>

java代码审计基础学习笔记分享(一)访问url http://localhost:8081/ekkoo 即可找到对应文件进行解析java代码审计基础学习笔记分享(一)

@WebServlet设置路由

java代码审计基础学习笔记分享(一)
image.png

生命周期

反序列化漏洞相关
java代码审计基础学习笔记分享(一)
image.png

POST方式提交参数值

public class IndexServlet extends HttpServlet {  
  
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
        System.out.println("————————POST");  
        String id = req.getParameter("id");  
        resp.setContentType("text/html; charset=UTF-8");  
        PrintWriter out =resp.getWriter();  
        out.println("这是post请求数据");  
        out.println("id: "+id+"<br>");  
        out.flush();  
        out.close();  
    }  
}

java代码审计基础学习笔记分享(一)java代码审计基础学习笔记分享(一)

数据库连接 jdbc&mybatis&hibemate

jdbc

建立连接
package com.example.demo1;  
import java.sql.*;  
import java.sql.Connection;  
import java.sql.DriverManager;  
  
public class Myselect {   //main方法前面,会抛出下面两种不同的异常 
    public static void main(String[] args) throws ClassNotFoundException, SQLException {  
        String url = "jdbc:mysql://localhost:3306/demo";  
        Connection connection = DriverManager.getConnection(url,"root","zhangyalong");  
        System.out.println(connection);  
    }  
}
java代码审计基础学习笔记分享(一)
image.png
查询&预编译&输出
package com.example.demo1;  
import java.sql.*;  
import java.sql.Connection;  
import java.sql.DriverManager;  
  
public class Myselect {  
    public static void main(String[] args) throws ClassNotFoundException, SQLException {  
        String url = "jdbc:mysql://localhost:3306/demo";  
        Connection connection = DriverManager.getConnection(url,"root","zhangyalong");  
        System.out.println(connection); //数据库正常连接  
        String sqlQuery = "SELECT * FROM user"//定义sql语句  
        Statement statement = connection.createStatement();  // 创建一个Statement对象来执行SQL查询  
        ResultSet content = statement.executeQuery(sqlQuery); //执行sql语句 将查询的内容放置ResultSet接口  
        while (content.next()) { //通过循环遍历出查询的内容  
            int userId = content.getInt("userid");  
            String username = content.getString("username");  
            String content1 = content.getString("content");  
  
            System.out.println("UserID: " + userId + "username: " + username + ", Content: " + content1);  
        }  
  
        // 关闭资源  
        content.close();  
        statement.close();  
        connection.close();  
    }  
}
java代码审计基础学习笔记分享(一)
image.png

预编译: 预编译是指在执行查询之前,将SQL查询语句编译成一个预编译语句,其中包含一个或多个参数占位符 如下的“ ?”,预编译语句允许你将查询参数化,将参数值与占位符关联,拼接的sql语句将不会被执行,提高安全性防止sql注入

// 创建一个SQL查询,使用预编译语句 
String sqlQuery = "SELECT userid, content FROM user WHERE userid = ?"
PreparedStatement preparedStatement = connection.prepareStatement(sqlQuery);

Filter过滤器

概念:

Filter被称为过滤器,过滤器实际上就是对Web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,通常都是用来拦截request进行处理的,也可以对返回的 response进行拦截处理。开发人员利用filter技术,可以实现对所有Web资源的管理,例如实现权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能java代码审计基础学习笔记分享(一)

对特定的攻击payload过滤(未授权&xss&rce...)

@WebFilter("/test")  //或者在web.xml文件内设置路由
public class XssFilter implements Filter {  
    @Override  
    //中间件启动后就自动运行  
    public void init(FilterConfig filterConfig) throws ServletException {  
        System.out.println("xss开启过滤");  
    }  
  
    @Override  
    //中间件关闭后就自动运行  
    public void destroy() {  
        System.out.println("xss销毁过滤");  
    }  
  
    @Override  
    //doFilter 访问路由触发的方法  
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {  
        System.out.println("xss正在过滤");  
        //过滤代码就应该在放行前  
        //如果符合就放行,不符合就过滤(拦截)  
        //XSS过滤 接受参数值 如果有攻击payload 就进行拦截  
        // 接受参数值 如果没有攻击payload 就进行放行  
        HttpServletRequest request= (HttpServletRequest) servletRequest;  
        String code = request.getParameter("code");  
        if(!code.contains("<script>")){ //没有攻击payload  
            //放行  
            filterChain.doFilter(servletRequest,servletResponse);  
        }else{  
            System.out.println("存在XSS攻击");  
            //继续拦截  
        }  
  
    }  
}

java代码审计基础学习笔记分享(一)过滤java代码审计基础学习笔记分享(一)

Listen监听器

概念: 监听器是Servlet规范中定义的一种特殊类

  • 用来监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件
  • 用来监听域对象的属性发生修改的事件
  • 可以在事件发生前、发生后做一些必要的处理

创建监听器

@WebListener  
public class ListenSession implements HttpSessionListener {  
 
   @Override  
   //监听器的内置方法
   public void sessionCreated(HttpSessionEvent se) {  
       //监听检测有Session创建就会执行这里  
       System.out.println("监听器监听到了session创建");  
   }  
 
   @Override  
   public void sessionDestroyed(HttpSessionEvent se) {  
       //监听检测有Session销毁就会执行这里  
       System.out.println("监听器监听到了session销毁");  
   }  
}

监听器安全场景

代码审计中分析执行逻辑触发操作,红队内存马植入,蓝队清理内存马;


原文始发于微信公众号(艾克sec):java代码审计基础学习笔记分享(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月11日18:34:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java代码审计基础学习笔记分享(一)http://cn-sec.com/archives/2026439.html

发表评论

匿名网友 填写信息