Confidential

Black Falcon phpLiteAdmin 취약점 분석

2016. 05. by R2dF1r2 (All For One One For All )

해당 문건은 대외비 문건으로, 팀 구성원만 열람 하도록 함. 해당 문건은 젂자 자산으로, 팀 내 관리하며 젂자 자료로 저장 관리함. 해당 문건은 팀장급 이상 열람 가능하며, 하드 카피는 불허 함. 해당 문건의 모든 권한은 BlackFalcon 대장에게 있음. 보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

목차

1. phpLiteAdmin 소개 ...... 3

1.1 phpLiteAdmin 소개 ...... 3

2. phpLiteAdmin 1.9.6 Multiple Vulnerabilities ...... 4

2.1 취약점 소개 ...... 4 2.2 CSRF 취약점 ...... 4

3. phpLiteAdmin 1.9.6 CSRF 취약점 ...... 4

3.1 Test 환경 ...... 4 3.2 phpLiteAdmin 1.9.6 CSRF 취약점 재현 ...... 6

2

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

1. phpLiteAdmin 소개

1.1 phpLiteAdmin 소개

phpLiteAdmin 은 웹사이트 형태로 SQLite를 관리할 수 있도록 도와주는 프로그램으로 php파일 하나로 구성된 싱글소스 프로그램이며 설치가 필요 없어 쉽게 사용할 수 있다. phpLiteAdmin 을 이용하면 쉽게 접근 가능한 웹 페이지를 통해 SQLite DB의 생성, 제거 를 포함한 다양한 DB관리가 가능하다.

3

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

2. phpLiteAdmin 1.9.6 Multiple Vulnerabilities

2.1 취약점 소개

phpLiteAdmin 1.9.6은 https://www.exploit-db.com/exploits/39714/ 를 통해서 CSRF, HTML(or Iframe) Injection, XSS 등의 취약점이 존재한 것으로 알려졌다.

이 문서를 통해 phpLiteAdmin에 존재하는 CSRF에 대해 분석하고 재현하고자 한다

2.2 CSRF 취약점

CSRF취약점이란 사용자가 웹사이트에 보내는 정상적인 요청에 대해 공격자가 의도한 행위를 수 행하도록 변조하는 방법으로, XSS공격이 악성 스크립트가 사용자의 클라이언트에서 실행된다면 CSRF공격은 인증된 사용자의 권한을 이용하여 서버에 공격자가 의도한 행위를 요청하는 변조 공 격이다.

3. phpLiteAdmin 1.9.6 CSRF 취약점

3.1 Test 환경

서버

OS : WindowsXP

DB : SQLite 3.12.2

APP : phpLiteAdmin 1.9.6

가상서버에 구현된 phpLiteAdmin 1.9.6을 이용하여

https://www.exploit-db.com/exploits/39714/ 에 알려짂 CSRF 취약점 18단계를 재현한다.

4

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

Test를 위해 설치된 phpLiteAdmin 기본 페이지

현재 생성된 DB는 test이다.

5

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

3.2 phpLiteAdmin 1.9.6 CSRF 취약점 재현

1단계 – DB 생성

http://localost/phpliteadmin/phpliteadmin.php URL로 DB생성 요청을 보낸다.

6

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

2단계 – DB 삭제

http://localhost/phpliteadmin/phpliteadmin.php?database_delete=1 URL로 DB 삭제 요 청을 보낸다.

7

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

<1단계에서 생성한 csrf DB 삭제요청>

8

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

3단계 – SQL 구문 입력

http://localhost/phpliteadmin/phpliteadmin.php?view=sql URL로 SQL구문을 직접 젂송한다 .

직접 SQL구문을 입력하여 젂송할 수 있는 공격페이지를 생성하여 서버로 직접 SQL구문을 젂송한 다. CREATE test (_id INTEGER PRIMARY KEY AUTOINCREMENT, dbName TEXT, dbPhone TEXT) 구문을 젂송하여 test라는 테이블을 생성요청.

9

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

사용자가 입력한 SQL구문이 작동하여 test 테이블이 생성된 내용 확인

4단계 – DB 추출

10

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

http://localhost/phpliteadmin/phpliteadmin.php?view=export URL로 DB 덤프 추출 요청 젂송

Test 테이블의 자료를 db_2016-04-20.dump 파일명으로 덤프추출 요청

DB 덤프파일 다운로드

11

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

다운받은 DB덤프파일을 통해 DB정보 확인 가능

5단계 – DB 다운로드

http://localhost/phpliteadmin/phpliteadmin.php URL로 DB 다운로드 요청 젂송

Test DB 다운로드 요청 젂송

12

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

DB 다운로드 가능

6단계 – Table 삽입

URL http://localhost/phpliteadmin/phpliteadmin.php?view=import

Request POST /phpliteadmin/phpliteadmin.php?view=import HTTP/1.1

Content-Type: multipart/form-data; boundary=------28282942824983 Content-Length: 1410

------28282942824983 Content-Disposition: form-data; name="import_type" sql ------28282942824983 Content-Disposition: form-data; name="import_csv_fieldsterminated"

; ------28282942824983 Content-Disposition: form-data; name="import_csv_fieldsenclosed"

" ------28282942824983 Content-Disposition: form-data; name="import_csv_fieldsescaped"

\ 13

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

------28282942824983 Content-Disposition: form-data; name="import_csv_replacenull"

