#1 ilovepwn
Out-of-Bound 취약점 문제이다. index값을 입력받을때 범위내인지 검증을 하는 과정이 없기 때문이다.
fakekey의 배열 크기가 8이기 때문에 이 배열을 벗어나 있는 key 배열에 oob 취약점을 이용해 'ILOVEPWN'을 넣어주면 된다.
Shell을 땄다.
#2 Part-time Job
main함수를 보면 Your points인 v4가 0x17D78400(400,000,000)을 넘기고 입력받는 v3가 999이면 된다.
v4가 unsigned int 이고 unsigned int는 음수가 해당되지 않으므로 0인 상태에서 4번 선택지를 이용해 --v4하면 unsigned int의 최대값인 4294967295가 된다. 이렇게 하면 첫번째 조건이 풀리고, 바로 다음 v3를 입력 받을 때 999를 입력하면 쉘을 딸 수 있다.
#3 military
main함수를 보면 포멧스트링 버그 문제 인 것 같다. 포멧스트링 버그를 이용해서 discharged_past이 550이면 쉘을 딸 수 있다.
강의에서는 %p를 7번 해서 input 값의 위치를 찾았지만 나오지 않아서 8번 했더니 나왔다.(0x4141414141414141)
그리고 discharged_past의 주소는 0x4040AC 이다.
이를 토대로 쉘 코드를 작성해보면...
이 쉘코드는 nc(netcat)에서는 쉘이 따지지 않지만 로컬에서는 쉘이 따진다.
"실제 서버에 저장되어 있는 값은 'fake'가 아닙니다. 취약점을 이용해서 서버에 저장되어 있는 값을 guess 해보세요!"
로컬에서 fake 값이 어디에 위치하는지 알아야한다.
nc로 접속하여 AAAAAA %13$p로 나온 주소 값인 0x6e41736e304e를
손수 언패킹 해서 hex to text로 변환해주면 N0nsAn이 나왔다.
fake를 N0nsAn으로 바꾸고 익스플로잇 하면 쉘이 따진다.
강의 해주신 분들 모두 수고 많으셨습니다.
'WhoIs 정보보안 교육 > Pwnable' 카테고리의 다른 글
Pwnable 2주차 과제 Write-up(#1~#4) (0) | 2021.11.28 |
---|---|
Pwnable 1주차 과제 Write-up(#1~#3) (0) | 2021.11.21 |