CHOP初探
在2024羊城杯遇见一道利用到C++异常处理的题目,以下对该题目作出探讨
CHOPCHOP全称Catch Handler Oriented Programming,通过扰乱unwinder来实现程序流劫持的效果
由于C++终止语义,在引发异常点之后的任意代码都不会被执行,故往往可以利用存在异常控制流的代码处控制该函数返回地址为其他的可执行函数的代码来实现攻击,绕过类似于Canary和Shadow stacks等backward-edge保护机制
易受攻击的代码序列如下:
常见攻击手法堆栈布局如下:
logger基于此题,经过审计,我们先通过函数 sub_4015AB()存在的 off by null 漏洞修改 src 为 b'/bin/sh\x00',
同时发现函数 sub_40178A() 中 buf 存在栈溢出漏洞,故构造 payload 覆盖 rbp 和 ret 返回地址:
这里详细列出异常处理执行流程及程序中异常处理相关代码:
触发异常:首先使用 _cxa_allocate_exception 初始化异常,然后通过 __cxa_throw 抛出该异 ...
PWN WriteUp
常见函数read函数ssize_t read(int fd, void *buf, size_t count);
fd:文件描述符,指明从哪个文件或设备读取数据。
buf:指向缓冲区的指针,这个缓冲区用于存储从文件描述符读取的数据。
count:要读取的最大字节数。
返回值是实际读取的字节数;如果文件结束,则返回 0;如果发生错误,则返回 -1。
write函数ssize_t write(int fd, const void *buf, size_t count);
fd:文件描述符,指明向哪个文件或设备写入数据。
buf:指向含有要写入数据的缓冲区的指针。
count:要写入的字节数。
返回值是实际写入的字节数;如果发生错误,则返回 -1。
puts函数int puts(const char *s);
返回值是一个非负整数,表示成功;如果发生错误,则返回 EOF。
关ASLR随机化
1echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Buuctfpwn1_sctf_20161char s[32]; // [esp+1C ...
GZCTF部署教程
GZCTF-QUICK-DEPLOY一键化GZCTF部署脚本,如有帮助,还望各位大佬不吝点个star✨:https://github.com/Cyr1s-dev/GZCTF-QUICK-DEPLOY
Docker更新软件包索引:
12sudo apt-get updatesudo apt-get upgrade
安装 Docker:
1sudo apt install docker.io docker-compose
Vim1sudo apt install vim
GZCTF配置创建文件夹:
12mkdir GZCTFcd GZCTF
创建配置文件:
12sudo touch appsettings.jsonsudo touch docker-compose.yml
将以下内容保存为 appsettings.json 文件,并替换为你的初始化参数,具体配置说明请参考 appsettings.json 配置。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484 ...
吾爱破解 2024 春节题目
Windows 初级题比较输入字符串长度,如果等于36,就循环进行判断,否则退出程序:
1if ( v34 == 36 )
比较输入字符串与v9中的字符串:
12if ( *v10 != *v9 ) break;
在此处打断点,运行程序,输入长度为36的字符串之后,查看v9中存储的字符串即为flag
1fl@g{H@ppy_N3w_e@r!2o24!Fighting!!!}
Android 初级题手动通关或者解包找视频获得flag
1flag{happy_new_year_2024}
Android 初级题WishActivity中FlagActivity是关键:
1wishActivity.startActivity(new Intent(wishActivity, FlagActivity.class));
FlagActivity代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243ackage com.kbtx.redpack ...
第一届PKU HPCGame WriteUp
A. 欢迎参赛!签到
B. 流量席卷小土豆{“password”:”de3e27056bde306b803cc5602f4cde9d464912330b4562ae163bd21e23495bcd”,”job_id”:”6437”}
首先尝试8nodes 8tasks未能得分
12Point 0: msg: job was not run with 4 nodes, 4 tasks per node
使用4nodes 4tasks得到point 0分数:
12Point 0: msg: job was run with 4 nodes, 4 tasks per node by user `hu_y68lstwp8s7q`
ssh 登录在 shell 直接执行会因为爆内存被 kill
123** (process:1206968): WARNING **: 21:52:42.121: Dissector bug, protocol VNC, in packet 2094662: Adding vnc.hextile_anysubrects would put more than 10 ...
Wordpress部署教程
Wordpress DockerDocker基础镜像
123docker pull wordpressdocker pull mysql:5.7docker pull jc21/nginx-proxy-manager
创建网络:
1docker network create metaweb
创建数据库镜像:
1docker run --name mysq157 --net metaweb -e MYSQL_ROOT_PASSWORD=密码 -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci
数据库创建用户(这里设置的是WP的数据库账户和密码):
1234567891011docker exec -it mysq157 bashmysql -uroot -pcreate database wp;create user wp identified by "密码";grant all on wp.* to wp;exit
创建文件夹:
12345cd /home/mkdir ...
经典非对称加密算法:RSA
单向函数(One-way Function)
对于每一个输入,函数值都容易计算(多项式时间);但是对于一个随机的函数值,算出其对应的输入却比较困难(无法在多项式时间内使用确定性图灵机计算)。
最简单的单向函数是取模运算:m mod n = a
例如 11 mod 2 = 1 ,根据输入的数据11很容易知道输出结果是1,但是根据输出结果1无法知道输入数据是什么
m 作为原文,n 作为公开的密钥,a 作为加密后的密文 —— 即使我们拿到了密钥也无法解密,因为这是不可逆的
密码学的新方向 —— 单向陷门函数(One-way Trapdoor Function)
单项陷门函数是有一个陷门的一类特殊单向函数。单项陷门函数包含两个明显特征:一是单向性,二是存在陷门。
单向函数存在 bug(陷门)吗?即可以实现单向函数的逆推。如果存在一种单向算法存在陷门,那么可以将这个算法称为单向陷门函数(One-way Trapdoor Function)
在1976年 W. Diffie 和 M. Hellman 提出了这样的美好设想:
信息的接收者提前生成两个密钥,将一个单项陷门函数作为加密密钥 ...






