시스템 해킹/ProtoStar로 처음 입문하기

[pwnable] 시스템 해킹 ProtoStar - Stack6 (PLT, GO)

0x6b6569 2023. 2. 15. 20:09

https://github.com/z3tta/Exploit-Exercises-Protostar/blob/master/06-Stack6.md

 

GitHub - z3tta/Exploit-Exercises-Protostar: Solutions for Exploit-Exercises Protostar

Solutions for Exploit-Exercises Protostar. Contribute to z3tta/Exploit-Exercises-Protostar development by creating an account on GitHub.

github.com

 

gcc -z exexstack -w -no-pie -o stack6 stack6.c

 

 

IF문을 보면 ret &  0xbf000000 과 and 연산을 하는데 과연 어떤 의미 일까?? (궁금)

 

 

 

먼저 __builtin_return_address(0)은 현재 함수의 return addess를 가져온다 (인자가 1이면 호출한 함수의 address)

현재 main함수의 ret는 0xfffffcfec로 0xbf000000과 and 연산을 하면 if문에 반드시 걸리게 된다.

 

ret 주소를 변경해야 쉘을 얻을 수 있으므로 return address 위로 shellcode를 넣는 방식으로는 플래그를 획득 할 수 없다!!!

(바로 밑에 주소도  0xffffcff0이므로 if문에서 걸린다.)

 

 

            STACK                                                                                STACK

---------------------------------                                                  ---------------------------------   

 

 

               BUF                                                                                    BUF    

 

 

---------------------------------               --------------->               ---------------------------------

                RBP                                                                                   RBP 

---------------------------------                                                  ---------------------------------

         RET ADDR                                                                          SYSTEM

---------------------------------                                                  ---------------------------------

                                                                                            SYSTEM RET ADDR

                                                                                          ---------------------------------

                                                                                                    arg1  /bin/sh

---------------------------------                                                  ---------------------------------

 

 

 

PLT 방식으로 문제를 해결한다. 

 

 

패턴을 생성해서 ret 까지의 주소를 확인

음 분명 ret에 breakpoint를 걸었는데 터져버렸다 EIP에 있는 값을 가져와서 offset 을 계산하면 되니까 크게 문제가 되지는 않는다!! offset은 80!

 

 

system 함수와 '/bin/sh'의 주소는?!

 

여기서 return address 공간에는 system 함수 주소가 들어가는데 0xf7c4c7b0이다!

2진수로 앞 1byte만 비교하면

0xf7db5faa  -> 0xf7 -> 0b11110111

0xbf000000 -> 0xbf -> 0b10111111

& --------------------------------------------

                                    0b10110111  !=  0b10111111

 

즉 우리는 if문에 걸리지 않는다!!!

 

payload를 작성해보자 ㅎ

 

간단하게 payload를 작성했다!

 

 

오예 shell을 위와 같이 획득할 수 있었다!! 굿굿