去翻了翻别人WP发现用了这个site去找libc:https://libc.nullbyte.cat/,我尝试用拿到的libc中write的地址去检索了几次,由于ASLR每次检索结果都不尽相同,甚至可能没法检索到正确的libc,最后用了别人找到的libc的偏移量才完成: frompwnimport*fromLibcSearcherimport*context.log_level="debug"elf=ELF("./pwn-200")...
frompwnimport* io = remote('111.198.29.45','39532')#io = process('./pwn200')#context.log_level= 'debug'elf = ELF('./pwn200') ppp_r =0x80485cdread_got = elf.got['read'] read_plt = elf.plt['read'] main_addr =0x80484bestart_addr =0x80483d0write_plt = elf.plt['write']...
拖进IDA64 查看,点击左侧main,F5 查看反编译代码,发现其中返回一个vulnerable_function脆弱的函数: 点击查看,发现函数功能是往一个最多 128 字节的 buf 内读入最多0x200即 512 个字节,根据上一题经验我们可以往 高地址( buf\space下方) 修改我们需要的数据。 由于buf 是局部变量,所以系统会将其存储在栈内。我...
第一题:level0 通过观察程序代码,发现这是一个64位Linux可执行程序,调用了有漏洞的函数。该函数直接读取0x200个字符,但栈空间只有0x80个字符,从而形成缓冲区溢出。利用CTF工具PwnTools,通过缓冲区溢出覆盖调用callsystem函数的地址,从而获得shell控制。第二题:when_did_you_born 程序同样是一个64位...
栈溢出加ROP,输入逻辑如下: 输入逻辑为从标准输入流严格读入200个字节,因此输入的时候不能sendline,需要限制字节数。调试得到偏移量,剩下的就是做ret2libc了...
攻防世界-PWN-高手进阶区-难度3到4-全部题解 发表于: 2021-6-12 02:00 19051 通过攻防世界的一些入门难度的题目来学习最基本的漏洞利用技巧,以及提高代码审计的能力。传送门:https://adworld.xctf.org.cn/task/task_list?type=pwn&number=2&grade=1 总结可能用到的知识点: 放上我常用的做题模板: 需要打...
write(1, "Hello, World\n", 0xDuLL); return vulnerable_function(); } // 跳转到vulnerable_function() ssize_t vulnerable_function() { char buf; // [rsp+0h] [rbp-80h] return read(0, &buf, 0x200uLL); } // 显然我们可以看到有一个read函数,既可任意读取。双击buf进入 // 很显然可以看...
攻防世界pwn200 因为学校放假再加上回家学车,学习进度耽搁一段时间。算了废话少说 来看题 用ida分析 发现与之前做的level3极其相似 但是没有给libc库,所以我们得安装LibcSearcher这个能根据你所给的函数来计算libc的版本,进而得到system和bin_sh的地址 这里是准备工作 这里是获取pwn200文件中的有用地址 这里通过...
基于上道题(stack2),我总结些GDB的使用。 运行下面的脚本(不要在vscode里面运行,会调用gdb失败) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 deff(addr, data): p.sendlineafter('5. exit','3') ...
基于上道题(stack2),我总结些GDB的使用。 运行下面的脚本(不要在vscode里面运行,会调用gdb失败) deff(addr, data):p.sendlineafter('5. exit','3') p.sendlineafter('which number to change:', str(addr)) p.sendlineafter('new number:', str(data))frompwnimport* ...