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
2.7k2 分钟

# 1. 查看程序 32 位程序,没有开启 NX,初步认为可以利用 shellcode ida 查看 看到有一个 orw_seccomp() , seccomp函数 是一个沙盒机制 进去查看(关于沙盒详情见文章 沙盒机制 ) 利用工具 seccomp-tools 查看具体过滤情况, 使用命令 seccomp-tools dump ./orw 看到我们可以使用 open/read/write 函数,可以写入执行这几个的函数的 shellcode 来读取 flag 通过 open 打开 flag 文件 利用 read 读取 flag 到某一
3.1k3 分钟

# 1.Linux 执行多个命令(shell 命令) l#逐条执行命令echo 1; echo 2; echo 3 #即使命令执行错误也不影响后面的命令继续执行#前面的成功执行后面才执行echo 1 && echoo 2 && echo 3 && echo 4 #2 出错,不会执行 echo3 ,echo4#前一条命令失败然后才继续执行后面的命令echo 1 || echo 2 || echo 3 || echo 4 #当第一个执行成功时,后面的就都不会执行;当第一个命令失败时,就开始执行 echo2,后面同理#混合使用分隔符echo 1 |
7381 分钟

# 1. 查看程序 查看程序开启的保护 32 位程序,没有开启 NX,猜测可以使用 shellcode 利用 ida 反汇编 主函数 init():输出图形 vulnerable () :可以进行溢出,但是溢出范围很小 发现有后门命令在 shell 函数里 直接溢出执行该命令即可 # exp nfrom pwn import *from LibcSearcher import *context.log_level = 'debug'#p=process('./wustctf2020_getshell')p=
1.2k1 分钟

# 此处用于记录在编写脚本中对程序的调试 因为有时要输入不可见字符,导致我们没办法进行直接在 gdb 内调试,所以需要相应的在脚本中调试 # 1. 调试方法: ngdb.attach(p,"b *断点地址")payload=""pause() #第一个 pausep.sendline()pause() #第二个 pause此处的重点就是在发送 payload 前加入 gdb.attach(p) 和 pause() ,发送 payload 后加入 pause() ,然后在产生的新终端内设置断点(也可以在前面直接设置断点: gdb.att
2.1k2 分钟

# 1. 查看程序 发现没有开启 NX,有 rwx 段,可以利用 shellcode 利用 ida 查看 因为要写入 shellcode 并执行,所以我们需要利用栈溢出 chall 函数里的 fget 因为大小限制为 1024(0x400),所以我们无法溢出,但是,该函数末尾有个 vuln(s,0x400),里面的 memcpy 函数会将 s,复制给 dest,且有 0x400 的大小可以进行溢出。 我们需要绕过 strcmp(s,crashme) , 可以利用 \x00 截断 # 2. 漏洞利用 我们通过执行 shellcode 来 getshell,通过 vuln 函数中的 mem