요즘 플스4 파이널판타지7 리메이크 즐긴다고 문제를 안 풀고 있는데; 뭐라도 써야지 싶어서 쉬운 문제를 풀어봤다.
(파이널판타지7 개꿀잼 ㅜㅠㅠㅠ)
너무 쉽다.. 무려 29458명이 푼 문제이다. 와우! 이거 못풀면 해킹은 꿈도 꾸지 말라는 것 같다.
1. 코드흐름
====================================================
단순하다.
1. argv 값을 하나라도 넣어주지 않았다면 "pass argv[1] a number"가 출력된후 프로그램이 종료된다.
2. argv[1]에 입력한 값을 정수로 바꾼후 - 0x1234 한 뒤 fd에 넣는다.
3. read 함수를 통해 buf 배열에 우리가 입력한 값을 넣어준다.
4. buf에 들어간 값과 LETMEWIN을 비교한 후, 값이 일치하면 /bin/cat flag를 실행한다.
2. 고려사항
====================================================
1. argv[1]을 써야한다.
3. 필요 지식
====================================================
1. file descriptor가 뭔지 알아야 한다.
관련 주소: mintnlatte.tistory.com/266
4. 문제 풀이
====================================================
file descriptor는 표준 입력(stdin, 0), 표준 출력(stdout, 1), 표준 에러 출력(stderr, 2)로 구분된다.
문제 풀이를 위해 file descriptor를 0으로 만들 수 있다면 read(fd, buf, 32)를 이용해 값을 입력할 수 있을 것이다.
fd = atoi(argv[1]) - 0x1234 중, atoi는 입력한 값을 10진수 정수로 바꾸는 함수이고 0x1234는 16진수이다.
fd를 0으로 만들기 위해서는 0x1234가 10진수로 뭔지 알아야 한다.
gdb 를 켜고 p/d 0x1234를 입력하면 4660 이라는 10진수가 출력된다. 즉, 우리가 argv[1]에 4660을 입력하면
fd에 0이 들어간다.
그럼 read함수가 실행되는데, 여기서 LETMEWIN을 입력하면 flag가 출력된다.
1
2
3
4
5
6
7
|
from pwn import *
s = ssh(user = 'fd', host = 'pwnable.kr', port = 2222, password = 'guest')
p = s.process(['fd', '4660'])
p.sendline('LETMEWIN')
p.interactive()
|
cs |
'Wargame > pwnable.kr' 카테고리의 다른 글
[Grotesque] aeg (2) | 2020.10.03 |
---|---|
[Rookies] crypto1 (0) | 2020.09.14 |
[Rookies] note (0) | 2020.09.10 |
[Grotesque] asg (0) | 2020.08.15 |
[Toddler] asm (2) | 2020.07.05 |