사이트 다시 열림 ㅅ ㅅ ㅅ ㅅ ㅅ ㅅ


아니 근데 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

+ Recent posts