파이썬 requests 라이브러리를 활용한 웹 취약점 점검

웹 취약점 점검에 Burp-Suite와 같은 상용(혹은 free) Proxy 도구를 많이 사용하긴 하지만 특정 영역에서 취약점을 발견했을 경우 상용 도구에서 제공되는 부가기능(Intruder 등)을 쓰기 보다는 Python을 통해 직접 도구를 제작하는 것이 효율적일 때가 있다. 파이썬에서 http 통신을 위해 가장 기본적으로 사용되는 라이브러리에는 socket, urllib(2) 등이 있지만 아래 소개할 requests 를 사용하면 아주 간편하고 빠르게 공격 도구를 제작할 수 있다. 본 포스팅 내용은 아래 공식 페이지 내용을 참고하여 작성하였음을 미리 밝힌다. http://docs.python-requests.org/en/latest/   설치 방법 pip 혹은 easy_install 도구를 통해 간편하게 설치가 가능하며, git 을 통한 수동 설치도 지원한다. [crayon-5a1444243a8ef075919714/] 설치가 끝나면 정상적으로 라이브러리가 import 가 되는지 파이썬을 열어 확인해보자 [crayon-5a1444243a905302440862/] 오류 없이 정상적으로 설치 된 것을 확인할 수 있다. 이제 본격적으로 requests 라이브러리를 활용해보도록 하자.   GET / POST 요청(request)과 응답(response) 받기 라이브러리를 불러오는(Importing) 것은 다음 한 줄이면 충분하다. [crayon-5a1444243a90f383417186/] 공격 대상 웹 서비스가 GET 메서드를 지원하는 경우 다음과 같이 Request를 생성한다. [crayon-5a1444243a919394752006/] url을 별도로 분리해 놓은 것은 추후에 코딩시에 유연성을 높이기 위해서이며, 직접 get(‘대상주소’) 형식으로 입력해도 무방하다. 위와 같이 get 메서드를 호출하게 되면 응답 값에 대한 객체가 “r” 에 부여되며, 앞으로도 이 객체를 사용하여 url 에 관련된 정보를 수집할 수 있다. GET 이 아닌 POST 방식의 경우 다음과 같이 파라미터를 딕셔너리 형태로 정의한 후 post 메서드 호출 시 인자값으로 전달하면 된다.

Continue Reading

파이썬을 이용해 bash 명령 실행하기

  파이썬으로 공격코드를 짜다 보니 Bash 쉘 스크립트를 실행하는 여러가지 방법을 찾게 되었다. 이번 정리를 통해 추후 공격 스크립트 작성시 적절하게 활용할 수 있기를 기대해본다.   1. os.system 구문을 이용해 명령 실행 하기 [crayon-5a1444243bfa8219117253/] 위와 같이 단순히 명령 실행을 위해 사용시에는 문제가 없으나, 결과값을 특정 변수에 저장하는 목적으로 사용하기에는 적합하지 않다. (명령 실행 결과의 성공 유무를 리턴하기 때문에…) 따라서 위의 단점을 보완할 수 있는 방법이 바로 subprocess 이다.   2. subprocess 이용하여 명령 실행하기 먼저 os.system과 같이 단순히 “실행”만 시킬 때는 “call” 메서드를 이용하면된다. [crayon-5a1444243bfb7885538487/] 그러나 특정 명령 수행 결과를 바탕으로 if 조건문을 걸때에는 call이 아닌 check_ouput을 이용해야 한다. 예를들어 특정 파일 실행결과가 “AAA” 혹은 “BBB”라고 가정해보자. “AAA” 일 경우 “123”을 출력하고 “BBB”일 때 “456”을 출력하려면 다음과 같이 코드를 작성하면 된다 [crayon-5a1444243bfc1822976511/] 위와 같이 check_output 메서드를 사용하면 해당 실행 결과를 스트링값으로 리턴해주기 때문에 실제 실행결과값을 바탕으로 조건 구문을 사용할 수 있게 된다.   3. 참고 사이트 아래 사이트에서 파이썬을 통한 bash 명령 사용법을 좀 더 상세하게 볼 수 있다. https://docs.python.org/2/library/subprocess.html http://mervine.net/executing-bash-from-python    

Continue Reading

파이썬에 컬러를 입히자 – Colorama

예전에 버그트럭의 오정욱님께서 알려주셨던 Colorama 파이썬 라이브러리를 소개하고자 한다. 파이썬이 텍스트 기반이다보니 출력 부분에서 조금은 무미건조한 부분이 있는데 Colorama 라이브러리를 통해 예전 PC통신 시절 안시(ANSI) 코드와 같은 알록달록한 화면을 아주 쉽게 만들어 낼 수 있다. 먼저 공식 페이지에서 소개하고 있는 샘플 화면을 보자. 아주 훌륭하다. 처음에는 단순히 색만 입히는게 뭐가 대수인가 라고 생각했었는데, 대용량 로그 분석을 할 때 특정 조건을 부여한 후 매칭되는 결과에 대해 색을 강조한다면 아주  괜찮을 것 같아 직접 시도해보기로 했다.   라이브러리 설치 공식 페이지 다운로드 링크에서 받은 후 압축을 해제 하면 된다. —> [링크 바로 가기] pip 또는 easy_install을 통한 설치는 확인하지 못했다.   기본 사용법 Colorama 라이브러리를 사용하기 위해서는 아래와 같이 Initializing 과정이 필요하다. [crayon-5a1444243c96b616263617/] 이후 사용법은 긴 설명이 필요없을 정도로 간단한데, 예제와 출력 결과물을 보면 이해하기 쉬울 것이다. [crayon-5a1444243c979469608725/] Windows 운영환경에서는 반드시 init() 과정을 거쳐야 정상적으로 출력이 되므로, 빼먹지 말고 넣어주도록 하자. 주로 사용되는 세가지 모드의 특징은 다음과 같다. Fore : 글자의 색을 변경할 때 사용. Back : 배경 색을 변경할 때 사용. Style : 미리 지정되어 있는 스타일대로 변경할 때 사용 한가지 더 유의해야 할 점은, 한 번 색을 셋팅하고 나면 해당 설정이 계속 유지되므로, 위 코드와 같이 RESET 메서드를 호출해줘야 하는 불편함이 있다. 이러한 삽질을 줄이기 위해 한번의 print당 한 번만 설정이

