SQL Injection
Example 1 (MAKE IT TRUE)
PoC
Example 2 (LIMIT-MAKE IT TRUE)
PoC
limit 함수
Example 3 (ESCAPE-MAKE IT TRUE)
Hint
싱글 쿼터를 입력해도 에러 메세지가 반환되지 않음
PoC
Normal Query
SELECT * FROM users WHERE username='root' AND password='qwer';
Injection Query
SELECT * FROM users WHERE username='\' AND password=' or 1=1 #';
싱글 쿼터 우회
이스케이프를 이용하여 싱글 쿼터를 제거
이스케이프 문자(\)
특정 문자 앞에 붙여 정의되어 있는 원래의 의미를 벗어나게 해주는 문자
Example 4 (MAKE IT TRUE)
http://192.168.30.130/sqlinjection/example4/?req=username%3d%27hacker%27
Docde URL = http://192.168.30.130/sqlinjection/example4/?req=username='hacker'
PoC
http://192.168.30.130/sqlinjection/example4/?req=username='' or 1=1#
http://192.168.30.130/sqlinjection/example4/?req=1=1
Normal Query
SELECT * FROM users WHERE username='root';
Injection Query
SELECT * FROM users WHERE username='\' AND password=' or 1=1 #'
Example 5 (LIMIT-UNION)
http://192.168.30.130/sqlinjection/example5/?limit=3
Hint
PoC
http://192.168.30.130/sqlinjection/example5/?limit=3 union all select * from users
union과 union all차이
union은 중복되는 레코드를 제거하지만,
union al의 경우에는 별도의 중복 제거 과정을 거치지 않음
limit 함수 우회
union을 사용하면 됨
풀이와 상관 없는 참고 (그냥 갑자기 궁금해서 찾아본 거)
order by 다음에 limit 절 사용해야 함 (반대로 사용 불가)
Example 6 (GROUP BY, UNION)
http://192.168.30.130/sqlinjection/example6/?group=username
Hint
PoC
http://192.168.30.130/sqlinjection/example6/?group=username union all select * from users
http://192.168.30.130/sqlinjection/example6/?
group by 절
테이블 select 조회시 결과를 그룹으로 묶어서 가져옴
SELECT column FROM table GROUP BY column
해당 컬럼의 값에 따라 데이터를 그룹 짓고 중복된 열을 제거함
group by 우회
union을 사용하면 됨
Example 7 ()
http://192.168.30.130/sqlinjection/example7/?id=1
Hint
PoC
http://192.168.30.130/sqlinjection/example7/?
Example 8 ()
PoC
PoC
Authentication(인증)
Example 1 (BASIC AUTHENTICATION)
PoC
Example 2 (BASIC AUTHENTICATION)
PoC
HTTP의 인증방식
BASIC, DIGEST, SSL Client, Form Base
기본 인증
1. 요청 (GET)
2. WWW-Authenticate (401 Unauthorized)
3. Authorization(GET)
4. Authentication-Info
401 응답을 받은 클라이언트는 아이디:비밀번호를 Base64방식으로 인코딩해서 Authorization 헤더 필드에 포함하여 송신함
암호화를 하지 않기 때문에 복호화가 쉬운 특징이 있음
Example 3 (COOKIE)
PoC
Example 4 (COOKIE-MD5)
PoC
Example 5 (REGISTER)
Hint
PoC
Register 우회
웹에서는 사용자 생성시 대소문자를 구분하지만 MySQL은 대소문자를 구분하지 않는데, 이를 이용해서 우회하면 됨
Example 6 (REGISTER)
Hint
PoC
Register 우회
웹에서는 공백을 무시하지 않지만 MySQL은 공백을 무시하는데, 이를 이용하여 우회하면 됨
Captcha
Example 1 (AUTHENTICATION)
PoC
Example 2 (SOURCE CODE-AUTHENTICATION)
PoC
Step 1) 소스코드에서 hidden값으로 captcha가 넘어가는 것을 확인함
Step 2) Step1에서 얻은 captcha값을 입력함
Example 3 (COOKIE-AUTHENTICATION)
PoC
Step 1) Cookie값으로 captcha가 인코딩되어 넘어가는 것을 확인함
Step 2) Step1에서 얻은 captcha값을 입력함
Example 4
PoC
Example 5
PoC
Example 6
PoC
Example 7
PoC
Example 8
PoC
PoC
Authorization(인가)
Example 1 (VERTICAL ESCALATION)
Step 1) user1 계정으로 로그인함
Step 2) user1 계정만 접근할 수 있는 글들을 확인함
Step 3) Confidention가 제목인 글을 확인함
PoC
step 1) 로그인하지 않은 상태임
step 2) user1 계정의 비밀글 url로 접속하면 user1 계정의 비밀글 확인이 가능함
Example 2 (HORIZONTAL ESCALATION)
Step 1) user1 계정으로 로그인함
Step 2) user1 계정만 접근할 수 있는 글들을 확인함
Step 3) Confidential user1 (2) 가 제목인 글을 확인함
PoC
step 1) user1 사용자로 로그인한 상태임
Step 2) user1 계정의 비밀글 url에서 글을 구분하는 번호를 바꿔주면 user 2 계정의 비밀글 확인이 가능함
Example 3 (HORIZONTAL ESCALATION)
Step 1) user1 계정으로 로그인함
Step 2) user1 계정만 접근할 수 있는 글들을 확인함
Step 3) Confidential user1 (2) 가 제목인 글을 확인함
Step 4) Edit this info 버튼을 눌러 글 수정 페이지를 확인함
PoC
step 1) user1 사용자로 로그인한 상태임
Step 2) user1 계정의 글 수정 페이지의 url에서 글을 구분하는 번호를 바꿔주면 user 2 계정의 글 수정 페이지로 접근이 가능함
Mass Assignment
Example 1 ( CHANGE PARAMETER-REGISTER)
hint
PoC
Example 2 (CHANGE PARAMETER-REGISTER)
PoC
Step 1) 등록한 test계정으로 로그인한 상태임
Step 2) 프로필 변경 페이지로 들어감
Step 3) user[admin]=1 파라미터를 추가함
Example 3 (CHANGE PARAMETER-INFORMATION)
PoC
Step 1) user1 계정으로 로그인함
Step 2) Company 1 정보를 확인함
Step 3) user[company_id]=2 파라미터를 추가함
[참고]
: 의문
: 모르는 문제