일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- element 조회
- object
- 조건문
- python
- burp suite
- 백준 알고리즘
- htmlspecialchars
- 메소드
- document
- 자바스크립트
- 파이썬
- IF문
- property
- 포인터
- 배열
- 백준 파이썬
- Pwndbg
- jQuery
- github
- 함수
- 객체
- suninatas 풀이
- 사칙연산
- xss game
- lord of sql injection
- window
- 김성엽 대표님
- xss game 풀이
- sql injection
- blind sql injection
Archives
- Today
- Total
power-girl0-0
[pwnable] random 풀이 본문
728x90
안녕하세용(. ❛ ᴗ ❛.)
1. 문제
바이너리 파일과 c코드가 주어진다.
아래는 c코드이다.
#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;
}
2. 풀이
문제 코드를 확인해보면, 랜덤함수인 rand( )를 사용하는데 난수값을 설정하지 않았다.
이는 프로그램이 실행될 때마다 랜덤값이 같다는 것을 예측할 수 있다.
(이해가 되지 않는다면, rand함수에 대해 공부하고 오는 것을 추천한다. )
따라서, 프로그램이 실행되었을 때의 랜덤값을 알아내면 된다.
필자는 gdb를 통해서, 랜덤값을 확인하였다.
랜덤값을 구했으니, key값을 구해보자!
문제 코드 10줄을 보면, key와 랜덤값을 xor해서 0xdeadbeef 값이 나오면 flag를 얻을 수 있다.
즉, 반대로 랜덤값과 0xdeadbeef값을 xor하면 key값을 구할 수 있다는 의미이다.
랜덤값 1804289383를 hex값으로 바꾼 뒤, 0xdeadbeef와 xor연산을 하면, 아래와 같이 결과값을 구할 수 있다.
이제 나온 값을 10진수로 바꿔, 바이너리에 입력하면 flag획득이 가능하다.
3. flag 획득
안녕히 계십쇼 (~ ̄▽ ̄)~
728x90
'War game > pwnable.kr' 카테고리의 다른 글
[pwnable] cmd1 풀이 (0) | 2022.02.20 |
---|---|
[pwnable] mistake 풀이 (0) | 2022.02.16 |
[pwnable] flag 풀이 (0) | 2022.02.12 |
[pwnable] collision 풀이 (0) | 2022.02.09 |
[pwnable] input 풀이 (0) | 2022.02.07 |
Comments