ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pwnable.kr] Toddler's Bottle - shellshock 이야…
    카테고리 없음 2020. 2. 16. 10:46

    셰일 이해:-쟈싱눙 요즘은 정확히 모르지만 과거의 자신이 기억한 현재 이 블로그의 이 기록물-http://blogger.pe.kr/300bash홀 이해:-http://blogger.pe.kr/430-https://m.blog.naver.com/renucs/220144713558


    사이트:http://pwnable.kr/play.php


    >


    이번 사건은 bash에 대한 사건이다. 역시 ssh로 접속하면 guest로 접속하므로 flag는 하나를 볼 권한이 없는 guest 권한이다. 실행파 하나를 실행하면 낫는 shock해 보라는 메시지가 뜨며 이는 문자, 숫자 인식을 넣으면 빼는데 똑같다. 이 실행파 하나의 구조가 담긴 c파 하나를 보면서 flag를 찾아보자.


    >


    >


    이 찢어진 구조는 의외로 쉽다. uid와 gid만 셋팅한 다음 시스템에서 출력하는 함수를 호출하여 종료한다. 이 코드만 보게 되면, 이것만 가지고 어떻게 껍질 그오은항을 얻고 flag를 볼 수 있는지 의문이 있는데 이 사고는 포인트의 배점 1선에 생각보다 간단한 사고임.사고에 나쁘게 울어온 대로, 베쉬에 대해서, 충격적인 뉴스가 있다고 했지만, 그것을 이용해 푸는 것.이 사고로 예기하는 충격적인 소식이란, 이 배시에 있는 약점을 이 예기합니다. 이에 대해 조사하면서 셸과 해당 취약성에 대해 이해해 두자.


    셸(Shell): 셸은 리눅스의 운영체제에서 다양한 운영체제상의 기능과 서비스를 구현하는 인터페이스를 제공하는 명령 해석의 선구이다. 이 셸의 종류에 대해서는 이 강물을 참조한다. 이 강에서 본인처럼 셸에는 많은 종류가 있다. 유닉스 본인의 리눅스의 경우 프로세스(실행 중인 프로그램) 상태를 점검할 때 사용하는 PS 명령어로 알아볼 수 있다. 아래 사진을 보면 bash 셸이 보인다. 이 셸이 리눅스에서 가장 많이 쓰이는 셸입니다. Windows 에서는 태스크 관리자에서는 볼 수 없는 explorer.exe 같은 것이 셸과 같다.


    >


    셸의 환경변수: 셸을 공부할 때 가장 중요한 것이 환경변수다. 셸은 다양한 환경변수를 사용하는데, 이 환경변수는 임의로 값을 변경하지만 미리 정의된 환경변수의 이름을 변경하는 것은 불가능하다.각 환경변수는 셸의 종류에 따라 설정 및 확인법이 다르지만, 리눅스의 기본 셸인 bash(본 어게인 셸)에서는 env라는 명령을 통해 환경변수를 확인할 수 있다.이들 환경변수 중에서 변경 가능한 환경변수가 있는데, 그중 대표적인 것이 PATH 환경변수이다. 이는 사용자가 명령을 입력했을 때 내부 명령어인지 확인하거나 외부 명령어, 실행 파일로 간주할 것이다.


    >


    셸 환경변수 설정: 셸의 환경변수는 로그인 할 때 설정된다. 이때 사용자 환경은 프로파일로 설정되어, 프로파일은 글로벌, 전역 프로파일과 어카운트 프로파일의 2가지가 있다. 이것에 대해서는 이 강을 참조합니다.bash 셸의 약점: bash에는 환경변수가 존재하며, 이 환경변수는 프로그래밍에서 등장하는 변수와 개념이 같지만, 여기서 환경변수는 그 활용도의 폭이 더 넓다. bash 에서는 환경 변수에 값이 아닌 함수를 등록하고 bash-c [변수명] 와 같이 -c 옵션으로 변수에 등록된 함수를 실행시킬 수 있다.즉, 변수에 함수만큼 등록하는 과정을 간단하게 고쳐 써보면 이 강과 같다.


    C언어의 경우 함수에서 실제로 수행되는 코드는 중괄호인 {}의 사이 부분뿐이지만 함수의 정의가 끝인 책인지 아닌지에 대한 본인의 두 라인의 명령이 있으며 이는 원래 실행되어서는 안됩니다. 그러나 bash에서 함수를 실행하기 위한 과정에서 중괄호의 끝부분인 }과 사이에 있는 명령과 담장의 명령을 실행하는 버그가 있다.아래의 명령어를 통해 bash의 취약점을 확인할 수 있다.


    근본적으로 이 명령을 수행하면 bash의 약점으로 인해 본래 실행되어서는 안 되는 문장이 실행되게 된다.


    위에 제시된 bash의 약점으로 인해 실행할 수 없는 문장을 실행시켰는데, 그럼 실제로 ssh로 접속한 계정으로 bash를 실행해 보자. 권한이 존재하지 않지만 bash로 hi를 echo시킬 수 있었다. 즉 bash 약점이 여기에 존재한다는 것. 이것을 즉시 Flag 파일에 적용시켜 보자.


    >


    >


    그럼 이렇게 shellshock의 권한으로 flag를 cat 하는 것에 성공했던 flag이 정상적으로 나 온 것을 볼 수 있어서 이를 사이트에 입력하게 되면 1점을 취득하게 된다. flag에 다소 리긴의는 배시셸의 약점을 잘 설명해 주는 것 같다.


    >



    댓글

Designed by Tistory.