본문 바로가기

Layer7/WriteUp

SQL Injection / Blind SQL Injection

SQL Injection 정리

SQL Injection은 응용 프로그램 보안 상의 허점을 의도적으로 이용하여, 개발자가 생각지 못한 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 공격방법이다.

 

예시로 임의의 SQL 로그인 구문을 들겠다.

 

select * from users where userid='' and userpassword=''

 

이런 로그인 SQL 구문이 있다고 예를 들겠다.

 

admin < 아이디로 로그인 하면 플래그가 출력된다고 할 때, admin이라는 아이디가 있다는것만 알고 비밀번호는 모른다 하면 sql injection으로 익스를 한다.

 

userid=admin' or 1=1-- 이렇게 하면 userid엔 admin이 들어가고, 뒤는 --로 주석처리 되어 조건식이 참이 된다.

 

그래서 익스가 된다.

 

Blind SQL Injection 정리

Blind SQL Injection은 데이터베이스로부터 특정한 값이나 데이터를 전달받지 않고, 단순히 참과 거짓의 정보만 알 수 있을 때 사용한다.

 

로그인 폼에 SQL Injection이 가능하다고 가정 했을 때, 서버가 응답하는 로그인 성공과 로그인 실패 메시지를 이용하여, DB의 테이블 정보 등을 추출해 낼 수 있다.

 

위 그림은 Blind SQL Injection을 이용하여 DB의 테이블 명을 알아내는 공격 방법이다.

 

abc123’ and ASCII(SUBSTR(SELECT name From information_schema.tables WHERE table_type=’base table’ limit 0,1)1,1)) > 100 -- 이라는 구문은 limit 키워드를 통해 하나의 테이블만 조회하고, SUBSTR 함수로 첫 글자만, 그리고 마지막으로 ASCII 를 통해서 ascii 값으로 변환해준다 만약 조회되는 테이블명이 Hello라면 H가 출력 될 것이고, 그걸 1 ~ 100까지 아스키코드로 비교한다. 그러면 H의 아스키코드인 72일 때 참이 될 것이고, 이렇게 테이블명을 알아낼 수 있다.

'Layer7 > WriteUp' 카테고리의 다른 글

[LOS]cobolt WriteUp  (0) 2024.06.03
[LOS]gremlin WriteUp  (0) 2024.06.03
[Dreamhack]simple_sqli WriteUp  (1) 2024.06.02
[Webhacking.kr]Old-43 파일 업로드 취약점  (0) 2024.05.29
파일 업로드 다운로드 취약점 대응방안  (0) 2024.05.29