티스토리 뷰

728x90
반응형

몇개월 전에 알게된 디스코드(IT보안) 에서 채널 멤버 들에게 우선 공개한 CTF 가 있는데...

 

아직 보안 분야에 지식이 바닥인 나에게 동기 부여가 될거 같아 그리고 재미 삼아..... 

시작 했는데... 몇몇 문제들에서 몇시간... 후반 문제로 갈수록 몇일이 걸리는 지경 에 이르렀다..

 

그래서... 정리하고 넘어가야지... 그냥 문제 풀었다 하고 또 그냥 넘어가면 

나 그거 풀어 봤다... 라는 자위나 할게 뻔해서.... 문제 해결 을 위해 찾았던 키워드 그리고 삽질 했던 부분을 좀 정리 해보자

 

1 . 문제 : 1개의 바이너리 파일을 제공하고 그 파일을 분석 해서 flag 를 얻으라

     이해 : 우선 'file' 명령어로 바이너리 파일을 확인하고 'strings' 로 파일을 열어 보았다.

     이해1: '바이너리(binary)' 라는 용어 자체가 익숙하긴 하나 명확히 남에게 설명 하라면 그냥 실행 가능한 파일 정도로만 이해하고 있었는데...  이부분은 좀더...  학문적 이든 단어 해석 이든 좀더 익혀 둬야 겠다..

 

2. 과정 (1) : file 로 열어 보니 눈에 들어온건 setuid 가 걸려 있고 ELF (리눅스 에서만 실행 가능) 파일이 라는걸 확인 할수 있었다.

            (2) : strings 로 확인 하면 다른건 빼고라도 우선은 문자열이 눈에 들어온다.

                    사용방법 : 문자열 암호 명령어 식으로 영어로 나온다..

                    암호가 틀렸다 라는 두줄이 나오는데.. 우선을 그냥 확인차 보고 넘어갔다.

             (3) : 바이너리 파일을 실행 하면 위에 첫줄이 나오고...

                     유추 해본다 생각 하고 

                   예) ./r asdf   ls 

                    해보니 암호가 틀렸다고 나왔다..

                    음....어떤 명령어를 setuid 로 실행 하는데 암호가 필요 하구나 라고 생각이 들어

                    접속시 입력한 계정 패스워드 를 넣어 보았는데  뒤에 명령어 부분을 넣어야 한다는 의미로 출력문이 또나온다.

                    그래서 처음에는 바이너리 파일을 열어보면 그안에 flag 가 있을거라고 단순히 생각 했다.

                    그래서 구글에 바이너라 파일 확인 하는 명령어를 이거저것 많이 찾아보고 설명들은 읽어 보지도 않고

                    그냥 명령어만 따라 넣었다... 그냥 아무거나 걸려라식으로.... 진짜 멍청 했다..

                    그래서 첫날은 날리고...

                    둘째 날은 쳇지피티 에 리눅스 명령어 중에 암호,명령어 식으로 실행되는 명령어가 있는지 찾아 보았는데

                    그것 역시 마땅한게 없었고 혹시나하고 얻어걸려라 하고 엄한 시간 허비로 하루 또 날렸다.

                    3일째 결국 setuid 에 중심을 두자 하고 또 삽질 하다가...

                    암호 가.... 뭔지.. 찾아야 겠다는 생각이 들었따...

                    이게... 진자 기초지식 없이 그냥 얻어 걸려라 하니.... 무한 삽질 뿐이었고... 남는 것도 없었다..

                (4) 구글링 에서도 기출 문제들만 찾으려고 만 했다... CTF binary 로 검색 했더니

                      온통.... 어쎔블리 관련 풀이들만 나오고.. 난 어쌤블리 할주도 모르고... 프로그래밍도 못하는데 이게 눈에 들어 올리도...

                     결국 힌트를 요청 드렸다.... 이문제 이전에도....워드리스트 파일로 문제 푸는 문제에서 힌트를 요청 했었는데...

                     그거 역시 엉뚱한 방향으로만 헤딩을 해대니.. 시간만 버리고 있었따... 힌트를 받아.... 결국 문제를 풀기 했으나..

                     이게...... 부끄러워 졌었다.. 그런데 이번에 또 힌트를 요청 드렸다..

                     역시 개같이 부끄러웠다... 보안 이라는 부분이... 책 한두권 달달외우면 딸수있는 자격증 같은게 아니라...

                     기초지식 과 배경 지식 이 필요하다는걸 다시 느겼다... 그래서... 힌트를 요청 드렸다...

 

                 (5) 바이너리 파일을 어떻게 사용 하는가 에 대해 확인 해보라 하셨다.

                      바이너리 확인이라..... 이거 또.... ㄱ 을 모르니.. 낫 을 아나.....

                      무한 구글링 들어간다... 바이너리 파일 확인... 그리고 보안분야 한정인지 모르 겠지만.. 쳇지피티 도움 안된다...개인적으론

                    결국  objdump , xxd , readelf , ltrace 등등...

                    근본적으로 마인드가 무식하니... 하나만 걸려라 식으로 다 해보면.. 그리고 ctf writeup 을 봐도 이게 아닌데 싶은데도

                    그냥 대입 해봤다.... 아 진자 무식하다... 이래서 몸이 고생 하는거다... 

 

                  (6)  이래서는 안되겠다... 해서 strings 로 열어본 단어들을 하나하나 이게 뭔가 하고 찾아고 있는데

                         프로그램 공부 찍먹 하면서 눈에 익혀둤던 몇몇 함수가 있는게 보였다.

                         len , execv 같은...

                        그래서 바이너리를 사용 하는 방법에 대해 확인 하라는 말에 다시 생각을 기울였다....

                        그냥 직관적으로 눈으로 들어오는 " 실행 파일 암호 , 명령어" 가아니고...

                        바이너리를 확인하는 명령어와 실행 파일  로 다시 방향을 틀었따...

                        역시 위에 알아본 명령어로는 별다른 답이 안나왔고... 16진수만 잔득 나오고...

                        그러다... strcmp 가 두 개의 문자열을 비교 하는 함수 인게 생각이 났는데... 

                        혹시나 싶어서 strcmp 라는 함수를 챗지피티에 검색해보니 설명과 코딩 내용이 나왔다

                        핵심은 strcmp 함수는 문자열의 알파벳순으로 비교하여 어떤 문자열이 더 작거나 큰지를 판단

                        이함수로... 암호 를 비교 하는거 아닐까?? 하는 또 얻어걸려라 식으로  구글에 ctf strcmp 를 검색했다..

                        그랬더니...... strcmp 함수를 사용하는 바이너리를 확인하는 방법?? 을 설명한 블로그를 찾앗따.

                        거기서 ltrace 를 이용 할수 있다고 나오기에 블로그에 설명한 일부분을 그냥 대입 해봤따..

                        'ltrace ./바이너리파일 a' 그랬더니... 오묘한?? 출력값이 나오기에 비교 함수니까 

                         'ltrace ./바이너리파일 a b ' 이렇게 다시 입력... 했더니.....

                          password 문자열 로 보이는 값이 나왔따............ 하..............뭐.. 이것도 얻어 걸린거지만...

                         그래도..... 3일 내내 보던 내용이 아니니... 희망이 생겼따.

                         참... 바이너리 파일을 호스트 로 복사해와서 테스트 한거다 ctf 서버에서는 ltrace 가 설치 되어 있지 않아서..

                          이것도... scp 로 받는 방법이하고 ltrace 가 설치 되어 있지 않으니가... 이건 아니겠지 하고 그냥 

                          ltrace 로 풀어야 하는 문제를 설치가 안되어 있으니.... 당연히 이거로는 푸는거 아니구나 하고 넘어갔다가...

                          결과론적 이지만 3일이 흘렀다 ㅋㅋㅋㅋㅋ

                   (7) password 는 찾았고.... 암호 넣고 실행 해보니... 유레카!!!!!!!!!!!!! (유레카 는 적절하지 않은건가?)

                         새로운 3일 내내 보던 결과가 아닌 execv 가 없다는 출력 값이 나왔는데 

                           희망 이 보인다.... 

                         분명 바이너리파일 에는 setuid 가 걸려 있으니 flag 파일을 읽어 올수 있겠구나 싶어서

                         find로  찾아 봤더니 보이더라!!!
                         사실 이건 ctf 초반 문제에서 cd 명령어 잘못처서 ls 로 1번부터 마지막 문제까지 폴더가 있는거 봤고 

                         폴더 권한이 root 하고 문제레벨 계정 으로 된거 봐뒀던게 ....

                         혹시 나해서 find 로 다음레벨에 flag 파일을 찾아보니 폴더에 있었고

                         그럼 execv 가 뭔가 검색을 해보니 다름 프로그램을 실행 시켜주는 역활을 한다는걸 알았다..

                         setuid 가 붙어 있으니...root 권한이 붙으거고.. 다음레벨 계정의 파일을 읽어 올수 있을거 같았아

                        ltace 파일에 암호 넣고 /bin/vi 를 실행 했더니!! vi편집기가 열린다!!

                        그래서 flag 를 얻었다 ㅜㅜ 

 

