일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 시스템해킹
- reversing
- System
- ftz
- 순서도
- 워게임
- 웹해킹
- 드림핵
- 비박스
- 소프트웨어
- 네트워크
- 해킹
- WarGame
- CodeEngn
- XSS
- 리버싱
- 네트워크보안
- hacking
- bee-box
- network
- TCP
- 모의해킹
- 시스템
- Web
- 알고리즘
- 소프트웨어보안
- 웹
- webhacking
- dreamhack
- Webhaking
- Today
- Total
목록webhacking (6)
Without a Break

strcmp 함수를 무시할 수 있으면 플래그를 얻을 수 있다고 한다. 문제 사이트로 들어가면 패스워드를 입력할 수 있다. 패스워드 입력란 밑의 view-source를 누르면 소스코드를 볼 수 있다. 소스코드를 살펴보면, 사용자가 입력한 password와 실제 password를 strcmp(비교)하여 둘이 같으면(0) 플래그를 출력하는 것을 알 수 있다. PHP strcmp의 취약점을 이용해서 플래그를 얻을 수 있다는 것을 알 수 있다. PHP strcmp의 취약점은, 문자열이 아닌 배열을 인자로 넣게 되면 반환 값이 0이 된다는 것이다. 개발자 도구 요소에서 password를 배열로 바꿔주면 플래그를 얻을 수 있다.

코드 분석 @app.route('/login') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: userlevel = request.form.get('userlevel') res = query_db(f"select * from users where userlevel='{userlevel}'") if res: userid = res[0] userlevel = res[2] print(userid, userlevel) if userid == 'admin' and userlevel == 0: return f'hello {useri..

코드 분석 @app.route("/", methods = ["GET", "POST"]) def index(): input_val = "" if request.method == "POST": input_val = request.form.get("input_val", "") m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val) if m: return render_template("index.html", pre_txt=input_val, flag=FLAG) return render_template("index.html", pre_txt=input_val, flag='?') input_val에 입력된 값을 input_val에 저장 정규표현식 : dr → 아무..

[문제 파일] const BAN = ['admin', 'dh', 'admi']; filter = function(data){ const dump = JSON.stringify(data).toLowerCase(); var flag = false; BAN.forEach(function(word){ if(dump.indexOf(word)!=-1) flag = true; }); return flag; } 배열 BAN에 있는 문자열을 필터링한다. (admin을 쳤을 때 플래그가 바로 뜨지 않도록 한 코드) app.get('/login', function(req, res) { if(filter(req.query)){ res.send('filter'); return; } const {uid, upw} = req.qu..

[문제 파일] vuln() @app.route("/vuln") def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param 이용자에게 요청(입력)받은 param의 값을 소문자로 변경한다. xss_filter에 저장된 문자열은 필터링하여 *로 치환한다. flag() @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html") el..

해당 문제의 문제 파일은 다음과 같이 이루어져 있다. html 파일로 들어가면 타이틀 페이지로 들어가게 된다. 이제 여기서 개발자 도구로 들어가주면 (Ctrl+Shift+i / F12) 개발자 도구의 Sources 탭에서 소스 코드를 확인할 수 있다. 드림핵의 플래그 형태는 DH{..}로 구성되어 있으므로 소스 코드에서 드림핵의 플래그 형태인 DH를 검색하면 소스 코드의 main.scss 파일에서 플래그를 발견할 수 있다. 답 : DH{2ed07940b6fd9b0731ef698a5f0c065be9398f7fa00f03ed9da586c3ed1d54d5}