SQL Injection (8)

밍기적·2022년 12월 29일
0

웹해킹

목록 보기
19/35

SQL 구문을 이용하여 데이터베이스에 존재하거나 또는 외부에 있는 파일도 읽거나 쓸 수 있다

하지만 root 계정이 필요하다는 단점이 있다

1. 파일 읽기


LOAD_FILE() 함수

  • 함수 원형 : load_file(file_name)
  • 파일을 읽고 파일 내용을 반환하는 함수
  • 불러올 파일이 서버에 존재해야 하며 해당 파일의 전체 경로를 지정해야 함
  • 또한 파일의 접근 권한도 필요

union select null, load_file('/etc/passwd'), null, null, null %23

load_file 함수를 이용하여 웹페이지 외부에 있는 /etc/passwd 파일을 읽을 수 있다

또한 load_file 함수는 HEX 값도 불러올 수 있으므로 /etc/passwd를 Hex 값으로 디코딩 후 전송도 가능하다

  • load_file(0x2f6574632f706173737764)

헥사값을 문자열로 출력하는 CHAR() 함수를 인자로 받아 우회도 가능하다

  • load_file(char(47, 101, 116, 99, 47, 112, 97, 115, 115, 119, 100))

2. 파일 읽기


INTO OUTFILE 구문

  • 파일에 선택한 행을 기록하는 SQL 문법
  • 기록된 파일은 해당 서버에 생성되며 파일을 사용할 수 있는 권한이 있어야 한다

전제조건
1. SQL 유저가 파일 쓰기 권한이 있어야 함
2. 리눅스 유저 mySQL은 쓰고자 하는 폴더에 쓰기 권한이 존재해야 함

MySQL 유저를 확인하기 위해

  • union select null,user, null,null,null from mysql.user# 로 확인이 가능

MySQL 유저 목록의 파일 권한을 확인하기 위해

  • union select null, group_concat(user, 0x3a, file_priv) from mysql.user# 로 확인이 가능함

파일쓰기는 원하는 코드 예를들어 PHP 스크립트 등을 작성할 수 있기 때문에 매우 유용하다

처음으로 현재 웹 사이트 파일에 저장하기 위해서 시도했다


하지만 실패하였고 실패한 이유로 해당 디렉터리에 쓸 수 있는 권한이 없다고 메시지로 나와있었다

그래서 /tmp 디렉터리에 쓰도록 시도했다

실제 서버에서 /tmp 디렉터리에서 확인한다면 example.txt 파일이 생성된 것을 확인할 수 있었다

이를 이용하여 웹 쉘을 업로드 할수도 있고 여러가지가 가능하게 되었다

0개의 댓글