이게 그냥 쓰면서 정리 한게 아니고 3일 정도 삽질 한걸 적을려고 했고  본인에게 피드백 을 하기 위해 적었는데

무식 한게 용감하다가... 결과가 안나왔는데도 그냥 같은 짓만 반복하고... 얻어걸리겠지.. 하고.... ctf 버그 아닌가? 하고...

진자... 무식하면.... 용감 한게 아니고 그냥 무식한거다... 무식한건... 나쁜거다.... 무식한....... 

기초지식이 전무 한데 드리 박으니..... 어떤 방식이 잇을거라는 막연한 생각만 하고 있다보니...

중급 문제 푸는 데도 몇일이 걸리는구나... 

 

피드백 : 얻어 걸리는건 없다.... 최소한에 기초지식을 필요하다... 그리고 이해를 바탕해야 한다...

              결과 값에 신뢰 하고... 뭔가 고차원적으로 생각 하려 하지마라... 이제 기는 법 배우고 있는데...

              철인3종 1등 생각 부터 하니.....  바이너리 , setuid , 어쎔블리 알아 둬야 겠다...

 

 

      

 

 

                       

 

 

 

 

 

 

          

728x90
반응형

'War Game Site > rcity' 카테고리의 다른 글

Rcity Easy - Operation 3 / WriteUP  (0) 2023.08.29
RCity Easy - Operation 2 / WriteUP  (0) 2023.08.23
RCity Easy - Operation 1 / WriteUP  (0) 2023.08.23
Rcity - Easy Operation 0 / WriteUp  (1) 2023.08.22
Rcity challenge- 00  (1) 2023.08.22
댓글