| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Web
- 웹
- Webhaking
- 알고리즘
- 소프트웨어보안
- network
- 소프트웨어
- System
- 해킹
- 네트워크보안
- 웹해킹
- WarGame
- 모의해킹
- hacking
- webhacking
- 순서도
- 드림핵
- TCP
- 시스템
- dreamhack
- CodeEngn
- bee-box
- reversing
- 리버싱
- 비박스
- 네트워크
- 시스템해킹
- ftz
- 워게임
- XSS
- Today
- Total
목록Web (59)
Without a Break
SQL Injection을 사용해서 올바른 패스워드를 사용하지 않고 Neville로 로그인하는 문제 'Neville'로 로그인을 시도해서 버프 스위트 proxy로 인터셉트 무조건적인 참인 1=1을 사용해서 모든 정보를 출력하도록 유도한다. Neville로 로그인 성공한 것을 확인할 수 있다. 프로필도 볼 수 있다.
모든 날씨 데이터가 표시되는 SQL 문자열을 주입하는 문제 station을 선택하고 Go! 버튼을 누르면 station의 정보가 출력된다. 버프 스위트 proxy를 사용해서 Go! 버튼을 누를 때 인터셉트를 하면, 위와 같이 station 이 보인다. 1=1 을 사용해 무조건적인 참을 유도해서 forward 하면 모든 날씨 정보를 출력할 수 있다.
사용자 'Smith'의 이름을 사용해서 모든 신용카드 번호가 표시되는 SQL 문자열을 삽입하는 문제 Smith를 입력하면 Smith의 정보가 뜨는 것을 확인할 수 있다 SELECT * FROM user_data WHERE last_name = ' Smith' or '1'='1 '위와 같이 입력해주면 모든 신용카드의 정보를 출력할 수 있다.1=1 은 모든 문장이 참인 것을 의미한다. 즉, '사용자의 last_name이 Smith' 또는 '1=1' 무조건적인 참을 사용해서 모든 신용카드의 정보를 출력하도록 한다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
로그인 필터링을 우회하는 문제이다. 문제 페이지의 모습 소스코드를 살펴보니 'localhost'를 필터링하고 있음을 알 수 있다. 계정은 guest와 blueh4g의 막힌 계정 2개를 가지고 있고, guest와 blueh4g가 아니라면 플래그를 보여준다. 가지고 있는 계정의 id / password는 위와 같다. PHP 필터링은 대문자를 써서 우회할 수 있다. 따라서, Guest / guest 또는 Blueh4g / blueh4g1234ps 를 입력해주면 플래그를 얻을 수 있다. 플래그 발견
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..