일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- virtualbox
- Codeup
- MySQL
- LGTM
- C언어
- gotify
- DVWA
- OpenSource
- 알고리즘
- Python
- 데이터통신
- firewall
- 백준알고리즘
- JDBC
- github
- Network
- 운영체제
- ubuntu
- 자료구조
- OWASP
- juice-shop
- github action
- Database
- JSP
- CodeQL
- sqli
- gosec
- Juice Shop
- SUA
- goKart
- Today
- Total
비트(bit)주세요
Command Injection 본문
Command Injection 은 웹 애플리케이션에서 시스템 명령을 사용할 때,
세미콜론 혹은 &, && 를 사용하여 하나의 Command를 Injection 하여
두 개의 명령어가 실행되게 하는 공격 입니다.
어떤 웹 어플리케이션 공격이 내부에서 실행된다고 했을 때
사용자가 입력한 값이 적절한 검증 절차가 존재하지 않으면
입력했던 시스템 명령어가 그대로 전달되어 공격자는 이 값을 조작해
시스템 명령어 삽입 시도 공격을 할 수 있게 됩니다.
DVWA Low 단계에서 실습을 진행해 보겠습니다.
먼저 소스코드부터 보겠습니다.
특수문자 같은 것도 필터링을 하지 않고, 받은 값 그대로 출력하는 코드입니다.
여기서 shell_exec()함수는 시스템 명령을 내리는 역할을 합니다.
받은 값 앞에 ping -c 4가 붙어서 시스템 명령이 실행됩니다.
ping -c 4는 ping 결과값을 4번만 받겠다는 뜻입니다.
원래 이 페이지는 오로지 ping 테스트를 위한 페이지인가 봅니다.
이번에는 취약점을 이용해 전송값을 조작하여 ping 명령어 이외에
다른 명령어를 실행시켜 보도록 하겠습니다.
한 줄에서 여러 명령어를 사용할 수 있는 특수문자를 사용했습니다.
그리고 서버의 존재하는 모든 계정의 정보가 들어있는 /etc/passwd 파일을 출력해보겠습니다.
계정의 정보가 들어있는 파일을 출력하는 것이 성공했습니다.
서버는 ;cat /etc/passwd를 받고 최종적으로는 ping -c 4; cat /etc/passwd로 인식이 됩니다.
이 명령어가 ping의 결과는 출력하지 않고(전달한 ip주소가 없음)
/etc/passwd 파일만 출력하게 했습니다.
medium레벨은 Low레벨과 비교했을때 뭐가 다른지 알아보겠습니다.
medium레벨의 소스코드를 보겠습니다.
medium레벨은 전송값에 && 또는 ; 가 있으면 공백으로 교체하는 방식으로 필터링을 합니다.
;을 쓰면 어떻게 되는지 볼까요?
아무일도 일어나지 않습니다. 필터링이 적용되어 ping -c 4 cat /etc/passwd로 인식을 해서
그런 것 같습니다.
하지만 특수문자는 &&, ; 이 두개만 있는 게 아닙니다.
| 도 쓸 수 있습니다. | 를 사용해서 필터링을 우회해보겠습니다.
필터링이 있었지만 다른 특수문자를 사용해 필터링을 우회했습니다.
그 결과 사용자계정의 파일을 출력하는 데 성공했습니다.
High 레벨의 소스코드를 보겠습니다
필터링하는 문자들이 더욱 많아졌습니다.
그러면 impossable의 소스코드는 어떻게 되어있는지 보겠습니다.
전송값을 점(.) 단위로 분해 한 다음에 각각의 값 형태가 숫자인지 확인하는 과정을 거치네요.
command injection의 대응책은 위 처럼 전송값을 검증하는 과정을 거치는 것 입니다.
값의 형태를 검증하든, 허가되지 않은 문자가 들어오면 다른 문자로 대체하든,
인젝션을 방어하는 기법들의 공통점은 전송값을 확인하는 과정을 거친다는 것입니다.
'정보보안 > 웹보안' 카테고리의 다른 글
netcat과 포트포워딩 (0) | 2021.05.23 |
---|---|
방화벽 (0) | 2021.05.22 |
Brute Force Attack(전수공격) (0) | 2021.04.24 |
인증기술과 접근통제 (0) | 2021.04.23 |
HTTP (0) | 2021.04.04 |