1.ç¨JAVAå¦ä½ç®åº24ç¹?源码
2.fastjson 1.2.24源码分析以及漏洞复现
3.24行代码完成批量缩星
4.24.org-mode 导出宏:org-macro
ç¨JAVAå¦ä½ç®åº24ç¹?
ç¹çæºä»£ç ,å 该å¯ä»¥è®¡ç®åº4åè¿ç® public class TestPoint{ public static void main(String[] args){ int index = 0 ; int temp = 0 ; int totalSUC = 0 ; int numb[] = new int[4];//the first four numbers double num[][] = new double[][3];//three numbers after calculating double total[] = new double[6];//the number after three steps of calculating double p[][] = new double[6][8]; double q[][] = new double[3][7]; //System.out.println(%); //System.out.println(/); System.out.println("\"a--b\"means\"b-a\""); System.out.println("\"a//b\"means\"b/a\"\n"); /* for(int h = 0; h <= 9; h ++)//Get the first four numbers for calculating and store into the array numb[4]; for(int i = 0; i <= 9; i ++) for(int j = 0; j <= 9; j ++) for(int k = 0; k <= 9; k ++){ numb[0] = h ; numb[1] = i ; numb[2] = j ; numb[3] = k ; }*/ for(int i = 0 ; i < 4 ; i ++){ numb = Integer.parseInt(args); } for(int i = 0; i < 3; i ++)//Get two of the four to calculate and then store the new number into the array p; for(int j = i + 1; j < 4 ; j ++,temp ++){ p[temp][0] = numb + numb[j]; p[temp][1] = numb - numb[j]; p[temp][2] = numb[j] - numb; p[temp][3] = numb * numb[j]; if(numb[j] != 0) p[temp][4] = numb / (double)numb[j]; else p[temp][4] = ; if(numb != 0) p[temp][5] = numb[j] / (double)numb; else p[temp][5] = ;
fastjson 1.2.源码分析以及漏洞复现
反序列化,这个过程将字节序列恢复为Java对象。源码例如在使用Python做自动化测试时,源码通过字符串名字调用相同名字的源码方法。Fastjson的源码功能允许通过字符串引用如`@type":"com.sun.rowset.JdbcRowSetImpl`来执行内部方法。由此,源码阅读源码spring我们能利用Fastjson提供的源码便利,通过调用对应的源码函数来验证漏洞。
在渗透测试中,源码漏洞的源码验证通常需要满足几个条件:判断指纹和指纹回显,Fastjson的源码特性使得这一步变得简单。然而,源码在利用过程中,源码要考虑到Fastjson本身的源码限制、JDK的源码限制以及可能的安全配置限制。因此,POC验证方案需考虑这些限制的版本和配置。
Fastjson通过JSON抽象类实现JSONAware接口,并提供两个常用方法:`toJSONString`用于对象转换为JsonString,`parseObject`用于将JSON字符串转换为对象。这次的漏洞主要与反序列化相关。
反序列化的极速狂飙8源码执行发生在`DefaultJSONParser.java`类中。关键代码中,固定键`@type`对应反序列化类的全路径,其中`typeName`为传入类的全路径。在Fastjson 1.2.版本中,`loadClass`方法未进行任何过滤,允许传入任何JVM加载的类,并执行`setKey`方法,其中Key为可变参数。
要利用这个反序列化漏洞,需要满足以下条件:JVM加载的类、有非静态set方法和传入一个参数。使用RPC远程执行代码的思路实现POC,此处使用了`com.sun.rowset.JdbcRowSetImpl`实现。
JNDI全称为Java Naming and Directory Interface,主要提供应用程序资源命名与目录服务。其底层实现之一是RMI(Remote Method Invocation),用于Java环境的远程方法调用。在`com.sun.rowset.JdbcRowSetImpl`类中,关注点在于`getDataSourceName()`和`setAutoCommit()`方法。`getDataSourceName()`用于传值,`setAutoCommit()`用于确认调用set方法。ris强弱指标源码
实现过程包括引用`com.sun.rowset.JdbcRowSetImpl`类、设置`dataSourceName`传值以及通过`autoCommit`属性触发执行方法。完成方法确认后,使用`marshalsec`项目启动RMI服务并加载远程类。
POC的实现步骤如下:首先确认目标是否使用Fastjson且存在漏洞;利用Fastjson的反序列化功能传输引用类和执行方法;使用`com.sun.rowset.JdbcRowSetImpl`执行验证POC的脚本,并观察回显结果;最后,完成漏洞利用。
具体操作包括搭建环境,如使用CentOS虚拟机作为RMI服务器和远程调用服务,KALI机器作为靶机和抓包测试。进行指纹确认、安装maven、构建RMI服务器和客户端、调用测试文件,并观察DNS日志以验证漏洞成功利用。通过DNS日志确认漏洞利用成功后,可以进一步尝试反弹shell,实现远程控制。
综上所述,Fastjson的反序列化漏洞是一个可以被利用的安全问题,通过合理的ai训练游戏源码利用,可以实现远程代码执行。了解和研究这类漏洞有助于增强对Fastjson以及类似技术的防御能力。
行代码完成批量缩星
在星空摄影中,处理大量照片以制作延时视频时,缩星成为了一项挑战。手动在PS中逐一操作或自编图像处理动作,耗时且效率低。本文提供了一种编程解决方案,利用免费工具starnet++ V2批量处理,实现快速批量缩星。
starnet++ V2能有效去除TIFF格式中的星星,只需调用程序即可实现批量操作。对于配备英伟达GPU的电脑,通过CUDA接口加速处理,可显著提升效率,显卡下速度提升可达5至6倍。
在使用代码前,请确保已下载并安装starnet++ V2(官网下载window 位版本),并将其放置于C盘特定目录。
附源代码(代码由AI自动生成),以下为使用方法概述:
首先将包含照片的python源码之家网站文件夹命名为output,然后运行脚本nostar.py。脚本将自动处理output文件夹中的所有TIFF文件,将去星后的保存到output/starless目录下,无需人工干预。
处理效果显著,TIFF格式大小约为M,去星过程大约需要2分钟,此阶段主要利用CPU资源。若拥有英伟达显卡,可参考专门网页了解GPU加速方法。
最终成果如下,显示批量处理后的效果。
使用本文提供的方法,星空照片的缩星效率得到极大提升,尤其对处理大量时尤为明显。通过合理利用GPU资源,进一步加速了处理过程,提高了工作效率。值得注意的是,英伟达的CUDA库体积庞大,可能需要手动下载某些dll文件,以确保程序正常运行。
.org-mode 导出宏:org-macro
本文探讨了 org-mode 中的宏(org-macro)功能,以及其在导出过程中是如何被实现和应用的。在阅读 org manual 的 .9 节时,作者意外发现 org-macro 的功能,进而记录了这一过程。本文将详细介绍 org-macro 的使用场景和实现方式。
在 org-mode 文档中,宏被描述为在导出过程的初始阶段被展开。通过阅读相关源代码和文档,可以发现整个导出过程包括预处理、宏展开、解析和输出四个阶段。
为了准确理解导出过程,可以查阅 ox.el 文件中的 org-export-as 函数。在 Emacs .2 中,此函数位于 ox.el 的 行至 行之间。其中关键步骤包括处理 narrow 和 region、执行 org-export-before-processing-hook、展开 include 关键字、宏初始化和替换、处理 babel 代码块、执行 org-export-before-parsing-hook、解析以及从树结构到输出的转换。
宏的实现涉及宏定义生成、模板生成和宏展开两个阶段。宏定义可以采用正则替换或 Elisp 函数实现,而 org-macro--makeargs 和 org-macro--set-templates 是生成参数表和模板的关键函数。宏的使用相对宽容,参数个数超限或不足也不会影响正常运行。
宏定义通过#+MACRO: 关键字在文件中实现,并且 org-macro 会从文件中收集宏定义,包括通过#+SETUPFILE: 引入的文件中的宏。收集宏定义的过程是有序的,即宏定义的位置越靠后,其在宏列表中的位置也越靠后。同时,org-macro 会处理预定义宏,如 author、email、title 和 date,并通过文件或 SETUPFILE 获取值。
宏初始化过程通过 org-macro-initialize-templates 函数实现,该函数调用 org-macro--collect-macros 收集宏定义,并使用 org-macro--set-templates 对其进行转换。此外,文件中的宏具有更高的优先级,而 org-export-global-macros 可用于定义全局宏。
宏展开发生在 org-export-as 函数中,通过 org-macro-replace-all 函数进行。此函数遍历文档,匹配宏调用并展开。宏展开遵循一定的规则,包括宏的命名规则、处理注释、获取环境信息以及展开过程。宏展开时,宏定义顺序影响优先级,且文本宏使用正则表达式替换,函数宏调用函数参数。
宏可以应用于多个位置,包括段落、标题、VERSE块、表格、列表、关键字以及某些后端特定的位置。此外,宏还可以在属性中使用。宏功能的使用示例包括无参宏、带参文本宏、带参数的函数宏、使用 Babel 进行复杂操作,以及使用宏定义标签。
org-macro 提供了 个默认宏,包括 title、author、email、date、keyword、time、modification-time、input-file、property 和 n,分别用于表示标题、作者、邮箱、日期、关键字收集、文件导出时间、文件修改时间、文件名、属性查询和计数器功能。
总的来说,org-mode 的宏功能提供了强大的灵活性和自定义性,能够简化文档导出过程中的重复工作,提高工作效率。通过理解宏的实现和应用,用户可以更有效地利用 org-mode 的功能,优化组织和管理文档的过程。