종강해서 다시 블로그 스타드 


풀었던건데 정리 못해놨던것들 쭉 정리할꺼임 


이번포스팅은 스택 4번 풀이임당.


코드는 다음과 같습니당.


RET - EBP - BUFFER 순으로 쌓이게 되는데 buffer를 가득 채워서 ebp를 넘어서 ret 부분에 win_addr 을 넣어주면 win 함수의 프린트문을 실행 시킬수 있어욤 


따라서 우리가 해야 할 일은


1. main ret 찾기 

2. win 함수addr 찾기 


이 두개밖에 없어요



그래서 gdb로 까봤습니당




여기서 첫번째로 win addr 의 주소를 확인할 수 있어요 


이제 main의 ret를 찾아봅시당 그래서 버퍼가 64로 선언되오 있었으니까 넘치도록 한 A100개 줘봤어요


그리고 ebp 의 주소도 확인 해보니 fe0f0 인데 0x41로 차있는걸 확인했어요 


넘쳤다는거죵


fe0f0 이 지금 ebp 주소로 되어 있고! 


A가 68개 들어갔을때 위치니까, 또 ebp 다음에 ret가 위치하고 있으니까


68 비트 채우고 (buffer + ebp ) ret부분에 win 함수 address를 넣어주면 될거라고 생각했어요



근데 안됬어요 ... 뭐가 문제지


64비트 문제인가. .하고 32비트로 돌려봤어요 



32비트에서 스택에 A를 68개 넣은 모습이에요 


\x00000000 드레그 된 부분이 ebp 라고 나오네요 그럼 0xbffff33f (0xb7df09a1) 이 ret라는걸 확인할 수 있고 


스택에 76만큼 채워넣어주고 win _addr 넣으면 된다는 결론이 나와요 


음 .... 32에선 잘 되는데 64에서는 왜 잘 안되지 .. 라고 고민을 하다가 


아마 32비트에서는 \x00000000 으로 들어가지만 64빝에서는 \x0000000000000000으로 들어가서 두자리를 먹나 생각이 들어요


정확한건 아니에요 .. 




그래서 4바이트 더 넣어주고 win_addr 넣어주니 정상적으로 되써요 .. 





'개인공부 > pwnable' 카테고리의 다른 글

pwnable.kr fd 문제  (0) 2019.10.21
[protostar] stack5 문제풀이  (0) 2019.01.02
[protostar] stack3 문제풀이  (0) 2018.11.19
[protostar] stack2 문제풀이  (0) 2018.10.14
[protostar] stack1 문제풀이  (0) 2018.09.16

stack3번 풀이쓰 


peda 와 pwntool 이용쓰 


설치법은 구글에 잘 나와이쓰


문제임


소쓰 코드임



보면 buffer 뒤에 (fp에) win_addr address 를 덮어 씌우면 될 거 같음 



그냥 실행시켜보면 그냥 끝남 ㅎ




일단 보면 ebp - 0xc 의 주소값과 비교를 해주고 이씀 


그게 아마 나중에 win_addr 의 값으로 쓰일 것임 



일단 페다로 보면 offset 위치가 64로 확인되고 0xbfff


페다 말고 실제로 메모리 까봐도 ebp - 0x c 의 주소가 0xbffff34c로 확인되고 거기에 0x41414141(aaaa)가 들어가있음을 확인 


그럼 64 바이트 만큼 버퍼 넣고 ebp-0xc 주소에 현재 0x41414141 이 들어가 있지만 win 함수 address가 들어가면 될거같음


win function의 address는 아래에서 확인 




나온 내용을 종합해보면 


1. ebp - 0xc 의 주소값이랑 비교해서 점프문 수행함 


2. 그 주소값이 근데 win 함수가 들어 가면 됨 


3. win 함수 주소는 0x080491a2 임


이 내용을 가지고 스크립트를 짜보면 다음과 같음 






이렇게 끝 


'개인공부 > pwnable' 카테고리의 다른 글

[protostar] stack5 문제풀이  (0) 2019.01.02
[protostar] stack4 문제풀이  (0) 2018.12.31
[protostar] stack2 문제풀이  (0) 2018.10.14
[protostar] stack1 문제풀이  (0) 2018.09.16
[protostar] stack0 문제풀이  (0) 2018.09.16

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


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