일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- System
- 운영체제
- Spring
- PWN
- webhacking
- Operating System
- 해킹
- Pwnable.kr
- stack overflow
- system hacking
- wargame
- Lord of BOF
- LOB
- 정보보안기사
- 네트워크
- pwnable
- webhacking.kr
- Shell code
- 웹해킹
- Spring MVC
- Payload
- hacking
- Spring Framework
- 정보처리기사 실기
- 정보보안기사 실기
- BOF
- Buffer Overflow
- 워게임
- SQL
- OS
- Today
- Total
DongDD's IT
[pwnable.kr] random 본문
[pwnable.kr] random
Problem
random value를 프로그래밍에 사용하는 방법을 배웠다고 되어있었다.
random과 관련된 프로그래밍이 되어있을 것 같았다.
먼저 ssh를 통해 접속해보았다.
ssh를 통해 접속하니 flag파일과 random 실행 파일, random.c 소스 코드 파일이 있었다.
먼저 소스 코드를 확인해보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; } | cs |
소스 코드는 간단한 형태로 되어있었다. 먼저 random 변수를 선언하고 random에 rand()함수를 통해 random값을 생성해 넣는다. 그 후에 key값을 stdin으로 입력받고 입력받은 key값과 앞에서 rand()함수를 통해 생성한 random 값이 들어간 random과 xor을 해서 이 값이 0xdeadbeef라면 if문으로 들어가 flag를 출력해주는 방식으로 되어있었다.
Solution
이 문제는 rand() 함수의 취약점을 이용하면 쉽게 해결할 수 있다. 단순히 rand()함수만 사용하게 되면 프로그램을 실행한 후 rand()함수가 생성하는 random()값이 일정하게 된다. seed를 사용하지 않으면 이런 현상이 나타나고 이 점을 이용해 gdb를 통해 처음 생성되는 random 값을 확인하고 이 값을 이용하면 된다.
gdb를 통해 random 변수가 들어간 위치를 확인하고 rand()함수가 실행된 이후에 들어가는 값을 확인해보았다.
random에 들어가는 값이 0x6b8b4567로 고정되어있는 것을 확인할 수 있었다.
이 값을 이용해 넣어야 할 key값을 구할 수 있었다.
0xdeadbeef = key ^ random
key = 0xdeadbeef ^ random(0x6b8b4567)
이렇게 key값을 구한 후 프로그램을 실행하고 10진수로 key값을 넣어주니 flag를 획득할 수 있었다.
************** Answer & Flag **************
0xdeadbeef ^ 0x6b8b4567 = 3039230856
key = 3039230856
Flag : Mommy, I thought libc random is unpredictable...
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] leg (0) | 2018.06.10 |
---|---|
[pwnable.kr] input (0) | 2018.04.19 |
[pwnable.kr]passcode (0) | 2018.03.28 |
[pwnable.kr] flag (0) | 2018.03.09 |
[pwnable.kr] bof (0) | 2018.03.07 |