SQL 구문을 이용하여 데이터베이스에 존재하거나 또는 외부에 있는 파일도 읽거나 쓸 수 있다
하지만 root 계정이 필요하다는 단점이 있다
LOAD_FILE() 함수
union select null, load_file('/etc/passwd'), null, null, null %23
load_file 함수를 이용하여 웹페이지 외부에 있는 /etc/passwd 파일을 읽을 수 있다
또한 load_file 함수는 HEX 값도 불러올 수 있으므로 /etc/passwd를 Hex 값으로 디코딩 후 전송도 가능하다
헥사값을 문자열로 출력하는 CHAR() 함수를 인자로 받아 우회도 가능하다
INTO OUTFILE 구문
전제조건
1. SQL 유저가 파일 쓰기 권한이 있어야 함
2. 리눅스 유저 mySQL은 쓰고자 하는 폴더에 쓰기 권한이 존재해야 함
MySQL 유저를 확인하기 위해
MySQL 유저 목록의 파일 권한을 확인하기 위해
파일쓰기는 원하는 코드 예를들어 PHP 스크립트 등을 작성할 수 있기 때문에 매우 유용하다
처음으로 현재 웹 사이트 파일에 저장하기 위해서 시도했다
하지만 실패하였고 실패한 이유로 해당 디렉터리에 쓸 수 있는 권한이 없다고 메시지로 나와있었다
그래서 /tmp 디렉터리에 쓰도록 시도했다
실제 서버에서 /tmp 디렉터리에서 확인한다면 example.txt 파일이 생성된 것을 확인할 수 있었다
이를 이용하여 웹 쉘을 업로드 할수도 있고 여러가지가 가능하게 되었다