일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 워게임
- webhacking
- 알고리즘
- 리버싱
- 네트워크
- hacking
- WarGame
- Web
- 드림핵
- reversing
- 웹해킹
- 소프트웨어
- 웹
- 순서도
- 시스템해킹
- TCP
- ftz
- CodeEngn
- Webhaking
- 소프트웨어보안
- XSS
- 비박스
- 모의해킹
- 시스템
- System
- 네트워크보안
- bee-box
- dreamhack
- network
- 해킹
- Today
- Total
목록드림핵 (25)
Without a Break

코드 분석 @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를 통해 필터링하여 저..
보호되어 있는 글입니다.

문제 파일을 디버거로 실행하면 위와 같이 뜬다. "correct"가 출력되는 입력값을 찾아야하니 문자열로 가보자 correct가 있는 위치로 이동하면 위와 같은 위치로 이동한다. 어셈블리 코드를 확인해보면 test eax,eax에서 입력값과 정답을 비교하는 것을 확인할 수 있었다. 그 위의 7FF799851000의 위치에 플래그가 있는 것 같으니 이동해보자 rcx(input값)와 7FF799853000의 값을 한 글자씩 18번 비교한다. 7FF799853000의 위치에 정답이 있는 것 같음 7FF799853000의 HEX DUMP는 위와 같다. 24개의 문자열이 있고, 이 문자들로 xor 연산을 통해 입력값과 비교한다. 따라서 HEX 값을 문자열로 변환시키기 위해서는 역연산을 해야한다. 1. (input..

실행 파일을 디버거로 열어준다 correct를 출력하는 입력값을 찾아야하니 문자열로 가보자 이동해보니 correct를 발견할 수 있었다. 해당 위치로 이동해보자 이동해보니 test eax,eax로 input 값과 정답을 비교하고 correct를 출력한다. 비교 후 correct를 출력하기 전에 출력하는 7FF6D04B1000의 위치로 이동해보자 rcx(input값)와 7FF7D04B3000의 값을 한 글자씩 12번 비교한다. 7FF7D04B3000에 플래그가 있는 것 같으니 해당 위치로 이동해보자 HEX DUMP에 플래그가 있었다