티스토리 뷰

Wargame/WebGoat

Injection: SQL Injection (intro)

장일영 2024. 5. 16. 15:40

 

9

 

`user_data` 테이블에서 모든 사용자를 데이터를 가져오는 기본적인 쿼리는 다음과 같다.

SELECT * FROM user_data;
SELECT * FROM user_data WHERE 1=1;


두 번째 쿼리와 같이 조건문이 있는 경우 WHERE 절을 항상 참으로 맞춰 주어야 한다. 따라서 라인의 마지막에 `OR 1=1`과 같은 부분이 추가되면 앞의 AND 절과 관계 없이 OR 절의 뒷부분에서 TRUE가 되므로 WHERE절이 참이 된다.

SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '' OR '1'='1';


따라서 `' OR '1'='1`이 들어가면 모든 데이터를 조회할 수 있다.

 

 

10

 

2개의 입력 필드를 이용해 `user_data` 테이블에서 모든 데이터를 가져와야 한다. 사용자 입력을 받는 부분은 `login_count`, `user_id` 필드다. 마찬가지로 조건문을 참으로 만들어주면 된다.

SELECT * FROM user_data WHERE login_count = 0 AND userid = 0 or 1 = 1;

 

`login_count`의 입력은 사실 상관 없다. 앞에서부터 조건 비교를 하고, 마지막에 `or 1 = 1`이 있기 때문에 `login_count`의 입력 값이 1이든 100이든 위 쿼리의 WHERE절은 사실상 `1 = 1`, 참이 된다.

 

 

11

 

나는 John Smith, 자신의 데이터를 보기 위해 고유한 인증 TAN을 사용한다. 나의 TAN은 3SL99A다. 특정 이름이나 TAN을 알지 못해도 모든 직원의 데이터를 조회할 수 있어야 한다.

 

`last_name`, `auth_tan` 필드를 사용할 수 있지만 앞 필드에서 조건문을 참으로 만들어 버리고 나머지는 주석 처리되도록 하면 TAN을 입력하지 않아도 데이터를 조회할 수 있다.

SELECT * FROM employees WHERE last_name = '' or 1 = 1; --

 

그러면 `last_name` 필드에 대한 입력 값이 `' or 1=1; --`면 조회가 가능하다.

 

 

12

 

Smith의 TAN으로 현재 급여를 조회하면 다음과 같다.

 

Tobi와 Bob의 급여는 알 수 없으나 Smith가 가장 많이 버는 사람이 되는 방법은 두 가지다. Smith를 Tobi와 Bob보다 많이 벌도록 Smith의 급여를 수정하거나 Tobi와 Bob의 급여를 Smith 보다 낮추는 것이다. 우선 전체 급여를 조회해 Tobi와 Bob의 급여를 확인한다.

 

Smith의 급여를 83700 이상으로 올려야 한다.

'; UPDATE employees SET salary = 100000 WHERE auth_tan = '3SL99A'; --

 

첫 입력값을 공백으로 닫고(`';`), 뒤에 UPDATE 절을 추가해 Smith의 연봉을 올린다. 이후는 주석처리 되도록 `--`를 붙였다.

 

 

13

 

여태까지의 모든 작업이 `access_log` 테이블에 기록되었다. 따라서 이를 전부 지워야 한다. 필드 값으로 검색이 되는 것으로 보아 LIKE문인 것으로 보인다. 따라서 `'; DROP TABLE access_log; --`를 입력해 검색을 무용하게 만들고 체이닝으로 해당 테이블을 제거한다.

'Wargame > WebGoat' 카테고리의 다른 글

Server-Side Request Forgery  (0) 2024.05.23
Cross-Site Request Forgery  (0) 2024.05.23
Injection: Cross Site Scripting  (0) 2024.05.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함