查看发现是64位文件,且看到了amd64-64-little(这里是小端序)
所以我们要反向输入
对于整数 0x12345678,在小端序存储下的内存布局为:
地址 | 内容 |
低地址 | 0x78 |
0x56 | |
0x34 | |
高地址 | 0x12 |
查看main函数,发现了%d%d标准输入读取
if ( !strncmp("MikatoNB", s2, 8uLL) )
strncmp函数用于比较两个字符串的前
n
个字符。这里检查s2
的前 8 个字符是否与字符串"
MikatoNB"
完全相同。如果相同,则条件成立进入 if 语句块,得到后门
在这里下个断点
使用x/gx得到0x4008a9中的值
exp:
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.anna.nssctf.cn','28385')
p1 = 0x424e6f74
p2 = 0x616b694d
io.sendline(str(p2))
io.sendline(str(p1))
io.interactive()
得到了flag