간단한 웹해킹 문제
이전에도 비슷한 문제를 다룬적이 있었다.
(https://hackingstudypad.tistory.com/95)
문제 설명을 읽어보면
웹 개발자들이 코드에서 작은 실수를 했는데
혹시 그걸 찾아서 exploit을 해 플래그를 획득할 수 있는지 물어본다.
문제페이지 주소와 함께, 웹 소스코드도 같이 주어진다.
먼저 문제페이지에 접속했을때 화면이다.
다짜고짜 You are not admin! 이라는 문구가 출력된다.
대체 왜 이런 문구가 출력되는지 소스를 확인해본다.
#!/usr/bin/env python
from flask import Flask, session, render_template
from string import hexdigits
from random import choice
from os import getenv
app = Flask(__name__)
app.secret_key = choice(hexdigits) * 32
@app.route("/", methods=["GET"])
def index():
flag = "You are not admin !"
if session and session["username"] == "admin":
flag = getenv("FLAG")
return render_template("index.html", flag=flag)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(getenv("PORT")))
소스코드는 그렇게 길지 않다.
Python Flask 를 이용해 웹페이지를 만들었고,
session["username"]이 admin 일 경우 플래그를 출력하고 있다.
admin이 아니면 아까 봤던 You are not admin! 이 출력된다.
session["username"] 을 admin 으로 만들기 전에
한가지 확인해야 할 것이 있다.
Flask에서는 session 을 만들때 secret_key를 같이 넣어서 만든다.
여기서도 개발자들이 secret_key 를 넣고있는데
choice(hexdigists) * 32 라는 값을 넣고 있다.
이게 대체 무슨 값인지 한번 출력을 시켜봤다.
from string import hexdigits
from random import choice
a = choice(hexdigits) * 32
print(a)
출력시키는 코드는 이렇게 간단하게 짤수있다.
출력을 시켜보면 이런 값들이 나온다.
hexdigits 그러니까 16진수 값들(1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 중 하나를 골라 32번 출력하는 것이다.
secret_key에 어떤 값이 어떤식으로 들어갈 수 있는지 알았으니
이제 세션값을 만들어본다.
flask에서 쿠키값을 만들때는 특별한 방법으로 만든다.
flask-unsign 이라는 도구를 이용해서 해볼 수 있다.
pip3 install flask-unsign 이라고 입력하면 다운로드가 가능하다.
다운받고나서 이렇게 flask-unsign 이라고 입력하면 실행이 된다.
이제 옵션을 줘서 생성해주면 된다.
--sign 옵션을 줘서 쿠키를 생성하고, -c 옵션으로 쿠키로 만들 내용을 지정한다.
--secret 옵션으로 secret_key를 지정해주면 되는데
일단 테스트겸 2를 32번써서 만들어 봤다.
명령어를 입력하면 아래쪽에 base64 인코딩된 쿠키값이 생성된다.
이제 쿠키값을 수정하면 된다.
쿠키값을 수정할 때는 ModHeader 라는 크롬 확장프로그램을 사용했다.
https://chrome.google.com/webstore/search/modheader?hl=ko 이곳에서 다운로드 받을 수 있다.
Modheader에서 Request header의 Cookie를 session=만들어낸 쿠키값으로 입력해주고
문제페이지에서 새로고침하면 플래그가 출력되는것을 볼 수 있다.
시험삼아 2로 먼저 해봤는데 바로 성공해버렸다.
'CTF > 웹해킹' 카테고리의 다른 글
[HSCTF9] squeal - 웹해킹 / SQL Injection (54) | 2022.07.11 |
---|---|
[HSCTF9] gallery - 웹해킹 / LFI (57) | 2022.07.07 |
[HouseplantCTF] Pie generator - 웹해킹 / 패킷변조 (42) | 2022.06.26 |
[HackArmour CTF] LeChunk is back! - 웹해킹 / NoSQL Injection (72) | 2022.05.30 |
[EZCTF] Super Secure - 웹해킹 / SQL Injection (50) | 2022.05.21 |