LOB succubus -> nightmare
by St1tch문제를 보면 우선 argv[1]의 44번째 부터 4바이트가 strcpy의 주소와 같아야 한다.
buf의 크기가 ebp-40부터 시작하기 때문에 조건문을 뛰어넘으면 strcpy함수에 의해 main함수의 ret가 strcpy로 덮힌다.
그리고 memset으로 strcpy의 리턴addr이 'AAAA'로 설정된다.
strcpy함수는 특정 주소(&DST)에 특정 주소(&SRC)의 값들을 복사하는 역할을 한다.
따라서, 무조건 strcpy함수가 실행이 되기 때문에 strcpy가 종료되고 ret하는 부분을 쉘코드, RTL등을 이용하여 쉘을 따면 된다.
나는 RTL을 이용하여 문제를 풀었다.
strcpy &DST는 strcpy의 ret부분인 buf+48부분이다.
그리고 RTL payload를 넣을주소가 strcpy의 &SRC에 와야하는데,
buf의 시작주소에 RTL payload를 넣으면 &SRC = &DST-48이 되므로 브루트포싱을 이용하여 금방 풀 수 있다.
익스플로잇의 구조이다.
나는 스택에 브루트포싱을 할 때 이 코드를 기준으로 보통 작성을 한다.
이번문제의 exploit이다.
위의 스택구조와 동일한 구조의 exploit코드이며,
addr, 즉 strcpy &DST를 브루트포싱으로 구해서 쉘을 획득했다.
블로그의 정보
튜기's blogg(st1tch)
St1tch