PostgreSQL은 오픈소스 객체-관계형 데이터베이스 관리 시스템(RDBMS)이다. 다양한 기능과 확장성을 지원하여 다양한 응용 프로그램에서 데이터 관리를 위해 사용되는 서비스이다.

테스트 환경은 Ubuntu 20.04이며, 아래 명령어를 사용하여 PostgreSQL을 설치할 수 있다.

$ sudo apt update
$ sudo apt install postgresql postgresql-contrib

설치를 마친 postgreSQL은 기본적으로 localhost에서만 접근 가능하도록 설정되어 있다. 통신 테스트를 위해 외부로부터 들어오는 트래픽을 허용하도록 설정 파일을 수정해야 한다. 시스템 내에서 postgresql.conf 파일을 찾아 파일 내 listen_addresses 값을 아래와 같이 변경한다.

$ sudo nano /etc/postgresql/12/main/postgresql.conf

listen_addresses = "*"

그 후 5432 포트에 대한 방화벽을 설정하고 postgresql을 재시작 하면 서버 구축이 완료된다.

$ sudo ufw allow proto tcp from any to any port 5432
$ sudo systemctl restart postgresql

 

구축된 서버와의 통신을 위해 클라이언트 프로그램으로 python의 ‘psycopg2’ 라이브러리를 사용하였다. 이 라이브러리를 이용하여 postgreSQL 서버에 접속 요청을 보낸 후 응답 결과에 따라 5432 포트에서 서비스 실행 여부를 식별하였다. 테스트를 위해 작성한 코드는 아래와 같다.

코드 작성 시 Connection refused 오류를 반환할 경우 서비스되고 있지 않은 것으로 판단하였으며, 그 이외에 연결 성공하거나 인증 오류가 날 경우에는 서비스 중인 것으로 판단하였다.

import psycopg2

def test_PostgreSQL(server_ip):
	result = ""
    
    try:
    	db = psycopg2.connect(host=server_ip, dbname="testdb",
        					user="postgres", password="password", port=5432)
    except psycopg2.OperationalError as e:
    	message = e.args[0]
        
        if "FATAL:  no pg_hba.conf entry" in message:
        	result = "authentification error"
        elif "Connection refused" in message:
        	result = "no service"
        else:
        	result = "on service"
    return result

if __name__ == "__main__":
	server_ip = "ip address"
    print(test_PostgreSQL(server_ip))

'Penetration testing' 카테고리의 다른 글

서비스 식별: Submissions (587)  (0) 2023.09.01
서비스 식별: SMTPS (465)  (0) 2023.09.01
서비스 식별: HTTPS (443)  (0) 2023.09.01
서비스 식별: LDAP (389)  (0) 2023.09.01

+ Recent posts