- [ 웹애플리케이션 해킹/해킹 실습하기 ](A9) Security Logging Failures - Logging Security2023-10-04 14:57:27로깅은 시스템 운영에 있어 매우 중요한 부분입니다. 로깅의 목적은 애플리케이션에 대한 운영 모니터링 및 디버깅 뿐만 아니라 해당 시스템에 접속하는 사용자들의 행위를 감사하기 위한 목적도 있습니다. 특히, 각종 보안 이벤트에 대한 모니터링을 위해서도 로깅은 매우 중요합니다. 1번 문제 소개 이 문제는 "admin”이라는 username로 로그인에 성공한 것처럼 보이게 하는 것입니다. 최초에 아래와 같은 화면이 나타납니다. 위와 같이 username과 password를 입력할 수 있도록 하는 텍스트 상자가 존재하고, 그 아래의 빨간색 영역에 웹서버의 log 파일이 표시됩니다. 우선 아래와 같이 아무 값이나 한번 입력을 해보면 입력한 username 값이 웹서버 log 파일 상의 가장 우측에 표시되는 것을 알..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A7) Identity & Auth Failure - Secure Passwords2023-10-04 14:46:02본 섹션에서는 강력한(strong, 보안적으로 강인한) 패스워드를 생성하고 안전하게 저장하는 방법에 대해 다룹니다. 1번 문제 소개 무차별 공격 시도에 강인하도록 충분히 strong한 패스워드를 입력하라는 간단한 문제입니다. 일반적으로 잘 알려진 패스워드 설정 규정과 같이 패스워드를 입력하면 아래와 같이 문제가 해결됩니다. [참고자료] https://www.kisa.or.kr/2060305/form?postSeq=14&lang_type=KO
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A7) Identity & Auth Failure - JWT tokens2023-10-04 14:35:21JWT(JSON Web Token) 토큰은 RFC 7519 open standard로서, JSON 포맷을 이용하여 사용자에 대한 속성 정보를 저장하는 방식이며, 사용자 인증이나 정보 교환에 사용됩니다. 1번 문제 소개 JWT 토큰 내에 저장되어 있는 user name을 알아내는 간단한 문제입니다. JWT 토큰은 base64 인코딩되어 있기 때문에, 아래와 같이 토큰 값을 base64로 디코딩하면 내용을 쉽게 알 수 있습니다. 2번 문제 소개 JWT 토큰을 변조하여 admin으로 로그인하고, 투표를 초기화시키는 문제입니다. 우선, proxy 도구를 사용하여 intercept를 on 시켜놓고, 사용자를 아래와 같이 Tom으로 변경합니다. (Guest 외에 다른 사용자 아무거나 선택하면 됨) 그러면 아래와 같..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A7) Identity & Auth Failure - Insecure Login2023-10-04 14:15:03본 섹션에서는 통신 구간의 암호화에 대한 이야기를 다루고 있습니다. 로그인 시에 암호화가 되어 있지 않으면, 중간에서 패킷 스니핑을 통해 데이터를 가로챌 수 있고, 이를 통해 계정 정보가 유출될 수 있는 위험이 존재하기 때문에, 로그인 데이터는 반드시 암호화되어 전송되어야 한다는 것입니다. 1번 문제 소개 문제 화면이 나오면 아래와 같이 Log in 버튼이 존재하는데, 이는 로그인 시의 계정 정보를 다른 사용자에게 전달되는 기능이라고 문제에 기재되어 있습니다. 이 때 전송되는 아이디와 패스워드를 아래 쪽 텍스트 박스 두 개에 각각 입력하고 Submit을 클릭하면 되는 문제입니다. Log in 버튼 클릭 시 데이터를 가로채기 위해서, 물론 Burp Suite와 같은 웹 Proxy 도구로도 값을 가로챌 수 ..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A7) Identity & Auth Failure - Authentication Bypasses2023-10-04 13:50:30Authentication Bypasses(인증 우회)는 여러 가지 방법으로 발생되지만 일반적으로 설정 또는 구현 로직 안에 특정 결함이 존재할 때 이를 통해 발생됩니다. 1번 문제 소개 2FA Password Reset 실제 PayPal에서 있었던 2FA 인증우회 문제점과 비슷한 형태의 취약점을 가진 문제로서, 아래와 같이 두 개의 text 값을 입력 받아서 내용을 확인하는 과정에서 해당 값을 알지 못해도 인증은 우회할 수 있도록 입력값을 조작하는 문제입니다. 두 개의 텍스트 입력 값을 전송하는 과정에서, 중간에 Burp Suite와 같은 Proxy 도구를 활용하여 전송되는 파라미터의 이름을 각각 다른 값으로 변경하여 전송시키면, 해당 파라미터값이 없을 때의 예외처리 로직 부재로 인해 패스워드 인증 절..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A3) Injection - SQL Injection (intro)2023-10-04 13:33:241번 문제 소개 1번 문제는 SQL에 대한 기본적인 개념과 사용법을 물어보는 문제로 조회 SQL Query를 사용하여 문제를 풀 수 있습니다. SQL이란 무엇입니까? SQL은 표준화된(1986년 ANSI, 1987년 ISO) 프로그래밍 언어로 관계형 데이터베이스를 관리하고 그 안의 데이터에 대해 다양한 작업을 수행하는 데 사용됩니다. 데이터베이스는 데이터 모음입니다. 데이터는 행, 열 및 테이블로 구성되고 인덱싱되어 관련 정보를 보다 효율적으로 찾을 수 있습니다. [그림1] 문제 화면 아래 쿼리문을 사용하여 Bob Franco의 부서를 검색하면 문제가 풀립니다. SELECT department FROM Employees WHERE last_name = 'Franco'; [그림2] 문제 풀이 화면 2번 문..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A2) Cryptographic Failures- Crypto Basics2023-09-29 10:39:561번 문제 소개 1번 문제는 인코딩과 암호화에 대한 차이에 대해서 물어보는 문제로 base64 인코딩을 이해하고 문제에 있는 base64 문자열을 디코딩하여 문제를 풀 수 있습니다. Base64 인코딩은 모든 종류의 바이트를 특정 범위의 바이트로 변환하는 데 사용되는 기술입니다. 이 특정 범위는 ASCII로 읽을 수 있는 바이트입니다. 이렇게 하면 비밀 키나 개인 키와 같은 바이너리 데이터를 더 쉽게 전송할 수 있습니다. 심지어 인쇄하거나 기록할 수도 있습니다. 인코딩은 되돌릴 수도 있습니다. 따라서 인코딩된 버전이 있으면 원본 버전을 만들 수 있습니다. [그림1] 문제 화면 문제에 있는 아래 base64 인코딩 문자열을 https://www.base64decode.org/ 사이트에 접속하여 base64..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A1) Broken Access Control - Missing Function Level Access Control2023-09-29 10:19:561번 문제 소개 HTML, CSS 또는 javascript를 사용하여 사용자가 일반적으로 액세스하지 않는 링크를 숨길 수 있습니다. 문제를 풀기 위해서는 숨겨진 항목을 찾아 활성화 시키면 됩니다. [그림1] 문제 화면 브라우저 개발자 도구를 활용하여 소스코드를 살펴보면 숨겨진 요소를 찾을 수 있습니다. [그림2] 숨겨진 메뉴 숨겨진 매뉴를 활성화 하면 문제에서 요구하는 값을 찾을 수 있고 이를 입력하면 문제가 풀리게됩니다. 2번 문제 소개 이전 문제에서 설명한 것처럼 때때로 애플리케이션은 액세스를 제어하기 위해 클라이언트 측 컨트롤에 의존합니다. 이를 우회하는 문제입니다. 지난 문제에서 수집한 정보(숨겨진 메뉴 항목)에 있는 URL을 사용하여 사용자 목록을 가져올 수 있는지 확인합니다. 문제 설명 그대로..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A1) Broken Access Control - Insecure Direct Object References2023-09-29 10:17:211번 문제 소개 많은 액세스 제어 문제는 인증되었지만 권한이 없는 사용자의 공격에 취약합니다. Insecure Direct Object References 문제를 풀기 위해서는 일반 사용자 인증이 필요합니다. 이 경우 계정의 아이디와 비밀번호는 'tom'과 'cat'입니다. [그림1] 로그인 화면 2번 문제 소개 공격 측면에서 브라우저에서 보이는 데이터와 Raw 응답과 차이가 존재합니다. 즉 Raw 응답에는 브라우저 화면/페이지에 표시되지 않는 데이터가 있는 경우가 많습니다. [그림1] View Profile 실행화면 [그림2] 숨겨진 응답값 확인 [그림3] 문제풀이 결과 3번 문제 소개 우리가 작업 중인 애플리케이션은 프로필에 관한 한 RESTful 패턴을 따르고 있는 것 같습니다. 많은 앱에는 권한이..
- [ 웹애플리케이션 해킹/해킹 실습하기 ](A1) Broken Access Control - Hijack a session2023-09-29 10:00:17자체적으로 세션 ID를 개발하는 애플리케이션 개발자는 보안에 필요한 복잡성과 무작위성을 통합하는 것을 종종 잊어버립니다. 사용자별 세션 ID가 복잡하고 무작위적이지 않은 경우 애플리케이션은 세션 기반 무차별 암호 대입 공격에 매우 취약합니다. [그림1] Hijack a session 문제 화면 문제 내용은 개발자가 세션 ID로 사용하기 위해 자체적으로 개발한 ‘hijack_cookie' 값을 예측하여 로그인을 우회하는 것이 문제 핵심 내용입니다. [그림2] 로그인 요청 화면 세션 ID를 추론하기 위하여 여러 번 요청을 수행하면 고정 값과 가변적인 값이 존재하며 파란색 값은 순차적으로 1씩 증가하다가 2가 증가되는 것을 확인할 수 있다. HTTP/1.1 200 OK Connection: close Set-..