안녕하세요 !
이번 시간은 애플리케이션 보안 세 번째 시간에 대해 정리하도록 하겠습니다.
OWASP TOP 10 기준
- 톰캣 취약점 : 접근제어 미흡, 기본 계정이 존재한다.
- webdav 취약점 : 보안 설정 미흡하다.
1. 인증 처리 미흡
- 관리자 권한 획득 할 수 있는 것.
관리자 페이지가 있어요 ! - > 10페이지 ? -> 권한 부여 ?!
관리자에서 사용하는 특정 파라미터 값 조작 / 쿠키 값 조작 ?!
- 회원가입 단계에서 주민번호, 중요정보 우회 ?!
- 다른 사용자의 게시물, 정보 조회/ 수정 ?!
멀티팩터 - 멀티채널인증 !
2. 중요 정보 포함 여부 !
- 클라이언트 스크립트에서 중요 정보 ( HTML, JAVASCRIPT )
value - "" 파라미터 값 ! ~
개발 서버 -> 스테이지 서버 -> 운영 서버 !
실습을 하도록 하겠습니다.
bwapp 홈페이지에서 Administrative portals 페이지를 풀어보는 문제 입니다. 힌트는 URL이 보이네요. 참고로 low로 설정 했습니다.
bWAPP/smgmt_admin_portal.php?admin=0 을 1로 바꾸어 주면 됩니다.
이번에는 미디움으로 풀어보도록 하겠습니다.
버프 스위트에서 쿠키 값을 보면 admin이 0으로 설정되어 있는 것을 볼 수 있는데 1로 설정해서 바꾸어 줍니다.
해결된 것을 볼 수 있습니다.
여기서 쿠기 값이란 ?
쿠키는 웹 브라우저와 웹 서버 간에 정보를 교환하기 위해 사용되는 작은 데이터 조각입니다. 이 정보는 클라이언트에 의해 저장되며, 이후에 동일한 서버나 관련된 서버로 다시 전송될 수 있습니다.
쿠키는 주로 세션 관리, 개인화, 추적 등과 같은 다양한 용도로 사용됩니다. 일반적으로 웹 사이트는 쿠키를 사용해서 사용자가 로그인 상태인지, 언어 설정이 무엇인지, 장바구니에 어떤 상품이 있는지 등을 추적하고 관리합니다. 쿠키는 이름과 값의 쌍으로 이루어져 있습니다. 일반적으로 서버에서 클라이언트로 전송되는 HTTP 헤더의 일부로 설정됩니다. 클라이언트는 쿠키를 수신하고 그것을 나중에 같은 서버에 요청할 때마다 다시 보내게 됩니다.
1. 유효 기간 : 쿠키가 얼마 동안 유효한지를 나타내는 시간입니다. 이 기간이 지나면 쿠키는 만료되어서 더 이상 사용되지 않습니다.
2. 세션 쿠키 : 이 쿠키는 사용자의 세션이 종료되면 자동으로 삭제됩니다. 사용자가 브라우저를 닫거나 로그아웃 할 때까지만 유지 됩니다.
3. 영구 쿠키 : 이 쿠키는 지정된 만료 날짜 이후에도 유지가 됩니다. 이것은 사용자가 다시 방문할 때까지 유지합니다.
이번에는 미디움으로 설정을 하고 비밀번호를 해체하도록 하겠습니다.
bWAPP 의 변수에 보면 char At () 이렇게 배열로 되어 있습니다. 폼 데이터의 값이 value 가 됩니다.
그 배열들을 var bWAPP = "bash update killed my shells!" 여기에 분석하면 정답이 나옵니다. 따라서 비밀번호는 hulk smash! 가 나옵니다.
해결이 완료 되었습니다.
이번에는 회원가입 단계에서 주민번호, 중요 정보를 우회할 수 있는지 실습해보겠습니다.
우선 쇼핑몰 홈페이지에 접속해서 회원 가입 페이지로 이동합니다.
회원 가입 페이지에서 버프 스위트로 우회하기를 하려고 합니다.
여기서 잠깐 !
form 함수는 HTML에서 다룰 때 자주 사용됩니다. 일반적으로 폼은 텍스트 상자, 라디오 버튼, 체크 박스 등과 같은 입력 요소와 함께 제출 버튼을 포함합니다. 웹 개발에서 "form 함수" 라는 용어는 일반적으로 서버 측 코드에서 웹 폼 데이터를 처리하고 다루는 함수를 지칭할 때 사용될 수 있습니다. 이것은 사용자가 폼을 제출할 때 이를 처리하고 처리된 데이터를 저장하거나 처리하는데 사용됩니다.
이렇게 버프 스위트로 HTML, 자바 스크립트 쪽으로 이동합니다.
그리고 function jumin 1() 에서부터 document.form.submit() 까지 모두 내용을 다 지워버립니다.
화면을 봤을 때 아무것도 변한 것이 없어 보이지만 이미 버프 스위트를 통해서 자바 스크립트 부분을 수정했기 때문에 그냥 정보를 입력하고 넘어가면 됩니다.
개인 정보 입력 부분의 페이지로 넘어 왔습니다.
버프 스위트로 와서 인셉트 온 해주고 다시 자바 스크립트 내용을 수정합니다.
역시나 마찬가지로 document.form.action 까지 남겨두고 나머지를 다 지워줍니다.
함수는 절대 지우면 안됩니다. 왜냐하면 실행이 되지 않기 때문입니다.
function send() 부터 docment.form.action 까지 전부 지워 줍니다.
그리고 인터셉트 오프를 하고 회원 가입 해줍니다.
이번에는 모의해킹 쇼핑몰 다른 페이지에서 버프 스위트로 포워딩 하여서 자바 스크립트, HTML 를 포워딩 하였습니다.
실습 내용은 다른 사용자의 게시물, 정보 조회 및 수정을 하려고 합니다. 실무에서 가장 제일 많이 나오는 내용입니다.
내용은 지우는 것은 좋지만 문법은 지키면서 지워야 실행이 됩니다.
회원 가입을 하고 나서 문의 게시판에다가 1:1로 글을 작성합니다. 그리고 나서 다른 사람들의 게시물 열람, 수정을 해보도록 하겠습니다.
idx 에 보면 B9499였는데 497 아무 숫자로 바꾸어 줍니다.
이러면 다른 사용자의 게시물로 이동하는 것을 볼 수 있습니다. 여기서 수정이나 삭제 또한 할 수 있습니다.
/board_lock.asp?data=idx%A1%B9617
/board_view.asp
##password
board_edit.asp
board_edit_ok.asp
이 중에서 board_edit_ok.asp 유일하게 이것만 패스워드를 물어보질 않습니다. 또한, 수정도 가능합니다.
ask_view.asp - > 취약점 ! 아까 보았던 1대1 게시판에는 취약점이 있습니다.
이번에는 투표 결과에서 현재 진행형으로 바꿀 수 있는지 확인하겠습니다.
if(Status=="last") alert("기간이 만료된 설문조사 입니다."); 라는 문장에 조건문 != 로 바꾸어 줍니다.
if(Status!="last") alert("기간이 만료된 설문조사 입니다."); 조건문을 바꾸어서 기간이 만료된 설문조사라는 것을 해체시켜줍니다.
설문 조사에서 투표하기가 가능하게 됩니다.
이번에는 문의 게시글에 들어가서 다시 인터셉트 온으로 잡아줍니다.
센드 투 리피터를 클릭해서 리피터로 갑니다. 그리고 리피터에서 센드를 클릭하여 줍니다.
리스폰 랜더로 들어가서 보면 화면이 나오는 것도 볼 수 있습니다.
이번에는 센드 투 인트루더로 들어가서 봅니다. 인트루더 같은 경우는 본인이 가지고 있는 그런 사전 파일들 아니면 특정한 패턴, 파라미터들을 반복해서 넣을 수 있습니다.
그리고 바꿀 부분에 add$ 를 클릭해서 지정합니다.
그리고 페이로드로 이동해서 넘버쪽으로 간 뒤에 페이로드 셋팅에서 FROM, TO에서 숫자를 지정해줍니다. 그 다음 스타트를 눌러주면 됩니다.
이렇게 여러가지 Result 의 값을 확인 할 수 있습니다.
여기서 잠깐 !
Request ( 요청 ) 과 Response ( 응답 ) 는 웹 기반 시스템에서 사용되는 용어로 클라이언트와 서버 간의 통신을 설명합니다.
Request ( 요청 )
- 클라이언트가 서버에게 보내는 메시지를 나타냅니다. 요청은 클라이언트가 서버에게 원하는 동작을 명시하고 필요한 데이터를 제공합니다.
- HTTP 프로토콜에서는 요청은 주로 HTTP 메소드 URL, 헤더, 바디 등의 요소로 이루어집니다.
- 예를 들어서 웹 브라우저에서 웹 페이지를 요청하면 클라이언트는 서버에게 해당 페이지의 URL 을 포함한 GET 요청을 보냅니다.
response ( 응답 )
- 서버가 클라이언트에게 보내는 메시지를 나타냅니다.
- 응답은 서버가 클라이언트의 요청에 대해 결과를 포함하고 있습니다.
- HTTP 응답은 일반적으로 상태 코드, 헤더, 본문 등으로 구성됩니다.
예를 들어서 서버에서 웹 페이지 요청에 대한 응답으로 HTML 문서와 함께 상태 코드 200 OK를 보낼 수 있습니다.
이렇게 리스폰에서 랜더를 통해 현재 어떤 페이지인지 알아 볼 수 있습니다.
* XSS 취약점
XSS 취약점은 웹 애플리케이션에서 발생하는 보안 취약점 중 하나 입니다. XSS 취약점은 악의적인 사용자가 웹 페이지에서 악성 스크립트를 삽입하여서 다른 사용자들에게 악의적인 동작을 유도할 수 있는 상황을 의미합니다.
- Reflected XSS ( 반사 XSS )
사용자로부터 입력 받은 데이터가 웹 페이지에 반사되는 경우 발생합니다. 예를 들어서 검색어나 사용자 입력값이 웹 페이지에 그대로 출력되고 이에 대한 필터링이나 이스케이핑이 제대로 이루어지지 않는 경우에 발생할 수 있습니다.
공격자는 악성 스크립트를 URL 의 쿼리 문자열이나 입력 폼 등을 통해 전달되고 이것을 희생자가 클릭할 때 실행될 수 있도록 설계합니다.
- Stored XSS ( 저장 XSS )
사용자가 입력한 데이터가 서버에 저장되고 이것을 다른 사용자들이 볼 수 있는 위치에 출력될 때 발생합니다. 예를 들어서 게시글, 댓글, 프로필 정보 등에 악성 스크립트가 삽입되어 저장되고 이것을 다른 사용자가 페이지를 로드할 때 실행됩니다.
공격자는 악성 스크립트를 입력 폼이나 게시판과 같은 기능을 통해 전달하고 이를 웹 애플리케이션이 적절하게 처리하지 않아서 발생 할 수 있습니다.
XSS 취약점이 성공적으로 이용되면 공격자는 사용자의 세션 쿠키를 탈취하거나 사용자의 브라우저를 제어하여서 사용자를 속이고 악의적인 동작을 수행하도록 유도할 수 있습니다. 따라서 XSS 취약점을 방지하기 위해서는 사용자 입력 값을 적절하게 이스케이핑 하고 출력 시에는 HTML 엔티티로 변환하는 등의 안전한 출력 방법을 사용해야 합니다. 또한, 보안 정책을 적용하여서 외부 도메인에서의 스크립트 실행을 차단하는 등의 조치가 필요합니다.
정리하자면 !
- 사용자 브라우저를 제어하여서 악의적인 사이트로 유도할 수 있는 스크립트 삽입 취약점 !
- 클라이언트 스크립트 ( HTML, JS )
XSS 취약점을 이용해서 어떠한 공격을 하면 ?
1. 악성코드 배포를 가능합니다.
2. 사용자의 쿠키 정보를 획득하여서 권한을 획득합니다.
3. 피싱 사이트 유도 가능하게 합니다. -> 계정 정보를 탈취합니다.
4. CSRF 공격을 통해서 사용자가 임의로 데이터를 수정할 수 있습니다.
끝
'애플리케이션 보안' 카테고리의 다른 글
애플리케이션 보안 [다섯 번째 정리] (0) | 2024.04.18 |
---|---|
애플리케이션 보안 [두 번째 정리] (0) | 2024.03.23 |
애플리케이션 보안 [네 번째 정리] (0) | 2024.03.19 |
애플리케이션 보안 [첫 번째 정리] (4) | 2024.03.18 |