사이트 다시 열림 ㅅ ㅅ ㅅ ㅅ ㅅ ㅅ
아니 근데 LOB 왤케 그지같지 ?
왜 안풀리는거야 분명 맞게 했는데 ...... 한문제로 몇일 날린듯. ...
넘 그지같다 ㅎㅎㅎ
암튼 stack2 번 문제 풀이임당
소스코드를 보면 다음과 같음
int 형 modified 변수 선언하고
char 형 buffer 64 바이트만큼 잡아줌
getenv 는 환경변수 가져오는건데 GREENIE 라는 환경변수가 null 이면 안됨
암튼 그다음 가져온 환경변수를 variable 이라는 변수에 넣어줌 *
그리고 modified를 0으로 초기화 하고
환경변수에 담긴 값을 복사해온 variable 이라는 변수에 있는 값을 buffer로 복사함
그 후 modified 가 0x0d0a0d0a 를 수정해야 되는 문제임
정리하면
1. 환경변수에 값을 입력해준다 ( null 이면 안되기 때문에 )
2. 그 후 환경변수에 입력된 값을 variable 이라는 변수로 복사한다
3. modified 는 0으로 초기화
4. variable 변수에 저장된 값을 strcpy로 buffer 에 복사해 주는데, 길이 검증을 하지 않기 때문에 bof 발생
5. 따라서 modified를 수정할 수 있음 (왜냐면 modified 위에 buffer가 쌓여 있기 때문에 )
이게 전체적인 문제의 핵심내용임
그럼 풀어봅세
일단 그냥 실행시켜 봤음
역시나 GREENIE environment 설정이 안되있어서 오류가 남
그래서 환경변수를 설정해 줬음 환경변수 설정하는 방법은 많이 있지만 그 중에 export 를 이용해 설정해 주었음
그 후 버퍼가 64바이트 만큼 되어있고 그 아래에 modified가 있으니까 A 64개 넣고 modified 에 \x0d0a0d0a넣어주면 될 거 같아서 해봤음
근데 잘 안됨 .. 버퍼 뒤에 뭐가 또 있나.. ? gdb로 까보기로 함
일단 비교하는 곳에 브포 걸어놓고
peda 기능인 pattern create 명령어를 통해 패턴을 100개정도 생성해줬음 (pattern create 100)
그 후 그 패턴을 다시 export GREENIE = ' INSERT CREATED PATTERN' 을 통해 넣어줌
그 후 다시 gdb에 브포 걸고 패턴에 있는 인자값을 넘겨주도록 실행시켜봄
RAX 에 0x41413341 이 들어가있고 패턴으로는 A3AA 가 들어가 있는걸 확인했음
그 후 pattern offset A3AA를 통해 보면
offset이 68 임을 확인했음
그러면 이제 A를 68바이트 만큼 넣어주고 원하는 modified 값을 넣어주면 풀수 있음
후 길다..
ㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲ끝!!!!!!!!!!!!!!!!
'개인공부 > pwnable' 카테고리의 다른 글
[protostar] stack4 문제풀이 (0) | 2018.12.31 |
---|---|
[protostar] stack3 문제풀이 (0) | 2018.11.19 |
[protostar] stack1 문제풀이 (0) | 2018.09.16 |
[protostar] stack0 문제풀이 (0) | 2018.09.16 |
[pwnable]pwnable.kr 3번 (0) | 2018.09.09 |