Layer7 동아리 과제

포너블 2차시 과제

msh1307 2022. 9. 21. 08:49

change_ret32

vuln가 보인다.

setvbuf로 초기 설정해준다.

vuln 함수인데 fgets로 입력받는 것을 볼 수 있다.

ebp-0x14니까 0x14만큼 채우고 32비트니까 4 바이트 sfp 더 채워서 0x18 채우면 ret 덮을 수 있다.

/bin/sh를 부르는 함수 win이 있다.

그래서 ret를 win으로 바꾸면 eip를 마음대로 바꿀 수 있다.

익스플로잇 코드이다.

change_ret64

change_ret32의 x64 버전이다.

코드는 완전 똑같다.

단지 오프셋만 조금 달라졌다.

0x20이다.

정렬 때문에 바뀐 거다.

0x20채우고 sfp 8바이트 채워서 0x28 채우고 win으로 덮으면 된다.

익스플로잇 코드이다.

overwrite_ret64

스택의 버퍼 주소를 준다.

그리고 사이즈를 입력받는다.

그다음 read를 통해 stdin을 읽는 것을 볼 수 있다.

bof 터지니까 버퍼에 쉘 코드 넣고 ret를 버퍼 주소로 놓아주면 쉘 코드를 실행시킬 수 있다.

스택에 rwx 권한이 다 있어서 마음대로 코드를 실행시킬 수 있다.

rbp-0x100이 버퍼 주소니까, sfp 덮으려고 0x108 줬고 ret 처음에 쉘 코드를 넣은 버퍼 주소로 바꿔주면 쉘을 실행시킬 수 있다.

overwrite_ret32

overwrite_ret64의 32비트 버전이다.

마찬가지로 다른 건 거의 없다.

ebp-0x100이 버퍼 주소니까 0x100 채우고 sfp 4 바이트 채워주고 똑같이 버퍼 주소로 ret 덮으면 된다.

size는 bof를 하기에 충분한 크기를 주기만 하면 된다.

익스플로잇 코드이다.

overwrite_variable64

입력을 받아서 s1을 PwnPwnPwnPwnPwnPwnPwnPwn으로 바꾸면 된다.

rbp-0x40에 v4가 있다.

바꿔야 되는 건 s1이니 s1의 위치, 즉 rbp-0x20부터 Pwn으로 바꾸면 된다.

rbp-0x20 - (rbp-0x40) = 0x20 이니까 둘 사이의 거리인 0x20만큼 더미 데이터를 주고 Pwn을 쓰면 된다.

overwrite_variable32

x64랑 다른 게 거의 없다.

ebp-0x28에 s가 있고 s1은 ebp-0x14니까 그 둘의 차이인 0x14만큼 채우고 Pwn 쓰면 된다.

그러면 strcmp에서 조건문을 통과하고 쉘이 따인다.

익스플로잇 코드이다.

prob1

버퍼링 끄기 되어있다.

입력이 꼬이지 않도록 하기 위해서 설정되어있다.

0x14 덮고 32비트니 4바이트 추가로 sfp 덮으면 ret 바꿀 수 있다.

ret를 고정된 주소인 name으로 덮으면 된다.

바이너리 베이스를 바꾸는 보호 기법은 적용되지 않았으니 그냥 name의 주소를 넣어줘도 충분하다.

로컬에선 stack만 rwx 권한을 가지고 있는데, 아마 서버에는 bss에도 rwx 권한이 있을 것이다.

익스플로잇 코드이다.

Basic_exploitation000

버퍼의 주소를 제공해주고 버퍼에 입력을 받는다.

버퍼 크기 0x80을 채우고 32 비트니까 sfp 4바이트 채우고 ret 덮으면 된다.

0x80 + 0x4 만큼 덮으면 된다.

처음에 쉘 코드를 삽입하고 문제에서 제공한 버퍼 주소로 ret를 덮으면 쉘 코드를 실행시킬 수 있다.

익스플로잇 코드이다.

'Layer7 동아리 과제' 카테고리의 다른 글

포너블 4차시 과제  (0) 2022.10.05
포너블 3차시 과제  (0) 2022.09.25
포너블 1차시 과제  (0) 2022.09.18
포너블 1차시 실습 라업  (0) 2022.09.14
리버싱 11차시 과제  (0) 2022.08.30