목록시스템 해킹/LOB (19)
ii4gsp
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b8nLvB/btqA7rvGVp5/lWDJilUOcRXE0YZkyAyZ7k/img.png)
소스코드를 보면 이전 레벨과 달라진 점이라면 strcpy() 함수가 gets() 함수로 바꼇다. gets() 함수는 입력받는 크기를 제한하지 않아 취약점이 발생한다. 파일을 복사하고 gdb로 파일을 열고 분석을해보면 스택구조는 buffer ________ sfp ________ ret 버퍼가 16byte이기 때문에 쉘코드를 환경변수에 등록해주면 된다. #include int main() { printf("%p\n", getenv("shellcode")); return 0; } 쉘코드의 주소를 출력해줄 소스코드를 작성해주고 쉘코드를 환경변수에 등록해주고 위의 코드를 실행해주면 쉘코드의 주소가 나온다. 쉘코드의 주소를 알았으니 페이로드는 buffer[16byte] + sfp[4byte] + 쉘주소 파이프를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVVFec/btqA7rh8wde/5y8poJ6ia1HIMAzT81Otsk/img.png)
첫 번째 문제와 크게 달라지진 않았다. 하지만 버퍼의 크기가작아 쉘코드를 환경변수에 등록하면 될것 같다. strcpy() 함수에서 취약점이 일어난다. 파일을 복사해주고 gdb로 열어보면 스택의 구조는 buffer - sfp - ret이다. #include int main() { printf("%p\n", getenv("shellcode")); return 0; } 쉘코드의 주소를 알아내기 위해 소스코드를 작성해주고 25byte 쉘코드를 환경변수에 등록해주고 아까 작성한 코드를 실행하여 쉘코드의 주소를 알아내었다. 페이로드 작성은 buffer[16byte] + sfp[4byte] + ret가 된다. payload ./cobolt $(python -c 'print "\x90" * 20 + "\x61\xff\..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBbVAX/btqBcMyzkil/pWDY8VePT1lOwu2zuO2BxK/img.png)
LOB는 \xff를 입력했을 때, \x00으로 처리해버려 쉘을 획득하지 못하는 문제가 발생한다. 그래서 bash2를 입력해주고 문제를 풀어야한다. gremlin.c 소스코드를 보면 256byte buffer라는 변수가 선언되있고 argc가 2 이상인지 확인하고 strcpy() 함수로 argv[1]에 buffer를 복사한다. strcpy() 함수에서 취약점이 발생한다. 파일을 복사하여 gdb로 파일을 열어주었다. 를 보면 buffer가 ebp-256에 위치한것을 알 수 있고 buffer의 크기가 256이니 dummy값 없이 buffer - sfp - ret가 된다. strcpy()함수 호출하고 난 바로 다음인 부분을 break point해주고 A로 256개의 값을 채워주었다. NOP중에서 0xbffff91..