혜랑's STORY

[HackCTF] Random key 풀이 본문

2021 SISS 21기 활동/여름방학 System

[HackCTF] Random key 풀이

hyerang0125 2021. 7. 31. 14:45

checksec

64 bit 바이너리 파일이고, NX가 걸려있다.


IDA

  • rand() 함수가 사용되어 v5값이 실행될 때마다 바뀌는 것 같다.
  • 그런데 아래 if문을 보면 v5와 v4값이 같아야 flag를 출력할 수 있다.
  • 즉, 랜덤으로 생성되어 v5에 저장될 때 v4에도 저장되어야 할 것 같다.

Exploit method

  • rand() 함수의 값과 같은 값을 입력하는 방법을 검색해 보았더니, 동적라이브러리로 rand함수와 똑같은 코드를 작성하고 .so 파일을 만들어서 import 시키면 같은 값을 가져올 수 있다고 한다.
time.c 코드 작성
gcc -shared -o time.so -fPIC time.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int solve();

int solve(){
	srand(time(NULL));
    int solve = rand();
    return solve;
}
  • .so 파일을 추가할 때 ctypes 모듈이 필요하다고 한다.

Code

from pwn import *
from ctypes import *

p = remote('ctf.j0n9hyun.xyz', 3014)
so = CDLL('./time.so')

random_key = so.solve()

p.recvuntil(" : ")
p.sendline(str(random_key))

p.interactive()

 

'2021 SISS 21기 활동 > 여름방학 System' 카테고리의 다른 글

[pwnable.xyz] add  (0) 2021.08.07
[pwnable.xyz] sub  (1) 2021.08.06
[HackCTF] RTC 풀이  (0) 2021.07.31
baby1 풀이  (0) 2021.07.24
[Lazenca] Return-to-csu(feat.Return-to-vuln, Just-In-Time Code Reuse) - x64  (0) 2021.07.23