728x90
Execute
문제 파일을 실행하면 입력을 받고 buf에 들어간 내용을 출력해준 후 check 0x4030201을 출력하여 뭔가의 주소를 출력해준다. 또한 내가 buf에 입력하는 내용이 너무 길다면 buffer overflow가 발생하여 check의 내용이 0x61(a)로 채워지는 것을 알 수 있다.
Analyze
1번 문제인 만큼 NXbit 말고는 보호기법이 걸려있지 않다.
그럼 프로그램의 동작을 분석하기 위해 해당 파일을 IDA에 올려서 확인해보자.
Main
- Line 6 : v5변수에 57305985를 대입해준다.
- Line 7 : fgets함수를 통해 s변수에 45의 길이 만큼 입력을 받는다.
- Line 8,9 : 앞서 입력한 s변수와 v5의 내용을 출력해준다.
- Line 10,11 : v5가 67305985와 -559038737 이 아니라면 you are on the right way를 출력한다.
- Line 12~17 : v5가 -559038737인 경우 shell을 실행시켜 준다.(ubuntu의 경우 기본 shell이 bash가 아니라 dash라고 한다.)
먼저 67305985와 -559038737가 hex값으로 무엇인지 확인해보자.
따라서 check에 나오는 0x4030201은 67305985 -559038737 은 0xdeadbeef인 것이 확인이 되었다. 따라서 buffer overflow가 발생하는 것을 앞서서 확인 할 수 있었으므로 dummy + 0xdeadbeef를 입력해주면 문제가 풀릴것이다.
dummy를 계산하기 위해 변수 s와 v5사이의 거리를 측정해보자. 각각의 변수가 선언되는 위치는 아래와 같다.
따라서 0x34-0xC를 계산해주면 dummy의 길이를 알아낼 수 있다.
따라서 dummy를 40byte만큼 주고 뒤에 0xdeadbeef를 붙여 주어야한다. 당연한 이야기이겠지만 deadbeef는 little-endian 형식으로 입력해야 할 것이다.
Solve
성공적으로 flag가 출력된다.
728x90
'Wargmae > HackCTF' 카테고리의 다른 글
[Hack CTF – x64 Buffer Overflow] (0) | 2021.01.05 |
---|---|
[Hack CTF – 내 버퍼가 흘러넘친다!!!] (1) | 2021.01.03 |
[Hack CTF - Baisc_FSB] (0) | 2021.01.03 |
[Hack CTF - Basic_BOF #2] (0) | 2021.01.02 |
[HackCTF - offset] (0) | 2021.01.02 |