[免杀学习]动态链接库初探(下)
这篇文章会详细的讲述动态链接库的运行时动态链接机制,如果没有基础的师傅建议先看上篇文章《 [免杀学习]动态链接库初探(下) 》
知识点回顾上篇文章中主要讲解了动态链接类型里的加载时动态链接,与本节要讲的运行时动态链接的区别在:
理论层面加载时动态链接是在程序编译时就把对应的DLL文件加载进了程序,而运行时动态链接则是在程序运行时,也就是代码执行到了 LoadLibrary这个函数时才会把对应的DLL文件加载进程序,然后处理一下才可以使用
这里的处理指的是运行时动态链接需要通过一些额外的步骤才能开始使用DLL中的函数,而加载时动态链接则不需要额外的步骤,在导入DLL后就可以直接用函数名称来使用函数
虽然看起来运行时动态链接比加载时动态链接和静态链接在使用和理解上要难一丢丢,但是在免杀方面有很大的优势,如
运行时动态链接可以让攻击者在需要的时候才加载和调用DLL函数,而不是在程序启动时就加载所有的DLL,这样可以减少可疑的行为和被检测的风险。
运行时动态链接可以让攻击者使用API函数来获取DLL函数的地址,而不是使用导入表或者重定位表,这样可以避免被静态分析工具发现和拦截
运行时动态 ...
[免杀学习]动态链接库初探(上)
Dynamic-Link库 (动态链接库) - Win32 apps | Microsoft Learn
声明:官方文档的原文均用引用格式,其他部分为个人为了方便理解而作出的一些解释或类比
最近打CTF发现这玩意的不确定因素很多,如果不是自身非常强的想要一个不错的成绩还需天时地利人和,所以决定先退一段时间冷静一下,该学学真正扎实的技术,该系列文章旨在为免杀学习打基础
Dynamic-Link库 (动态链接库)
动态链接库 (DLL) 是一个模块,其中包含可由另一个模块 (应用程序或 DLL) 使用的函数和数据。
DLL 可以定义两种类型的函数:导出函数和内部函数。 导出的函数旨在由其他模块调用,以及从定义它们的 DLL 中调用。 内部函数通常只能从定义内部函数的 DLL 中调用。 尽管 DLL 可以导出数据,但其数据通常仅由其函数使用。 但是,没有什么可以阻止另一个模块读取或写入该地址。
DLL 提供了一种模块化应用程序的方法,以便可以更轻松地更新和重复使用其功能。 当多个应用程序同时使用相同的功能时,DLL 还有助于减少内存开销,因为尽管每个应用程序都接收自己的 DLL 数据副本 ...
[2023陕西省大学生网络安全大赛]WEB复现
环境:云演
ezpopctrl+u或者F12会闪退,在浏览器层面打开开发者工具查看源代码即可绕过这种JS小伎俩,然后挨个查找可疑的js
base64解码打开/pop3ZTgMw.php
一个很简单的pop链,但要注意有几个特殊的unicode字符会导致显示顺序的错乱,框选之后可以发现
如何找到真正的post参数呢,其实我们慢慢的框选,可以发现这段特殊的unicode符号和“快给我传参”是连在一起的,并且是覆写符号(钓鱼攻击常用,改变文字的显示顺序),其真实位置在第一个引号'和第一个p之间
对于这种掺杂着不可见字符的参数,我们可以先通过requests获取url编码后的页面源代码,然后找到第一个%27和p字母之间的位置就是这些不可见字符,在传参的时候用url编码拼接即可
完整的参数就是去掉两旁的%27中间的内容(即单引号)
POP链子很简单,有2个考点,一个是运用GC机制来提前反序列化绕过throw Error,还有就是立即调用函数的使用,文件查看器那道题我有详细说明
最后就是用file协议来绕过waf,直接读取本地文件
POP链:
12345678910 ...
[2023阿里云CTF]ezBean复现及相关fastjson机制深入分析
[2023阿里云CTF]ezBean复现及相关fastjson机制深入分析tip:环境为JDK1.8
本篇文章会讲到:
1.[2023阿里云CTF]ezBean的题目解答
2.fastjson的getter机制深入分析
3.如何利用fastjson与objectInputStream的差异化来绕过黑名单检测机制
ezbean下载源码,看控制器,只有一个路由/read,接受BASE64编码过的序列化流进行反序列化
12345678910111213141516@RestControllerpublic class IndexController { @RequestMapping("/read") public String read(@RequestParam String data) { try { byte[] bytes = Base64.getDecoder().decode(data); ByteArra ...
[GFCTF2021]文件查看器复现
考点:
1.php反序列化
2.可调用对象数组对方法的调用
3.编码转换的利用
4.php伪协议过滤器的利用
5.垃圾回收GC机制的利用
开局登录页面,输入admin,admin之后进入文件查看页面,并且扫描后发现有www.zip源码泄露
稍微探究一下,发现这个项目的设计模式很有意思
index.php
123456789101112131415161718<?php // `__autoload`在PHP 7版本之后已经被`spl_autoload_register`代替了 function __autoload($className) { include("class/".$className.".class.php"); } if(!isset($_GET['c'])){ header("location:./?c=User&m=login"); }else{ ...
[汇编学习]X64架构下打印hello World
环境:WINDOWS10 Visual Studio 2022 masm X64
X64架构不需要设置内存模型和指令集,因为X64的内存模型和指令集都是固定的。
完整代码:1234567891011121314151617181920212223242526272829303132333435; Save this file with a .asm extension.DATAhello db 'Hello, World!', 0Ah ; String followed by newline character.CODE;EXTERN WriteFile: PROCEXTERN ExitProcess: PROCEXTERN GetStdHandle: PROCmainCRTStartup PROC ; Get standard output handle sub rsp, 20h ; Allocate shadow space and space for the HANDLE mov ecx, -11 ...
免杀学习记录--C++操作注册表编写开机自启程序
先看完整版C++代码:
1234567891011121314151617181920212223242526272829303132333435363738394041#include <iostream>#include <windows.h>using namespace std;// 在注册表中设置开机自启动bool set_startup_registry(const wstring app_path) { HKEY hKey; wstring sub_key = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; wstring value_name = L"calc"; if (RegCreateKeyEx(HKEY_CURRENT_USER, sub_key.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) { ...
从一道题来看JDBC反序列化([羊城杯 2020]A Piece Of Java)
平台:NSSCTF
先把附件下载下来,审计源码,index路由是以cookie形式注册一个用户,而hello路由是通过cookie检测是否为有效用户,如果有效,则返回视图,并把相关信息info显示在页面中
因为cookie是认证的唯一凭据,所以我们可以不管index,直接在cookie中写好我们自己的cookie然后访问hello
12345678910111213@GetMapping({"/hello"}) public String hello(@CookieValue(value = "data",required = false) String cookieData, Model model) { if (cookieData != null && !cookieData.equals("")) { Info info = (Info)this.deserialize(cookieData); if ...
超详细的一步步搭建用于JDBC反序列化的恶意Mysql服务
这一篇文章主要是对上一篇 从一道题来看JDBC反序列化([羊城杯 2020]A Piece Of Java) 的补充(强烈建议先看上一篇),因为在那篇文章我们只分析和复现了JDBC反序列化漏洞的利用,而为了摆脱脚本小子的debuff,我们肯定也需要自己来写构建恶意MYSQL服务的脚本
感谢其他师傅写的相关的文章,本篇文章也可以当做是对其他师傅对于JDBC反序列化漏洞相关文章的一些补充,作者会尽可能详细地写出坑点和非大牛的师傅不太理解,却是大牛师傅们跳过的一些细节
JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的一种标准API。它允许Java程序与多种关系型数据库建立连接,实现数据的查询、插入、更新和删除等操作。
先回顾一下JDBC和MYSQL的通信过程:
加载驱动:首先,需要加载JDBC驱动程序。在Java中,可以使用Class.forName()方法加载驱动类。对于MySQL,驱动类通常是com.mysql.cj.jdbc.Driver。
1Class.forName("com.mysql.cj.jdbc.Drive ...
大数阶乘算法
例题讲解算法与设计 第三章 【例题9】 P79C++版完整代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include <iostream>#include <cmath>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) { long a[256],b,d; int m,n,i,j,r; cin>>n; m=log(n)*n/6+2; a[1]=1; for(i=2;i<=n;i=i+1){ a[i]=0; } d=0; for ...