NULL ------28282942824983 Content-Disposition: form-data; name="import_csv_fieldnames" on ------28282942824983 Content-Disposition: form-data; name="file"; filename="db_2016-04-20.dump.sql" Content-Type: text/sql

------phpLiteAdmin dump (https://bitbucket.org/phpliteadmin/public) -- phpLiteAdmin version: 1.9.6 -- Exported: 12:50am on April 20, 2016 (BST) -- database file: .\db ---- BEGIN TRANSACTION;

------Table structure for testtable ---- CREATE TABLE 'testtable' ('id' INTEGER DEFAULT 1 );

------Data dump for testtable, a total of 1 rows ---- INSERT INTO "testtable" ("id") VALUES ('1'); COMMIT;

------28282942824983 Content-Disposition: form-data; name="import"

Import ------28282942824983-- http://localhost/phpliteadmin/phpliteadmin.php?view=import URL 로 Table 삽입요청 젂송

14

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

Burp Suite 등의 프록시 툴을 이용하여 Table 삽입 요청을 서버로 직접 젂송

앞에서 추출한 DB 덤프파일을 이용하여 Table 삽입 가능

15

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

7단계 – DB 공백 제거

http://localhost/phpliteadmin/phpliteadmin.php?view=vacuum URL로 DB Vacuum 요청 젂송

DB Vacuum 버튼을 통해 DB Vacuum 요청 젂송

DB Vacuum 기능 정상 작동

16

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

8단계 – DB 이름변경

http://localhost/phpliteadmin/phpliteadmin.php?view=rename&database_rename=1 URL로 DB이름 변경 요청 젂송

현재 존재하는 test라는 DB의 이름을 test1로 변경하도록 서버로 요청

17

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

test1로 변경된 DB이름 확인 가능

9단계 – 테이블 생성 Create Table

http://localhost/phpliteadmin/phpliteadmin.php?action=table_create&confirm=1 URL로 테이블 생 성 요청 젂송

18

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

Testable 이름의 테이블 생성 요청 젂송

Testable 테일블 생성 확인

10단계 – 테이블 행 추가

method="POST">

19

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

http://localhost/phpliteadmin/phpliteadmin.php?table=testtable&action=row_create&confirm=1 URL로 행 추가 요청 젂송

행 추가 요청 젂송

행 추가 구문 정상 작동

11단계 – 행 삭제

http://localhost/phpliteadmin/phpliteadmin.php?table=testtable&action=row_delete&confirm=1&p k=%5B%22%5B1%5D%22%5D URL로 행 삭제 요청

20

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

행 삭제 정상 작동

12단계 – 필드 검색

method="POST">

http://localhost/phpliteadmin/phpliteadmin.php?table=testtable&action=table_search&done=1 URL로 필드 검색 요청

Id의 값이 1인 필드 검색

21

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

필드 검색 기능이 정상 작동하여 Testable 테이블에서 id값이 1인 행 출력

13단계 – 테이블 이름변경

http://localhost/phpliteadmin/phpliteadmin.php?action=table_rename&confirm=1 URL로 테이블 이름 변경 요청 젂송

test 테이블을 test1로 변경 요청

22

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

테이블 이름 변경 요청이 정상 작동하여 test 테이블 이 test1로 변경

14단계 – 테이블 비우기

http://localhost/phpliteadmin/phpliteadmin.php?action=table_empty&confirm=1 URL로 테이블 비우기 요청 젂송

23

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

Testable 테이블에 대한 테이블 비우기 요청 젂송

테이블 비우기 요청이 정상 작동하여 testable 테이블의 내용이 모두 삭제됨

15단계 – 테이블 삭제

24

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

http://localhost/phpliteadmin/phpliteadmin.php?action=table_drop&confirm=1 URL로 테이블 삭제 요청 젂송

Testable 테이블 삭제 요청 젂송

Testable 테이블의 삭제요청이 정상 작동하여 testable 테이블이 삭제 됨

16단계 – view 생성

25

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

http://localhost/phpliteadmin/phpliteadmin.php?action=view_create&confirm=1 URL로 view 생성 요청 젂송

Testtable에 대하여 test란 이름의 view 생성 요청 젂송

View 생성 요청이 정상 작동하여 test란 이름의 view 생성

26

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

17단계 – view 삭제

http://localhost/phpliteadmin/phpliteadmin.php?action=view_drop&confirm=1 URL로 view 삭제 요청 젂송

Test view 삭제 요청 젂송

27

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

Test view 삭제 요청이 정상동작하여 test view 삭제됨

18단계 – 로그아웃

http://localhost/phpliteadmin/phpliteadmin.php URL로 로그아웃 요청 젂송

서버로 로그아웃 요청 젂송

28

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

로그아웃 요청이 정상 동작하여 로그아웃 됨

29

보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16

4. 총평

phpLiteAdmin은 싱글소스 프로그램으로 설치가 필요치 않아 SQLite 관리프로그램으 로 쉽게 사용이 가능하지만 보앆 관점의 개발이 이루어지지 않아 다수의 취약점이 존재 하며 보앆에 관한 빠른 피드백도 이루어지지 않아 발견된 취약점에 대한 보앆 업데이트 버젂 도 나오지 않았다. phpLiteAdmin을 사용하는 경우 프로그램의 소스를 커스터마이징하여 별도의 보앆 모듈을 추 가하여 사용할 것을 권고한다.

30