'll Hacker
Command Injection 정리 본문
💡Injection?
악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법, 웹 애플리케이션을 대상으로 하는 인젝션 공격은 SQL Injection, Command Injection등이 있다.
Command injection은 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점
- 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생
- 입력한 임의 IP에 ping을 전송(in pyhton application)
os.system(“ping [user-input]”)
- 임의 파일을 읽기
os.system(“cat [user-input]”)
💡이런 방식으로 함수를 사용할 때 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행가능‼️
리눅스 셸 프로그램이 지원하는 메타문자를 통해 임의 명령어를 실행하여 셸을 획득할 수 있게 됨
&&, ;, | 등을 사용하면 여러개의 명령어를 연속으로 실행시킬 수 있음.
메타인지만 알고 있었는데 메타문자??
이건 또 뭐람 ㅋ
메타문자 종류
- `` = 명령어 치환, ``안에 들어있는 명령어를 실행한 결과로 치환됨.
- $( ) = 명령어 치환, $( ) 안에 들어있는 명령어를 실행한 결과로 치환됨. 이 문자는 중복 사용가능 (echo $(echo $(echo theori)))
- && = 명령어 연속 실행, 한 줄에 여러 명령어를 사용하고 싶을 때 사용, 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행
- || = 명령어 연속 실행, 한 줄에 여러 명령어를 사용하고 싶을 때 사용, 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행
- ; = 명령어 구분자, 한 줄에 여러 명령어를 사용하고 싶을 때 사용, 단순히 명령어를 구분하기 위해 사용, 에러 유무와 상과없음
- | = 앞 명령어의 결과가 뒷 명령어의 입력으로 들어감
@app.route('/ping')
def ping():
ip = request.args.get('ip')
return os.system(f'ping -c 3 {ip}')
⏩127.0.0.1을 입력하면 의도한대로 프로그램이 작동하는 것을 확인가능, 공격자는 입력값이 명령어의 일부로 실행되는 것을 확인하고, Command Injection을 시도가능
실습을 통해 익히기
https://dreamhack.io/wargame/challenges/44
코드 분석
ping -c 3 {host}의 형태로 들어가는 것 같다.
이렇게 나옴 따라서 플래그는 flag.py에 있으니까 다음과 같이 실행
형식에 맞게 실행시켜야한다고 함. 근데 command injection을 할려면 메타문자를 사용해서 해야한다.
따라서 f12 개발자도구를 열어서 pattern="어쩌구"를 지워준다!
똑같이 실행시켜주면 플래그가 나온다!
'Hacking > WebHacking' 카테고리의 다른 글
Server-side Request Forgery(SSRF) 정리 (1) | 2024.02.06 |
---|---|
Dreamhack wargame : image-storage write up (0) | 2024.02.06 |
NoSQL Injection 정리 및 dreamhack wargame : mango write up (0) | 2024.02.01 |
웹해킹 유용도구 : 개발자 도구 사용법 (0) | 2024.01.19 |
Dreamhack wargame : ex-req-ex write-up (4) | 2024.01.04 |