# pseudo code
프로그램 실행마다 생성되는 난수와 입력 값이 같으면 flag를 출력해주는 간단한 문제이다.
# process
난수를 어떻게 생성할까.
프로그램 실행 시 한 번만 입력받으므로 익스 코드 내에서는 불가능하다.
따라서 따로 난수 프로그램을 만들어서 입력으로 줘야한다.
1. 파이프 사용 : c 파일의 표준출력(난수)을 서버의 표준입력으로 준다.
2. 난수를 생성하는 c 코드 파일을 so 파일로 만들어서 ctype으로 파이썬에 import 하는 방법
3. 파이썬 내에서 ctypes 모듈을 불러와서 난수를 생성한다.
1번 방법 사용
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main(){
srand(time(0));
printf("%d\n", rand());
}
컴파일해서 rand라는 실행파일 생성
# exploit
(3번 방법 익스코드)
#!/usr/bin/python
from pwn import *
from ctypes import *
r = CDLL("/lib/x86_64-linux-gnu/libc.so.6")
#p = process("./random")
p = remote("ctf.j0n9hyun.xyz", 3014)
r.srand(r.time(0))
guess = r.rand()
p.sendline(str(guess))
p.interactive()
$ ./rand | nc ctf.j0n8hyun.xyz 3014
[HackCTF] Unexploitable #1 (0) | 2020.01.19 |
---|---|
[HackCTF] UAF (0) | 2020.01.19 |
[HackCTF] ROP (3) | 2020.01.16 |
[HackCTF] pwning (0) | 2020.01.15 |
[HackCTF] Gift (0) | 2020.01.12 |