728x90
check
- 64 bit
- NX
Analyze
pseudo code
- random 변수 v5를 생성하고 일반 변수 v4의 값을 입력한 후 v4가 v5와 값이 같으면 플래그를 출력한다.
실행
>> rand 함수에 대한 이해가 필요한 문제이다.
- rand 함수
int rand(void)
:랜덤한 숫자를 반환하는 함수로, stdlib.h 헤더파일에 포함되는 함수이다. 하지만, srand함수와 time 함수 없이 rand 함수만 사용하게 되면 일정한 순서의 숫자들이 반환된다.
- srand 함수
void srand(unsigned int seed)
: 매개변수로 전달되는 seed를 이용해 rand 함수에 사용될 수를 초기화한다. 즉, seed 값에 의해 rand 함수의 결과값이 달라지는 것이다.
- time 함수
time_t time(time_t* timer)
UCT 기준 1970.01.01.0:0:0를 기준으로 경과된 시간을 초로 반환하는 함수이다. time 함수의 리턴값을 srand 함수의 인자로 주면 seed의 값이 시간마다 달라지기 때문에 따로 지정해주지 않아도 랜덤한 값이 나오게 된다.
[출처] https://blockdmask.tistory.com/308
>> random을 실행했을 때 전달되는 seed와 같은 seed를 가진 상태에서 rand()함수로 랜덤한 값을 만들어내면 같은 값이 나오게 될 것이다!!!
Exploit
//gcc -o seed seed.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand((unsigned int)time(NULL));
int key;
key = rand();
printf("%d", key);
return 0;
}
더보기
그냥 하던대로 바로 ./random을 넣어버리니까 그런 파일이 없다고 하길래 바로 nc 연결을 해야하는 것을 깨달았다...
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] Look at me (재) (0) | 2021.03.03 |
---|---|
[HackCTF] RTL core (0) | 2021.02.14 |
[HackCTF] 1996 (0) | 2021.02.13 |
[HackCTF] g++ pwn (0) | 2021.02.13 |
[HackCTF] Poet (0) | 2021.02.11 |