simple_sqli_chatgpt
https://dreamhack.io/wargame/challenges/769
simple_sqli_chatgpt
어딘가 이상한 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. chatGPT와 함께 풀어보세요! Reference Server-side Basic
dreamhack.io
이 문제는 SQL 인젝션 문제이다.
서버의 소스코드를 살펴보면서 그 이유를 살펴보도록 하자.
웹페이지는 물론, 서버에서도 사용자가 입력하는 값(userlevel)을 필터링을 안하고 있다.
userlevel에 SQL 구문을 넣어서 userlevel을 0으로 만들면, admin으로 로그인 할 수 있을 것 같다.
예상과 달리, admin대신 guest로 로그인 한 것 같다.
guest 또한 userlevel이 admin과 동일한 0인 것으로 보인다.
이는 SQL 구문을 넣을 때, userid를 지정하지 않아서 발생한 문제인 것 같다.
그래서 이번에는 다른 방식으로 갔다.
1) 기존의 SQL 구문 뒤에 UNION을 붙여서, 우리가 원하는 쿼리문이 실행되도록 하자.
2) userid가 admin이고, userlevel이 '0'인 사용자(admin)를 선택하도록 한다.
3) 남아있을 따옴표(')를 무시하기 위해 --로 주석 처리를 해주자.
위의 방식대로 쿼리문을 만들면 아래와 같다.
' union select * from users where userid='admin' and userlevel='0'-- 넣을 쿼리문
마지막으로, 위에서 만든 쿼리문을 실제로 넣어보자.
서버에서 처리할 SQL 쿼리문은 다음과 같이 변하게 된다.
select * from users where userlevel='' union select * from users where userid='admin' and userlevel='0'--'
union으로 우리가 원하는 쿼리문(admin을 선택하는 쿼리문)을 실행시킬 수 있다.
그러면 플래그를 받아올 수 있다!