일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- WarGame
- hacking
- 리버싱
- 웹
- ftz
- 모의해킹
- webhacking
- 시스템해킹
- 소프트웨어
- 드림핵
- 소프트웨어보안
- Webhaking
- CodeEngn
- 순서도
- bee-box
- 시스템
- TCP
- 네트워크보안
- 웹해킹
- network
- dreamhack
- 네트워크
- 비박스
- 알고리즘
- 워게임
- System
- XSS
- Web
- 해킹
- reversing
- Today
- Total
목록Web (16)
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('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 {host}' try: output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5) return render_template('ping_result.html', data=output.decode('utf-8')) except subprocess.TimeoutExpired: return render_template('ping_result.html', data='Timeout !') except s..

코드 분석 @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 → 아무..

문제 페이지로 들어가면 진짜 문자가 날라다닌다. 소스를 보면 각 문자 이미지가 있다. html 코드를 살펴보니 각 이미지 파일이 10 → 17 → 13 → 7 → ••• 순서로 있다. 아까 소스에서 발견한 각 이미지 파일의 문자를 코드에 있는 순서대로 배열하고 드림핵 형식을 맞춰주면 플래그를 찾을 수 있다.

[코드 분석] xss_filter(text) def xss_filter(text): _filter = ["script", "on", "javascript:"] for f in _filter: if f in text.lower(): text = text.replace(f, "") return text xss 공격을 막기 위한 필터링 script, on, javascript: 를 필터링 app.route("/vuln") @app.route("/vuln") def vuln(): param = request.args.get("param", "") param = xss_filter(param) return param /vuln 페이지에 접속했을 때의 동작 param의 값을 xss_filter를 통해 필터링하여 저..

문제 사이트에 접속하면 다음과 같은 화면이 나온다. command 문제라서 주소창에 명령어를 입력해봤지만 실행되지 않는다. 문제 코드를 확인하니 GET 메소드일 때는 실행이 안되고, GET 이외의 메소드일 때만 명령어가 실행된다는 것을 알 수 있었다. 버프 스위트를 사용해 문제 사이트의 패킷을 가로채서 리피터로 보낸다. 리피터로 보낸 후 GET 메소드를 HEAD 메소드로 바꿔주고, flag.py의 내용을 request bin으로 생성한 링크로 전송하는 코드를 작성한다. 요청을 수정하고 send 버튼을 눌러줬다. 전송 버튼을 누르면 요청에 대한 응답이 잘 이루어졌다는 200 OK가 나타난다. request bin을 확인하면 요청한 응답이 제대로 와서 플래그를 확인할 수 있다.