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

문제 파일을 디버거로 열었을 때의 모습 먼저 corret를 출력하는 입력값을 찾기 위해 corret 문자를 찾아준다. 해당 위치로 이동하면 test eax,eax에서 입력값과 정답을 비교하는 것을 알 수 있다. 따라서 그 위의 코드에 있는 7FF6042D1186에 정답이 있을 것 같으니 살펴보자 7FF6042D1186로 이동하니 20개의 문자열과 사용자의 입력값을 비교한다는 것을 알 수 있었다. 비교한 후, 7FF6042D3000의 주소 값을 호출하는 것을 보아 해당 위치에 플래그가 있을 것 같다. 해당 위치의 HEX DUMP를 살펴보니 20개의 문자열이 있었다. 이제 이걸 플래그로 변환해보자 코드를 작성하고 실행해주면 플래그를 발견할 수 있다.

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

플래그는 username이 admin일 때 index.html에 나타남 username은 sessionid에 저장되어 있음 sessionid는 4바이트의 랜덤 값을 hex로 변환한 값을 출력함 즉, 이 문제에서는 무차별 대입 공격을 사용하여 sessionid에 저장되어 있는 admin 계정을 찾아 패스워드(플래그)를 찾는다. 먼저, 코드에서 아이디와 패스워드를 알 수 있었던 guest 계정으로 로그인한다. burp suite를 통해 패킷을 캡처하면 guest의 sessionid가 함께 나온다. 무차별 대입 공격을 위해 캡처한 패킷을 send to Intruder로 Intruder로 보내준다. Payload type을 무차별 대입 공격(Brute forcer)으로 바꿔주고, Character set을 16..