일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Dynamic Analysis
- Reversing
- seccomp
- master canary
- vtable
- _IO_FILE
- Lazenca
- malware
- heap feng shui
- GOT overwrite
- __environ
- UAF
- shellcode
- K-shield Junior
- DFC 2022
- srop
- RTL
- _IO_FILE Arbitrary Address Write
- heap
- DreamHack
- 나뭇잎 책
- ROP
- heap exploit
- BOF
- HackCTF
- Android
- H4CKING GAME
- _IO_FILE Arbitrary Address Read
- tcache
- DFB
Archives
- Today
- Total
Studying Security
[HackCTF] pwnable: Random Key 풀이 본문
728x90
반응형
Mitigation
Vulnerability Analysis
IDA disassembler로 main함수를 살펴보자
time(NULL)을 seed를 주고 random한 값을 생성하고 있다.
Input Key를 입력하고 이 값이 생성한 random 값과 일치하면 flag를 보여주는 그런 파일인데
random한 값을 어떻게 맞출 수 있을까...?
로컬과 해당 서버가 같은 seed 값을 가지고 random한 값을 생성한다면 같은 random 값을 얻을 수 있을 것이다.
이를 해결하기 위해 ";"라는 다중 명령어를 사용하면 된다
난수 생성 프로그램 ; nc ctf.j0n9hyun.xyz 3014
난수 생성프로그램과 서버 접속을 동시에 하도록해서 생성된 random 값을 적어주면 원하는 flag를 얻을 수 있을 것이다.
Exploit code
local_random.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(NULL));
printf("%d\n",rand());
return 0;
}
Result
새로 접한 사실
";" 라는 명령어 하나의 명령어 라인에서 여러 개의 명령을 실행하게 해준다.
이를 이용해 time(NULL) seed에 대해 로컬 프로그램과 서버 접속을 동시에 수행함으로써 같은 seed를 주도록 만들어 서버 난수와 같은 난수를 얻을 수 있음
반응형
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] pwnable: SysROP 풀이 (0) | 2022.04.15 |
---|---|
[HackCTF] pwnable: Unexploitable #2 풀이 (0) | 2022.04.13 |
[HackCTF] pwnable: RTC 풀이 (0) | 2022.04.12 |
[HackCTF] pwnable: Unexploitable #1 풀이 (0) | 2022.04.12 |
[HackCTF] pwnable: You are silver 풀이 (0) | 2022.04.12 |
Comments