Continue Reading

치명적 파이썬 (Violent Python) – 0×02 SSH 공격도구

지난 포스팅 보러가기 치명적 파이썬 (Violent Python) – 0x01 Zip파일크래커 치명적 파이썬 (Violent Python) – 0x02 포트스캐너 이번 포스팅에서는 챕터 2에서 다룬 SSH 공격 도구를 다룰 예정이다. 먼저 포스팅을 시작하기 전에 한가지 짚고 넘어갈 문제가 있는데… 책에 나온 코드들의 indent가 한마디로 “개판 5분전” 이라는 것이다. 파이썬은 다른 언어와 달리 ‘줄맞춤’을 통해 각 문장의 시작과 끝을 구분하는데 책에 있는 코드 그대로 따라했다가는 에러메시지 붙잡고 허송세월 날릴 수 있으므로, pycharm 에서 제공하는 Code Inspector 와 같은 도구를 통해 오류를 잡아가기 바란다. (아니면 아래 코드를 참고해도 좋다) 먼저 첫번째는 pexpect 라이브러리를 활용하여 SSH 서버에 접속하는 방법이다.   pexpect를 통한 SSH 서버 접속 [crayon-5a1444243d13e834239058/] pexpext는 리눅스 계열 운영체제에서만 동작하며, pip 를 통해 설치할 수 있다. 상세한 설명은 http://pexpect.readthedocs.org/en/latest/ 을 참고하기 바란다. [crayon-5a1444243d150319762268/] pexpect는 어떤 프로그램에 대한 응답값(키워드, 프롬프트 등)을 미리 지정해준 뒤 해당 조건에 부합되는 경우 직접 명령어를 전송할 수 있는 라이브러리 이다. 선언할때는 spawn() 메서드를 호출하며, 이 때 파라미터로 호출하고자 하는 내용을 넣어주면 된다. 다음으로 변수를 하나 선언한 후, expect메서드에 프로그램 실행시 예상되는 키워드 값들을 넣어주면 되는데, 이 때, 매칭되는 값이 있으면 1, 없으면 0 값을 반환하게 된다. [crayon-5a1444243d15a991313948/] 위와 같이 expexet 메서드에 타임아웃 메시지, ssh_newkey 스트링, 혹은 ‘password’라는 문자를 리스트 형태로 넣어주게 되면, 셋 중 하나라도 부합되면 1값을 반환하게 된다.   실행 결과 아래는

Continue Reading

치명적 파이썬 (Violent Python) – 0×02 포트스캐너

이번시간에는 간단한 자가 포트 스캐너를 제작해봄으로써 소켓 통신에 필요한 라이브러리 활용법에 대해 알아보고자 한다. 또한, python-nmap 모듈을 통해 nmap 기능을 파이썬으로 확장해볼 것이다. 이번 포스팅에서 다루게 되는 범위 : 치명적 파이썬 챕터 02 (~46Page)   전체 코드 소개 이번 시간에 제작할 프로그램은 포트 스캐너이다. 사용자가 옵션으로 입력한 (지난 시간에 다룬  optparser를 이용) 호스트 네임과 포트를 대상으로 TCP 커넥션을 맺은 후, 애플리케이션 배너를 가져오는 기능을 갖고 있다. 코드를 한번 살펴보자. [crayon-5a1444243dc1a447919493/] 함수는 메인함수 +  ConnScan 함수 그리고  PortScan 함수, 총 3개로 구성되어 있다. 호출 순서는 Main – PortScan – ConnScan 순이므로, 순차적으로 살펴보도록 하자.   PortScan 함수 [crayon-5a1444243dc2c737328888/] try / except를 통해 기본적인 예외처리를 하였으며, gethostbyname 함수와 gethostbyname을 통해 IP 어드레스와 호스트 네임을 어떻게 가져올 수 있는지 보여주고 있다. 메인함수에서 사용자로부터 여러개의 포트를 입력받을 수 있도록 하였다. 입력한 포트 갯수 만큼 리스트 형태로 PortScan 함수로 전달이 되고, 쓰레드를 통해 ConnScan 함수를 호출하여 실제 포트 스캐닝이 이루어지게 된다.   ConnScan 함수 [crayon-5a1444243dc37010374475/] ConnScan 함수는 실제 포트스캐닝을 통해 대상으로 부터 애플리케이션 배너를 가져와서 출력한다. 먼저 connskt 변수를 통해 소켓 객체를 초기화 시킨다. [crayon-5a1444243dc41104003931/] 소켓을 장착(?) 하게 되면  connect 메서드를 통해 실제 접속을 시도하는데, 이 때 파라미터는 튜플형태로써 (host, ip) 형태가 된다. [crayon-5a1444243dc4a277089943/] 마지막으로 recv 메서드를 통해 소켓 연결된 대상으로 부터 수신한 데이터를 변수에 저장한

Continue Reading

Site Footer

Sliding Sidebar

About Me

About Me

June Park