일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 파이썬
- suninatas 풀이
- 조건문
- xss game
- 백준 알고리즘
- object
- 자바스크립트
- 김성엽 대표님
- 파이썬
- github
- python
- 메소드
- lord of sql injection
- xss game 풀이
- 함수
- window
- sql injection
- element 조회
- 배열
- 포인터
- burp suite
- property
- Pwndbg
- document
- htmlspecialchars
- 객체
- jQuery
- IF문
- 사칙연산
- 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 |