2023. 9. 27. 13:46ㆍWeb Hacking/Dream Hack_CTF
총 9개의 CTF
[ 1 ] 64se64
http로 문제 사이트 접속
Elements 를 살펴보니
64se64_encoding이란 이름으로 어떠한 값이 숨겨져 있음을 확인
64se64란 이름과 값을 보아하니
base64로 인코딩 되어있는것같았다
그래서 base64디코딩을 진행시켜보았다
디코딩하니 파이썬 코드가 나왔다
VScode에서 코드를 실행시켜보니
DH{} 형식의 Flag값을 발견 !!
(+Python 한글 깨짐 현상이 발생하여 맨 윗 줄에
아래의 코드를 다 utf-8로 인코딩 시켜주는 #-*-encoding:utf-8-*- 을 추가해 주었다)
Flag값 입력
[ 2 ] baby-linux
자세한 문제 풀이 :
https://mssongh.tistory.com/19
리눅스 명령어를 실행하는 웹 서비스 페이지 접속
![]() |
![]() |
pwd 입력시, /app경로에 있음을 확인
ls명렁어 입력시, /app 경로 안에 app.py, dream, hint.txt, requirements.txt, static, templates 이름의 파일 및 폴더가 있음을 확인
hint.txt 파일에 문제 힌트가 있을것을 예상하여
cat hint.txt 명령어로 파일내용을 확인했을때, ./dream/hack/hello 경로에 flag가 있다는것을 알 수 있음
![]() |
![]() |
현재 경로에서 ./dream/hack/hello경로로 진입후, 디렉터리 목록을 출력하기 위해 cd dream/hack/hello && ls 입력 시, flag.txt파일이 있음을 확인 |
해당경로로 들어가 flag.txt 파일을 열기위해 cd ./dream/hack/hello && cat flag.txt 입력시, No!가 출력 |
웹 서비스를 설정한 코드에서 flag 값이 나오는것을 막아놨다고 예상
그래서 문제 파일을 살펴봄
문제 파일 다운로드
파일 다운로드 후
*/ ( app.py파일은 디렉터리 목록에서도 확인 가능)
Visual Studio Code 에서 app.py파일 오픈
App.py파일 분석
App.py파일을 살펴보았을때 Flask를 import하여 사용 중인 것을 확인 가능
따라서, 이 코드는 Flask라는 웹 프레임워크를 이용하여 만든 웹 서버코드이며
@APP.route('/', methods=['GET', 'POST'])
|
' / ' 페이지, 즉 메인 페이지에서 GET, POST메소드만 사용가능하며 |
if request.method == 'POST': | 만약 POST 메소드 요청을 받았다면 |
user_input = request.form.get('user_input') | user_input = 웹 페이지의 리눅스 명령어 입력창에 입력한 값 |
cmd = f'echo $({user_input})' | cmd = 그 입력한 값을 리눅스 명령으로 처리 |
if 'flag' in cmd:
return render_template('index.html', result='No!')
|
하지만, cmd(=input 입력창)에 'flag'문자 입력시 결과 값을 No!로 반환하도록 설정됨 |
그래서 cd dream/hack/hello && cat flag.txt 입력시, flag문자가 들어있어 No!가 출력
이렇게 문자 필터링이 되어있는 것을 확인, flag.txt 파일 내용을 보려면 필터링을 우회해야함
<필터링 우회>
flag라는 문자를 'f'lag로 바꿈으로서 문자 필터링 우회 시도
cd ./dream/hack/hello && cat 'f'lag.txt 입력시
( && - 앞의 명령어가 성공했을 때 다음 명령어 실행 )
필터링이 우회되고 flag.txt파일 내용이 보임으로써 플래그를 발견 !!
[ 3 ] Exercise: Welcome-Beginners
http를 통한 접속은 안됨
nc 명령어로 시스템에 접속하여 문제에 접근
nc로 접속 후 Dreamhack 을 입력하라는 구문을 보고
Dreamhack 입력 시, DH{}형식의 Flag 값을 획득 !
[ 4 ] Exercise: SSH
터미널에 ssh 를 입력하여 OpenSSH가 실행중인지 확인
아래 예시를 참고하여 문제에 주어진 id, pw, host, port를 입력
ssh chall@host3.dreamhack.games -p 20749
를 입력하여 ssh접속 요청 후,
패스워드 dhbgssh 입력 시
성공적으로 SSH접속이 된것을 확인하였다
아래와 사진을 통해 ls 목록에 flag파일이 존재한다는것을 알고
flag 파일의 내용을 확인하니
flag 값 발견 !!
[ 5 ] Exercise: Doker
문제 파일을 안에 deploy 폴더에 있는 flag파일을
HxD로 오픈 시,
Flag 획득
[ 6 ] blue-whale
$ wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb
$ sudo apt install ./dive_0.9.2_linux_amd64.deb
$ dive dreamhackofficial/blue-whale:1 으로 dive 환경으로 간 뒤
RUN /bin/sh -c touch python3 -c "print(open('./flag', 'r').read())" # buildkit 로 가서
flag의 DH 값 확인
docker pull dreamhackofficial/blue-whale:1
CI=true dive dreamhackofficial/blue-whale:1
명령어 입력시 Flag 획득
[ 7 ] ex-reg-ex
문제 화면을 살펴보았을때,어떤 값을 보내면 flag를 보여주는것으로 예상된다
문제 파일을 다운로드하여
app.py 파일을 살펴보니
아니나 다를까 input에 " dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+ "라는 정규표현식을 풀어 값을 넣게 되면
Flage가 출력되도록 코드가 이루어져 있었다
위의 정규표현식을 분석해보면
dr + 5 ~7자리 글자 + e + 숫자 + am@ + a~z까지의 3~7자리 글자 + . + 글자 반복 이다.
따라서
drssssse1am@sss.sss 값을 input 했을때
아래와 같이 Flag 값이 나온다
[ 8 ] phpreg
http접속하여 문제 페이지 확인하여 살펴보니
Step1과 Step2 두가지 조건을 맞춰야 Flag를 얻을 수 있다는 것을 알 수 있음
문제 파일도 다운로드 했다
우선 index.php는 별내용이 없었고
Step2.php를 살펴보니 다음과 같은 부분이 있었다
// pw filtering if (preg_match("/[a-zA-Z]/", $input_pw)) { echo "alphabet in the pw :("; } |
알파벳을 포함 할 수가 없음을 뜻함 |
$name = preg_replace(“/nyang/i”, “”, $input_name); | /i는 대소문자를 구분하지 않는다는 뜻. nyang을 공백으로 바꿔버린다는 뜻 |
$pw = preg_replace(“/\d*@\d{2,3}(31)+[^0-8]!/”, “d4y0r50ng”, $input_pw); | 마찬가지로 /\d*@\d{2,3}(31)+[^0-8]!/ 정규표현식을 d4y0r50ng로 바꿔버린다는 뜻 |
if ($name === “dnyang0310” && $pw === “d4y0r50ng+1+13”) |
name과 pw에 들어가야 하는 값을 의미 |
< id >
단어가 공백으로 치환되는 것은 아래와 같이 쉽게 우회 가능하다.
dnnyangyang0310 --> dn yang0310 --> dnynyangang0310
< pw >
정규표현식 /\d*\@\d{2,3}(31)+[^0-8]\!/에 만족하는 값으로는 1@11319!+1+13 가능
최종 패스워드 값을 1@11319!+1+13 로 대입
id,pw를 입력하자
Step2 화면으로 넘어갔다
문제에서 플래그는 ../dream/flag.txt에 위치한다고 했으나
아래 조건식 때문에 flag라는 문자를 입력하지 못한다
else if (preg_match("/flag/i", $cmd)) {
echo "<pre>Error!</pre>";
}
하지만 *를사용하여 flag 값을 읽어올 수 있었다
cat ../dream/*.txt를 입력하면 다음과 같이 flag값을 확인 할 수 있다
[ 9 ] dreamhack-tools-cyberchef
위의 설명대로
문제 파일을 다운로드 받아 index.html을 열면
위의 문자를 보고
Rail Fence 암호화 -> Base64 인코딩-> ROT13 암호화 순서로 진행하니
<Rail Fence 암호화>
Base64 인코딩
ROT13암호
'Web Hacking > Dream Hack_CTF' 카테고리의 다른 글
Dreamhack CTF Season 3 Round #2 (🌱Div2) / baby-linux 문제 풀이 (0) | 2023.04.22 |
---|---|
드림핵_WEB_NOTE (0) | 2023.02.16 |