[pwnable.xyz] grownup(50 pts) :: Write-Up
두비니
·2020. 9. 17. 05:05
Are you old enough for this one? Flag is in the binary itself.
플래그는 바이너리 자체에 있다고 하네요. 잘 분석해봅시다.
일단 main함수를 보면 가장 먼저 setup()함수가 실행되는 것을 확인할 수 있습니다. 일단 전체적인 흐름을 파악하기 위해 이따가 보도록합시다.
그 뒤에서는 18살보다 나이가 더 많은지 적은지 확인한 뒤 y로 대답하는 경우에는 프로그램이 종료되고, 아닌 경우에는 src에 0x84만큼 공간을 할당한 뒤에 이름을 입력받고 종료됩니다.
근데 21번줄에서 프린트하는 방식이 특이하네요. 뭔가 수상하니 우선 qword_601160부터 알아봅시다.
그전에 아까전에 처음 실행된 setup()함수를 확인해 줍시다.
signal함수라는 처음보는 함수가 있는데, 찾아보니 그냥 소프트웨어 인터럽트(software interrupt)로, 프로세스에 이상이 발견했을때 탐지하는 함수입니다. 그냥 무시하도록 하겠습니다.
근데 6번줄에 보니 qword_601160에 byte_601168의 주소를 넣어주네요!!
byte_601168의 내용은 "%s\n"이네요.
즉 다시 main함수로 돌아와 값을 봅시다.
그럼 결국 21번 내용은 printf("%s\n", usr);네요.
여기서 주목할 점은 strcpy를 사용한다는 점입니다.
fsb쓰면 되겠죠?
그럼 일단 flag의 위치를 찾아봅시다. 아이다에서 Alt + t 사용했습니다.
아참 FLAG검색할때는 스택에서 검색해줘야합니다. 그냥 함수 안에서 검색하면 안나옵니당.
아무튼 FLAG가 0x601080에 있다는 것을 알아냈네요. 당연히 저 FLAG{_the_real_flag_will_be_here_} 가 플래그는 아니겠죠?
그럼 이제 format string bug를 이용해 플래그를 알아냅시다.
%p를 일단 넉넉하게 넣어줍시다.
익스코드 돌려주면 다음과 같이 뜹니다.
보니깐 9번째 값이 0x601080인걸 확인할 수 있습니다. 이 값을 %p에서 %s로 확인하면 플래그를 확인할 수 있겠죠?
==FINAL PAYLOAD==
굳굳
'War Games > pwnable.xyz' 카테고리의 다른 글
[pwnable.xyz] two targets(50 pts) :: Write-Up (0) | 2020.10.10 |
---|---|
[pwnable.xyz] note(50 pts) :: Write-Up (0) | 2020.10.09 |
[pwnable.xyz] misalignment(50 pts) :: Write-Up (0) | 2020.09.08 |
[pwnable.xyz] xor(50 pts) :: Write-Up (0) | 2020.08.12 |
[pwnable.xyz] Add(50 pts) :: Write-Up (0) | 2019.11.06 |