2주차 SQL Injection WebGoat 문제 중 11~13번 실습이다.
※참고로 나는 WebGoat 접속 시 Docker Desktop을 먼저 켜야 명령어로 접근이 가능했다...
11번

SQL 문자열 삽입(SQL Injection) 공격으로 employees 테이블의 모든 employee들의 대한 정보를 꺼내와야 하는 문제이다.
우선 공격을 시도하기 전에 Smith와 3SL99A를 입력해보았다.

일단 테이블이 이렇게 생겼음을 알 수 있고...이제 공격을 해보겠다.
"SELECT * FROM employees WHERE last_name = '" + name + "' AND auth_tan = '" + auth_tan + "'";
SQL 쿼리문은 위와 같다. 사용자가 입력한 last_name과 auth_tan을 기반으로 직원 정보를 조회한다.
name의 참/거짓 여부는 중요하지 않으므로 name에는 그냥 아무거나 쓰고 TAN에서 String Injection을 하면 된다.
그리고 쿼리문을 보면 싱글쿼터로 TAN이 감싸져있기 때문에 처음에는 닫아주고, 마지막에는 저절로 닫히도록 열어준 상태로 넣어주면 된다.

나는 Name에는 그냥 Smith를 넣었고 TAN에 1' or '0' = '0을 넣었다.
이렇게 넣으면 쿼리문에 들어갔을 때는 auth_tan = '1' or '0' = '0';으로 실행 되어서 모든 테이블을 볼 수 있다.

12번

먼저, 모든 user들의 salary 정보를 확인해서 가장 높은 금액을 알고, 그것보다 더 높은 금액으로 내 월급을 바꾸면 된다.
Name에는 1' or 1=1--을 넣어주고 TAN에는 1을 넣었다.

여기서 가장 많이 받는 Bob의 salary가 83700이므로 이보다 더 높게 Smith의 salary를 바꿔주면 된다.
update절로 아래와 같이 작성하였다.
1'; UPDATE EMPLOYEES SET SALARY = 90000 WHERE LAST_NAME = 'Smith';--
- 싱글쿼터로 열려있는걸 1'로 닫아주고 문장을 끝내주는 ; 세미콜론
- 주석처리를 통해 뒤에 오는 조건이었던 auth_tan은 무시가 되기 때문에 TAN 칸에는 아무거나 넣어줌(나는 그냥 TAN을 넣어줌)


13번

이 문제는 지금까지 SQL Injection을 하면서 남았던 로그들이 저장된 access_log 테이블을 지우는 문제이다.
단어를 입력하면 단어와 일치하는 부분이 있는 로그를 보여주는 기능을 한다.
SELECT * FROM access_log WHERE action LIKE '%[검색어]%';
이렇게 LIKE 연산자를 사용하면 특정 단어가 포함된 문장을 검색할 수 있다.
테이블을 지우기 위해서는 위의 SELECT 문 뒤에 테이블을 DROP 하는 쿼리를 추가하여 실행시키면 된다.
'; drop table access_log;--
이에 따라 최종적으로 실행되는 쿼리는 다음과 같다.
SELECT * FROM access_log WHERE action LIKE ''; drop table access_log;--


'2024 SWLUG > WebHacking' 카테고리의 다른 글
5주차_웹해킹 수업 정리 (0) | 2024.11.19 |
---|---|
4주차_웹해킹 수업 정리 (0) | 2024.11.13 |
3주차_웹해킹 수업 정리 (0) | 2024.10.30 |
[webhacking.kr] old-52 (0) | 2024.09.20 |
1주차_웹해킹 수업 정리 (0) | 2024.09.16 |