포너블 30

Layer7 포너블 2차시 과제 - basic_exploitation_000 풀이

일단 C언어 코드가 들어있는 파일을 VSC로 열어보았다. 이와 같은 코드가 나오는데, 잘 보면 buf의 길이는 128이지만, 입력받는 길이는 141바이트인 걸 볼 수 있다. 또, buf의 주소도 있기 때문에 buf에 쉘코드를 넣고, main의 ret주소를 buf의 주소로 변조하면 쉘을 따낼 수 있을 것이다. 한 번 페이로드를 구성해보자. 이렇게 (쉘코드와 dummy값으로 buf와 sfp까지 = 배열의 크기 : 128 + sfp : 4 = 132) 채우고, buf의 주소로 ret를 변조해 main함수가 리턴될 때 eip를 쉘코드로 옮겨 쉘을 따내도록 실행 흐름을 조작했다. 한번 실행해보자. 이렇게 쉘이 따지고 플래그도 출력된 걸 볼 수 있다. flag : DH{465dd453b2a25a26a847a93d3..

system hacking 2022.09.21

Layer7 포너블 2차시 과제 - overwrite_ret64 풀이

일단 파일을 다운받아 아이다로 열어보았다. overwrite_ret32와 코드는 같았고, 아까처럼 buf address를 입력받아 파싱해주고, size에 페이로드의 길이를 입력해준 후, ret 주소를 변조할 페이로드를 보내주면 풀리는 문제 같았다. 그러나, 64비트이기 때문에 buf address의 길이가 많이 다르다. 아까는 4바이트로 출력됐지만, 이번엔 6바이트로 출력된다. 따라서 파싱 부분의 코드를 조금 바꿔주면 이 문제는 해결할 수 있다. 또, sfp와 ret 주소가 각각 4바이트에서 8바이트가 되므로, 264가 아닌 272를 입력해야 페이로드를 입력할 수 있다. 따라서 size를 입력받을 때 272를 보내주면 된다. 마지막으로 주소를 p32가 아니라 p64로 패킹해 보내주면 공격이 먹힐 것이다...

system hacking 2022.09.21

Layer7 포너블 2차시 과제 - overwrite_ret32 풀이

일단 문제 파일을 다운받아 아이다로 열어보았다. 보아하니, 처음에 buf char형 배열의 주소를 출력하고, 몇 바이트를 입력받을지 nbytes에 받아낸 후 그 바이트만큼 buf에 입력받을 수 있게 해주는 프로그램 같았다. 그러나 nbytes의 크기에 제한이 없기 때문에 buf의 크기보다 훨씬 더 많은 양의 내용을 입력할 수 있었다. 그러므로 우린 256바이트의 dummy값 + 4바이트의 sfp값 + 4바이트의 변조할 주소를 입력하면 main의 ret주소를 변조해 main이 리턴될 때 특정 위치로 eip를 이동시킬 수 있다. 이를 구현한다면, 1. 첫 줄에 출력하는 buf address 를 파싱을 통해 구해준다. 2. 페이로드의 길이를 size 에 입력한다(여기선 264를 넘겨주면 된다). 3. 쉘코드와..

system hacking 2022.09.21