Try Attack/System Hacking[basic]

입력방법에 따른 python 공격코드 작성법

D4tai1 2019. 1. 19.

1. 입력

▶ 공격자는 입력 시에 올바르지 않은 값을 입력해서 프로그램이 비정상적으로 동작하도록 공격한다.


(1) 그렇다면 프로그램에서 입력은 어떻게 받을까?

▶ 크게 보면 stdin과 argv 2가지로 나누어진다.

 [1] stdin

  ▶ standard input은 표준입력을 말한다.

  ▶ 프로그램이 동작하면서 필요한 내용을 입력을 받는다.

 [2] argv

  ▶ argv는 프로그램 시작 시에 파라미터로 넣는 것을 말한다.


2. 공격코드 작성

(1) 그렇다면 공격코드는 어떻게 넣어서 동작하도록 할까?

 ▶ 표준입력을 할 때와 파라미터로 넣을 때 두가지로 나뉜다.

 ▶ 위에서 왜 입력방법을 두가지로 나누었는지 알 수 있을 것이다.


(2) 표준 입력 시 공격코드 작성

 [1] 먼저 프로그램이 실행되어야 하고 프로그램이 돌아가는 도중에 입력을 받는다.


 [2] 그렇다면 공격코드를 넣기에 난감하지 않은가?

  ▶ 하나씩 보면 파이프란? 왼쪽 명령어의 결과를 오른쪽에 전달한다.


 [3] cat명령어를 리다이렉션 기호 없이 사용해보자..

  ▶ 이 경우는 자신이 쓴 명령어를 그냥 읽는다.

  ▶ 즉, standard input한 내용을 넣어준다.


 [4] 공격코드는 어떻게 작성할까?

  ▶ 결론부터 말하면 (python -c 'print("......................")'; cat) | ./"실행파일명" 과 같이 작성한다.


 [5] 이유를 묻는다면?

  ▶ cat을 쓰는 이유는 앞에있는 파이썬이 프린트한 내용을 cat이 그대로 읽어서 프로그램에 넘겨준다. 

  ▶ 만약 cat을 빼면 그냥 출력한 내용이 가만히 있기 때문에 프로그램에 입력이 되지 않는다.


 [6] 동작순서를 정리하면?

  ▶ 파이썬에서 실행된 페이로드 값이 cat(스텐다드 인풋의 버퍼)으로 전달한다.

  ▶ cat은 스텐다드 인풋으로 값을 입력받는다.

  ▶ 입력받은 버퍼를 프로그램에 넘겨준다.

  ▶ 결과적으로 프로그램은 스텐다드 인풋으로 입력을 받는데 그것을 cat과 파이썬으로 입력한다.

  ▶ 내용이 이해가 안간다면 입력 후 Enter를 cat이 해준다고 생각하고 앞에 입력할 내용을 작성하면 된다.


(3) 파라미터로 입력 시 공격코드 작성

 [1] 파라미터로 넣을 때는 명령어 자체가 프린트되어 들어가야 한다.


 [2] 그래서 파라미터에 공격코드를 작성할 경우는 그레이브로 감싸거나 $()를 사용한다.

  ▶ $()의 내용이 먼저 실행되고 그 결과가 반영된다.

  ▶ 예를 들면 사용자가 누군지 모를 경우 홈디렉터리에 가기 위해...

  ▶ [cd /home/$(whoami)]와 같은 명령어를 사용한다.

  ▶ 이 경우 $()내에 있는 사용자명이 먼저 출력되고 cd가 실행된다.

  ▶ 이해하기 어려우면 수학에서 소괄호 먼저 계산하는 것과 같다고 생각하고 $()를 소괄호라고 생각해도 좋다.


 [3] 일반적으로 파라미터에 공격코드를 작성하는 경우

  ▶ 보통 [./"실행파일명" $(python -c 'print("....................................")')]의 형태가 된다.

  ▶ 이 경우 $()내부에 있는 python 명령어가 먼저 실행되고 그 결과가 앞쪽 실행파일의 파라미터로 들어간다.

  ▶ 결과적으로 python으로 argv를 입력한 것이다.


3. 공격코드 외에 python으로 무엇을?

  ▶ 파이썬으로는 머리속에 있는 모든 것을 구현할 수 있다. (물론 나는 불가능하다...ㅜ)

  ▶ 스크립트 언어이기 때문에 제품을 만들거나 이러한 개발은 조금 그렇다..

  ▶ 핵심적으로 돌아가는 코어부분은 속도가 빨라야하니 C계열 언어로 구동하고...

  ▶ 서브모듈의 경우는 파이썬으로 구성하는 것이 효율적이다.

  ▶ 쉽게 표현하면 문자열 처리시에 C언어로 하는 것보다 python으로 하는 것이 의사코드형태이고 쉽기 때문이다.

'Try Attack > System Hacking[basic]' 카테고리의 다른 글

Windows에서 Shellcode 작성하기  (0) 2019.07.27
RTL(Return To Libc) 파라미터  (0) 2019.01.11
RTL(Return To Libc) 입력  (0) 2019.01.11
Overflow - 2  (0) 2018.05.24
Overflow - 1  (0) 2018.05.20

댓글