[Dreamhack] simple_sqli 풀이

minkyung·2023년 6월 7일
0

Dreamhack

목록 보기
5/6

이번에는 webhacking 중 sql이다. sql이 참 어렵다..

🔎 simple_sqli 분석

문제 설명이다.

들어가보면 나오는 메인 화면이다. 말그대로 Login 화면만 존재한다.

여기에 sql injection을 하여 admin으로 로그인을 해야한다.

💻 소스코드 분석

DATABASE:

먼저 코드를 보면 , database가 존재한다.
users table이 있고 컬럼은 userid, userpassword 두 개로 구성된다.

여기서 insert로 두 가지를 넣어준다.

하나는 id=guest, password=guest 인 계정이고
다른 하나는 id=admin, password=랜덤 16바이트 문자열인 계정이다.

login():

다음은 로그인 코드이다.
GET으로 login 화면을 보여주고 POST로 id와 password 입력값을 받고 있다.

그런데 여기서 사용자 입력값을 통해 SQL query를 동적으로 생성한다.
동적으로 SQL query를 생성하는 것을 RawQuery라고 한다.

query_db는 위에 나오는 query 질의를 수행하는 함수이다.

그 후 userid 가 admin이면 flag를 출력한다.

즉 우리는 저 쿼리문 질의의 결과로 userid 가 admin이 되도록 해야한다.
하지만 pw를 모르기 때문에, userid=admin만 넣고 pw는 검사하지 않도록하여 우회하는 방법을 사용해보자.

📒 해답


select * from users where userid="{userid}" and userpassword="{userpassword}"

여기서 userid 값으로 여러가지를 줄 수 있다.

  1. ID = admin" --

  2. ID = admin" or "1 // userid 검색 조건 뒤에 OR (또는) 조건을 추가하여 뒷 내용이 무엇이든, admin 이 반환

  3. ID = " or 1 LIMIT 1,1-- // LIMIT 절을 이용하여 두 번째 행인 admin을 반환 (첫 번재 행은 guest)

여러가지 방법으로 우회 시도를 하여 로그인을 하면 플래그를 얻을 수 있다!

+++

python 코드를 작성하여 직접 admin의 비밀번호를 알아내는 방법도 있다. 그 방법도 나중에 시도해 봐야겠다.

profile
개발/보안 기록용

0개의 댓글