壓倒
Ye0L
壓倒
Total
Home
Today
  • ByO (59)
    • 악성코드분석🍳 (10)
      • Android (2)
      • Windows (8)
    • 백준⌨ (1)
    • 개발💻 (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

블로그 메뉴

  • 홈
  • 방명록
  • 깃허브😀
  • 티스토리 홈

공지사항

인기 글

태그

  • Crawling
  • Background: Cookie & Session
  • CSRF
  • [DigitalForensic]with CTF
  • APK 구조
  • Background:Web Browser
  • dreamhack
  • Raccoon Stealer
  • forensic
  • Raccoon Stealer v2
  • reversing
  • 악성코드분석
  • selenium
  • ClientSide: XSS
  • 크롤링
  • File Download Vulnerability
  • 드림핵
  • 리버싱
  • web hacking
  • PYTHON

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
壓倒

Ye0L

Dreamhack/Web hacking

Command Injection and Command Injection-1 Write Up

2023. 1. 30. 23:36
해당 포스팅은 https://dreamhack.io/?obj=18 를 참고하여 공부 목적으로 작성하였습니다.

Command Injection

정의

SQL Injeciton, DLL Injection과 같은 단어에서 유추할 수 있듯이 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점이다.

즉, 만약 웹이나 서버에 명령어를 실행하는 함수가 존재한다고 가정하자. 명령어를 실행하는 함수에 공격자가 임의의 인자(공격 코드)를 전달하면 Command Injection 취약점이 발생한다.

Python을 예시로 살펴보자. Python에서는 기본적으로 os 라이브러리를 지원하고 있기 때문에 대상 IP에 Ping을 보내고 싶다면 os.system(”ping [target-ip]”)와 같이 시스템 함수를 실행할 수 있다.

하지만, 이러한 입력을 제대로 검사하지 않으면 어떻게 될까?

⇒ Command Injection이 발생할 수 있으며 메타 문자(&&, ;, |) 등을 사용해 임의 명령어를 실행하고 쉘을 획득할 수 있게 된다.

Python을 예시로 설명하면 이해하기 쉽다. Python에서는 기본적으로 os 라이브러리를 제공하므로 rksfi 특정 IP에 핑을 보내고 싶다면 os.system(”ping [target_ip]”), 특정 파일을 읽고 싶다면 os.system(”cat [target file]”) 형태로 사용할 수 있다 .

메타문자설명사용 예시
````안에 들어있는 명령어를 실행하과 해당 결과로 치환echo `echo test`
$()$()내에 존재하는 명령어롤 실행한 결과로 치환(중복 가능)echo $(echo test)
&&한 줄에 여러 명령어 사용(앞 문장에서 에러가 발생하지 않아야 실행)echo test && echo test2
||한 줄에 여러 명령어 사용(앞 문장에서 에러가 발생해야 실행)cat no || echo test2 (no는 존재하지 않는 파일)
;한 줄에 여러 명령어 사용(구분자)echo test; echo test2
|앞 명령어의 결과가 뒷 명령어의 입력으로 들어감echo test | /bin/sh

Command-injection-1 Write-Up


문제


해당 문제는 Command Injection을 활용하는 문제로 플래그는 flag.py에 존재한다고 한다. 플래그가 flag.py에 존재하므로 cat flag.py 명령어를 Injection 하면 해결된다.

command-injection-1(출처 : dreamhack)

Write- Up


문제에서 주어진 app.py를 살펴보자. 별다른 특이 사항은 없으며 입력하는 값에 “ “ (더블쿼터)를 적용한 후 쉘을 통해 명령어를 실행하는 방식으로 동작한다.

APP = Flask(__name__)


@APP.route('/')
def index():
    return render_template('index.html')


@APP.route('/ping', methods=['GET', 'POST'])
def ping():
    if request.method == 'POST':
        host = request.form.get('host')
        cmd = f'ping -c 3 "{host}"'
        try:
            output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5)
            return render_template('ping_result.html', data=output.decode('utf-8'))
        except subprocess.TimeoutExpired:
            return render_template('ping_result.html', data='Timeout !')
        except subprocess.CalledProcessError:
            return render_template('ping_result.html', data=f'an error occurred while executing the command. -> {cmd}')

    return render_template('ping.html')


if __name__ == '__main__':
    APP.run(host='0.0.0.0', port=8000)

입력되는 명령어에 더블쿼터가 적용되기 때문에 더블쿼터를 우회함과 동시에 cat flag.py 명령어를 Injection 해야한다.

하지만, 주어지는 웹 사이트에 값을 입력할 경우 요청한 형식과 일치하라는 말과 함께 명령어 실행이 이루어지지 않는다.

형식에 맞지 않게 입력할 경우

Ping 페이지의 코드를 살펴보자. Ping 페이지를 자세히 보면 정규식을 통해 입력값에 대한 패턴을 정해놓은 것을 알 수 있다. 정규식 패턴이 적용되어 있기 때문에 Burp Suite를 사용하여 Request 값을 변조하거나 크롬 개발자도구를 사용하여 코드를 수정해야 한다.

정규식 사용하여 입력값 패턴 확인

2가지의 방법 중 Burp Suite를 사용하여 문제를 해결하였다. (Burp Suite 다운로드 및 사용법은 포스팅할 예정이다.)

Proxy 설정을 하고 Ping 페이지에서 정규식과 일치하는 값(8.8.8.8)으로 Request 요청을 보낸다.

정규식과 일치하는 값 입력

Request 요청 값을 살펴보면 8.8.8.8 값이 정상적으로 들어간 것을 확인할 수 있다.

Request Value

8.8.8.8인 Request 값을 ";cat flag.py;echo" 으로 변경하면 더블 쿼터가 해제되고 cat flag.py 명령어가 정상적으로 실행되어 Flag를 획득할 수 있다.

Flag
💡
뒤에 echo 는 왜 넣을까? 앞의 더블 쿼터는 “ 로 간단하게 해제할 수 있지만 뒤에 존재하는 더블 쿼터의 경우 “로 처리하면 처리되지 않는다. 그렇기 때문에 echo 명령어를 사용하여 더블 쿼터를 해제하였다.

Flag


FLAG = 'DH{pingpingppppppppping!!}'

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T

'Dreamhack > Web hacking' 카테고리의 다른 글

file-download-1 Write-Up  (0) 2023.02.04
비관계형 데이터 베이스 그리고 NoSQL Injection  (0) 2023.01.30
simple-sqli Write-Up  (0) 2023.01.23
SQL Injection  (0) 2023.01.21
csrf-2 Write-Up  (0) 2023.01.21
    'Dreamhack/Web hacking' 카테고리의 다른 글
    • file-download-1 Write-Up
    • 비관계형 데이터 베이스 그리고 NoSQL Injection
    • simple-sqli Write-Up
    • SQL Injection
    壓倒
    壓倒
    악성코드 분석, 개발, 백준 등 나의 일지

    티스토리툴바