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

[문제 파일] 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 subprocess.CalledProcessError: return rend..

[문제 파일] 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..

'csrf_2.php' 페이지의 개발자 도구에서 소스 코드를 확ㅇ니해 보면 소스 코드에 'account' 변수와 'amount' 변수가 노출되어 있다. => account 변수는 계좌번호, amount 변수는 이체할 금액 'xss_stored_1.php' 페이지로 이동하여 amount 변수의 값에 마이너스 값을 입력하여 계좌의 돈을 증가하게 하는 height, width가 0인 이미지 태그를 입력한다. 조작한 이미지 태그가 있는 블로그에 사용자들이 접근할 때마다 다음과 같이 계좌의 돈이 증가한다. 이 외에도 account 변수를 조작하여 원하는 계좌로 돈을 입금할 수 있다. amount 변수에 입력한 만큼 계좌에 있는 금액이 account 변수에 입력한 계좌로 이체된다.

'htmli_stored.php'에서 넓이와 높이가 0인 이미지 태그에 사용자 비밀번호를 변경하는 페이지를 호출하여 비밀번호를 evil로 변경하는 URL을 입력한다. 제출 후 'sqli_16.php' 페이지에서 변경된 비밀번호 evil을 입력하면 로그인에 성공한다 csrf_1.php 페이지는 새로운 비밀번호를 입력하는 password_new 변수를 mysqli_real_escape_string을 사용하여 우회 => SQL 인젝션 등 다른 공격이 불가능 mysqli_real_escape_string 함수는 SQL 문법에서 사용되는 특수 문자들에 백슬래스 붙여 입력 값을 SQL 문법으로 인식되지 않게 방어하는데, 백슬래시가 붙는 문자는 NULL, \n, \r, ',",^Z이이다. => SQL 인젝션으로 현재..

[문제 파일] 데이터베이스 DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassword char(100));') db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");') db.commit() db.close() 데이터베이스 파일이 존재하지 않는 경우 파일을 생성하고 연결한다. 유저 테이블을..

[문제 파일] 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..

[문제 파일] vuln() def vuln(): return render_template("vuln.html") vuln.html을 렌더링한다. flag() @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param") if not check_xss(param, {"name": "flag", "value": FLAG.strip()}): return '' return '' GET method를 요청받았을 때, flag.html 페이지를 렌더..

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