입력방법에 따른 python 공격코드 작성법
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 |
댓글