System/HackerSchool ftz level

해커스쿨 ftz level19

먼즈 2019. 7. 8. 02:34

level19 풀이입니다. Solution이요. Write-up인가요? 몰라요.

현타오넹 일단 코드가 전에 비해서 겁나게 간단한 걸 확인할 수 있죠

근데 중요한 setreuid가 없어요 있어야 쉘을 따서 다음 레벨로 넘어갈텐데

이럴 땐 평소에 쓰던 에그쉘 코드 앞에 setreuid까지 명시해주는 기계어 코드를 추가적으로 넣어주면 됩니다

기본 에그쉘 코드는 쉘코드를 자동으로 환경변수에 지정해주는 역할을 할 뿐 setreuid까지 직접적인 관여를 하진 않거든요

이렇게 level20의 uid를 확인한 뒤에

에그쉘을 작성, 컴파일 뒤 쉘코드의 주소를 확인하고 아무 문자나 44개를 입력 / 그 쉘코드를 실행한 뒤, attackme까지 추가적으로 실행해줍니다. 여기서 유의할 점

1. egg.c 앞에는 setreuid를 명시하는 기계어 코드를 추가적으로 넣도록 합니다.

따로 적어두진 않겠습니다. 제가 짠 게 아니라 그 분께 죄송해서요

2. 왜 44개?

-> 버퍼가 20바이트로 32바이트 이하이므로 기본적으로 32바이트로 생각하고, dummy값의 크기는 8바이트입니다.

ret + sfb + dummy + buf[20] 식으로 메모리가 정리될 것이고, sfb는 기본적으로 4바이트임을 기억하면

32 + 8 + 4 = 44가 되겠습니다

잉 버퍼가 20바이트인데 왜 32바이트로 생각해요? 이거는 gcc 컴파일러의 성질입니다

gcc 2.96 버전 이상에서는 버퍼구조를 이따구로 해버리는데 걍 외워줘야 해요

 

아무튼 이상으로 level19까지 끝내고 20을 할까말까

 

2019.7.8