처음부터 차근차근

웹해킹- SQL Injection 본문

정보보안

웹해킹- SQL Injection

_soyoung 2022. 4. 21. 21:44
반응형

SQL 구분

  • 데이터 조작어(DML) : select, insert, delete, update
  • 데이터 정의어(DDL) : create, alter, drop
  • 데이터 제어어(DCL) : GRANT, REVOKE

 

조원 사이트로 가서 관리자 해킹

1단계 : SQL Injection 공격을 통해 정확한 패스워드 없이 관리자(‘Neville’)로 로그인

injection flaws -> LAB : SQL injection -> Stage 1: String SQL Injection 클릭

Neville Bartholomew(admin)’을 선택하고 Password에 아무 값이나 입력 -> 로그인 실패(패스워드 틀림)
패스워드 창에다 'or''=' 입력
로그인 성공! (SQL Injection성공)

로그인이 성공하면 Neville의 프로파일이 보이고, 다른 사용자의 검색, 생성, 삭제 등의 모든 기능을 실행할 수 있음


2단계 : 관리자 계정을 획득한 후 관리자계정으로 로그인 후 [Moe Stooge]의 이름을 [자신의 이름]으로 변경
Moe Stooge의 ViewProfile로 가서 EditProfile 클릭

관리자의 이름을 내 이름으로 변경한다.


<'or''=' 원리>
패스워드 입력칸에 값을 입력하면 실행되는 sql문은 아래와 같이 예상할 수 있다.
SELECT * FROM employee WHERE userid = Neville Bartholomew(admin) and Password = '입력값'
이 입력 값 안에다 'or''='을 넣으면
SELECT * FROM employee WHERE userid = Neville Bartholomew(admin) and Password = ''or''=''
이 된다.
Password = '' or '' = ''
'' = ''은 TRUE이기 때문에
Password = '' or TRUE
이렇게 변경할 수 있다.
or 연산자이기 때문에 결과가 무조건 참이된다.


String SQL Injection

Where 뒤에 나오는 문자열이 들어가는 조건을 무조건 참으로 만들어서 우회하는 방법이다.
String SQL Injection을 사용하여 last name 입력 칸에 'or''='을 입력해서 모든 사용자가 출력되게 한다.

 

원리는 위에서 했던 것과 같다.

last name 칸에 값을 입력하면 실행될 sql문은 아래와 같이 예상할 수 있다.

SELECT * FROM user_data WHERE last_name = '입력값'

입력 값에 'or''=' 을 넣으면 

SELECT * FROM user_data WHERE last_name = ''or''=''

이 되서 결과값이 항상 참이된다. 


[Injection Flaws]-[String SQL Injection] 클릭 last name 입력 칸에다 코드 입력

모든 유저가 출력되는 것을 볼 수 있음
다른 방법

'or'10'>'1
'or'apple'='apple
원리를 따라서? 이런 값을 넣어도 모든 유저가 출력된다.


Database Backdoors

데이터베이스는 일반적으로 웹 응용 프로그램의 백엔드로 사용되고, 주로 저장 매체로 사용된다.
악의적인 활동을 저장하는 장소로도 사용되고,
삽입, 선택, 업데이트 또는 삭제와 같은 다른 데이터베이스 조작을 실행하면 데이터베이스 관리 시스템이 트리거를 호출하게 된다.
이것을 이용해서 취약한 필드를 공격해 데이터베이스를 조작하는 것을 database backdoors라고 한다.


공격 과정

취약한 필드에서 String SQL Injection을 사용하여 두 개의 SQL 문을 작성한다.

[Injection Flaws] -> [Database Backdoors] 클릭
user_id 부분에다가
105;UPDATE employee SET SSN='202012001' WHERE userid=105 를 작성한다.

변경 전
변경 후

이렇게 하면 id가 105번인 유저의 SSN이 8000에서 202012001로 바뀐 것을 볼 수 있다.

<원리>
user_id를 찾는 쿼리는 결과 값으로 보아
SELECT userid, Password, SSN, Salary, Email FROM employee WHERE userid=입력값
이 되는 것을 예상할 수 있다.
저 입력값 안에다가 105; 해서 105를 끝으로 sql문 한 줄을 끝내고,
UPDATE employee SET SSN='202012001' WHERE userid=105를 써서 다음 sql문을 실행한다.





출처 : 정보보안(22-1학기)고수정교수 강의 내용 변형 및 요약

반응형
Comments