[FTZ] 해커스쿨 FTZ level 19
2021. 4. 13. 23:31
Wargame/Hackerschool FTZ
1. 문제 소스코드가 상당히 심플하다. gets() 를 통해 입력을 받고, printf() 를 통해 입력 받은 것을 출력한다. 그런데 gets 를 통해서 입력을 받을 때, 입력값 검증을 하지 않기에 bof 가 발생한다. 따라서 ret를 변경해주면 될 것 같다. 1. 환경 변수에 등록한 걸 이용 2. nop을 줘서 풀어도 될 듯함. 이번엔 환경 변수를 이용해 풀어보겠다. 이때, 코드에 권한을 상승하는 부분이 없기에 setruid 함수를 포함하는 41byte shellcode 를 환경변수에 등록해줘야한다. 2. 문제 해결 과정 환경 변수를 등록할 때 앞에 nop을 적당히 주는 것을 추천한다! 처음에 nop 을 주지 않았는데, 쉘이 잘 따지지 않았다. 컴파일 한 후 실행하면 환경 변수의 주소가 출력된다. 페이..
[FTZ] 해커스쿨 FTZ level 12
2021. 4. 12. 21:12
Wargame/Hackerschool FTZ
1. 문제 gets 함수를 통해 입력을 받는데, 입력값 검증을 하지 않아 버퍼 크기보다 더 많이 받을 수 있고, 따라서 bof가 발생한다. 아마 이번에도 aslr이 적용되서 주소들이 계속 바껴 nop을 줘서 풀면 될 것 같다. 2. 문제 해결 과정 그럼 버퍼와 ret 간의 offset과 버퍼의 시작 주소를 구해보도록 하자. 이때의 esp는 ret를 가르킨다. gets 함수 호출 전에 eax를 push 하므로, eax에 buf의 시작주소가 들어있을 것이다. 버퍼와 ret 간의 offset은 268이다. 버퍼의 시작 주소 + 0x500 = 0xbffff0d0 payload는 11번과 유사하다. ret 전까지를 dummy 값으로 채우고 뒤에 쉘코드를 넣고 쉘 코드 앞에 0x1000 만큼 nop을 준다. 그리고..