2.3k2 分钟

# 1. 程序分析 32 位程序,开启 NX 源程序: main: cint __cdecl main(int argc, const char **argv, const char **envp){ vul_function(); puts("GoodBye!"); return 0;}vul_function: cssize_t vul_function(){ size_t v0; // eax size_t v1; // eax char buf[24]; &#
3.8k3 分钟

内容参考了《CTF 竞赛权威指南 Pwn 篇》 # 一、计算机中的整数 计算机中整数通常分为两种,一种为有符号整数,另一种为无符号整数 c 数据类型 c//32 位 最小值~最大值 [signed] char -128 ~ 127unsigned char 0 ~ 255short
8531 分钟

# 1. 查看程序信息 32 位程序,保护几乎都没开启 查看 vuln 函数,发现 v0 为 eax (不过没什么用),查看一下汇编 发现有个后门函数可以读取 flag 文件 利用栈溢出返回到该地址即可 # 2.exp: nfrom pwn import *from LibcSearcher import *#context.log_level = 'debug'context(os='linux', arch='amd64', log_level='debug')p=
6811 分钟

# 1. 分析程序 64 位程序,开启了 NX 发现 case 1 中有后门函数,利用 strcat 函数进行拼接,那么我们就可以通过指令的连续执行来获取 flag 通过 ; 符合就可以分隔连续执行 linux 命令,那么我们只需要输入 ; cat flag 就能得到 flag # 2.exp (其实完全不需要,直接 nc 连接就可以): nfrom pwn import *from LibcSearcher import *context(os='linux', arch='amd64', log_level=&
2.9k3 分钟

# 1.ret2text 64 位程序,开启了 NX,明显的栈溢出 有后门字符串 点进去,然后按住 "ctrl +x" 转移到后门函数 要执行 execve ("/bin/sh",0,0) 直接利用 exp: nfrom pwn import *from LibcSearcher import *context(os='linux', arch='amd64', log_level='debug')p=process('./
9241 分钟

# 环境(一般情况下不会变动) Ubuntu22.10 glibc:2.36-0ubuntu4 # 1. 程序源代码 c#include<stdio.h>#include<string.h>void validate_passwd(char *passwd)&#123; char passwd_buf[11]; unsigned char passwd_len =strlen(passwd); if(passwd_len>=4&&passwd_len<&#
12k11 分钟

# 1.java GUI 编程(基于 swing 组件) # 1. 首先要创建顶层容器,通常使用 JFrame 首先要创建 JFrame 对象 头文件: aimport javax.swing.*;实例化 JFrame 类: aJFrame root =new JFrame(); // 默认没有标题 JFrame root =new JFrame("求平方根");// 标题为 “求平方根”此时已经实例化对象,但是框架窗口默认不可见,需要手动设置: aroot.setVisible(true); /&
1.4k1 分钟

# 1. 分析程序 32 位程序没有开启 NX 和 pie ida 查看一下 发现 vuln 函数可以进行溢出,但是没有发现后门函数,所以我们利用 ret2libc 呃。。。 利用 ret2libc 没有打通,换个方式利用 DynELF # 2. 利用 DynELF 构造 leak 函数 ndef leak(add): #add 为想泄露的函数地址 payload=b"a"*140+p32(write_plt)+p32(vuln)+p32(1)+p32(add)+p32(0x100) p.sendline(payload) fun_add
1.1k1 分钟

# 1. 查看程序信息 64 位程序,发现开启了 PIE 利用 ida 查看一下 发现转 c 语言失败,那就分析汇编 可以看到 buf 有 0x410 的大小,而输入只有 0x400,无法溢出 # 2. 分析汇编 这里解释汇编代码的含义 首先要了解 jg 命令的含义 jg:比较结果是">"则跳转,所以我们需要查看前面的 cmp的比较结果 read 函数的返回值是输入值的大小并且会保存到 eax 中 输入 shellcode 后会满足长度判断,使跳转到 loc_11D6 LEA 指令的作用是取 opera2 的地址,然后把这个地址赋给 opera1 lea