-
[Toddler's Bottle] 4번.[flag]$ 시스템 해킹 $/pwnable.kr 2018. 11. 30. 22:33
이번시간에 풀어볼 문제는 www.pwnable.kr 의 4번째 문제 [flag]입니다.
키워드를 한번 뽑아보면 packed // reversing // need binary
리버싱을 이용해야 하는 문제인거 같네요
일단 저 url을 이용해서 다운로드를 받아줍니다.
그리고 파일이 무엇인지 확인합니다.
실행했을때 힌트를 받을수도 있기 때문에 실행파일로 바꿔 봅시다.
실행파일로 바뀌었다는 걸 알수 잇습니다.
실행을 한번 해보겠습니다.
malloc() (동적할당) 과 strcpy 그리고 flag를 그곳에 둘것이니 가져가라 라는 뜻같네요
파일 분석을 한번 해보면..
그냥 ELF형식의 64비트라는것을 알수 있네요. 32비트가 아니라는것은 알수 있었습니다.
그러면 이제 gdb을 이용해서 리버싱을 한번 해보겠습니다.
gdb로 들어왔는데 잠시 설정 좀 먼저 하겠습니다.
set disassembly-flavor intel을 해주는 이유는 설정을 안하면 기본적으로 default값인 at&t 어셈블리어를 사용하여 표시해 줍니다.
하지만 저같은 경우에는 intel의 어셈블리어로 공부를 해서 다음과 같은 설정을 하는 것입니다.
개개인에 따라서 하셔도 되고 안하셔도 되는 부분입니다.
이제 진짜 실행을 해보겠습니다.
아…? Unpack을 해줘야 하는 파일인가 보네요.
gdb를 나가는 방법은 quit 입니다.
Unpack을 하는 방법은 다음과 같습니다.
다시 gdb로 들어가서 disassemble main을 해봅시다.
물론 코드를 이해해도 되지만
<+13>에 <puts> 입력
<+23>에 <malloc> 동적할당
<+32>에 주석으로 #0x6c2070 <flag>
이렇게 보여주네요
malloc다음 코드 mov rdx,QWORD PTR [rip+0x2c0ee5]에 주목해 봅시다. 메모리에 저장되어 있는 값을 한번 확인해 봐야겠습니다.
0x6c2070에 flag가 있는것 같으니 한번 확인해 보겠습니다.
메모리 검사라고 해서
형식 : x/"범위""출력형식""범위의 단위""메모리주소 또는 함수명"
범위 : 범위의 단위 * 범위 byte 출력
출력 형식 : x(16진수),s(문자열), l(명령어)
범위의 단위 : b(1byte), h(2byte), w(4byte), g(8byte)
가 있습니다.
일단 0x6c2070이 참조하는 메모리가 있는지 확인해 볼게요.
Flag가 0x00496628에 있나 보네요
0x00496628에 있는 문자열을 출력해 보겠습니다.
오.. 드디어 flag를 찾았습니다.
다음 문자를 www.pwnable.kr 4번 문제의 Flag 에 입력해 주면 정답입니다.
[*참고자료*]
http://msbang.co.kr/221214943293
'$ 시스템 해킹 $ > pwnable.kr' 카테고리의 다른 글
[Toddler's Bottle] 5번.[passcode] (0) 2018.12.02 [Toddler's Bottle] 3번.[bof] (0) 2018.12.01 [Toddler's Bottle] 2번.[collision] (0) 2018.11.29 [Toddler's Bottle] 1번.[fd] (0) 2018.11.29