![article thumbnail image](https://blog.kakaocdn.net/dn/bDi6sv/btq3Jz0PZYL/7KHTDLuMYMDN2ybC82UdPK/img.png)
팀원분들이 직접 제작하신 포너블 문제를 풀어보는 시간이다.
(이번엔 재용님이 제작하신 문제들에 대한 롸업이다.)
1번 문제)
문제
이름을 입력받고, 멘트를 출력한다.
scanf 로 입력받을 시 입력값 검증을 하지 않기에 bof 가 발생한다.
-> ret 를 변경가능할 것이다.
ret 를 ShowFlag() 로 변경해주면 될 듯하다.
익스플로잇
showFlag() 주소 : 0x400567
ret 까지의 offset : 72 byte
payload 는 다음과 같을 것이다.
"A"*72 + 0x400567
2번 문제)
canary, nx, pie 모두 걸려있다..!
aslr 은 꺼져있다.
ID, PW 를 입력받고, 멘트를 출력한다.
id, pw 를 버퍼 크기만큼만 입력받는다.
s와 "admin" 을 비교한 결과를 v4에, s1와 "adminpw123456"을 비교한 결과를 v5에 넣는다.
그리고 v4의 값이 10일 때, 그리고 v5의 값도 10일 때 쉘을 띄운다.
-> 리눅스에서 strcmp 는 차이값을 반환한다.
따라서 10만큼 큰 값들을 다음과 같이 입력해준다.
admix
adminpw12345@
3번 문제)
문제
NX, pie 가 켜져있다.
NX -> 스택에 실행권한 x
pie -> 바이너리 영역 주소 랜덤화
ASLR은 꺼져있다.
"hello world" 를 출력하고, read 로 입력을 받는다.
입력을 받을 때 0x64만큼 받기에 bof 가 발생한다.
ret 까지 offset 이 78인데, 100만큼 입력받는 상황.
-> ret 변경이 가능할 듯하다.
문제 해결 방안
nx 가 켜져있고, aslr 이 꺼져있는 상황에서는? rtl 기법!
필요한 것들을 구해보자.
system, binsh 주소 찾기
페이로드는 다음과 같다.
"A"*78 + system 주소 + bbbb + binsh 주소
익스플로잇
처음에 쉘이 안따지길래 머지 했는데, binsh 주소를 잘못 적었었다..^^
자나깨나 오타 조심.
'Hacking > Pwnable' 카테고리의 다른 글
[Pwnable] Heap2 (0) | 2021.05.05 |
---|---|
[Pwnable] Heap1 (0) | 2021.05.05 |
[P4C] pwnable problem writeup2 (0) | 2021.04.29 |
[P4C] pwnable problem writeup1 (0) | 2021.04.29 |
[P4C] Pwnable problem 3 - writeup (0) | 2021.04.27 |