본문 바로가기

WriteUp/드림핵

simple_sqli

문제

 

simple_sqli

로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Server-side Basic

dreamhack.io

 

 

문제 설명

 

로그인 창

 

문제의 로그인 창에 들어가면 userid와 password를 입력할 수 있고 Login 버튼이 있다.

 

 

다음으로 소스코드를 살펴보면

login()

 

GET 요청의 경우에는 login.html을 리턴하지만

GET 요청이 아닐 경우에는 userid와 userpassword를 db에서 sql문으로 가져온다.

query_db에 sql문을 f 스트링으로 userid, userpassword를 받아와 포맷팅하고 이를 res에 넣어주는데,

query_db가 정상적으로 실행됐다면 res에 값이 있을 것이고 아니라면 값이 없을 것이다.

이때 res에 값이 있고, userid가 admin이라면 userid와 함께 flag를 화면에 출력하고

admin이 아니지만 로그인에 성공한 경우 로그인에 사용한 userid를  hello와 함께 화면에 출력한다.

res에 값이 없는 경우에는 wrong를 화면에 출력한다.

 

query_db()

 

query_db()는 쿼리문을 db에 보내주고 배열 형식으로 저장하는 함수이다.

 

 

get_db()

 

get_db()에서는 sqlite3과 연결해 값을 받아오는 것으로 보인다.

 

exploit

1. userid=admin이 되도록 한다.

2. 뒷 부분을 주석처리 한다.

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

 

sql 문에서 userid 부분에 admin과 주석처리를 한 번에 하기 위해서

admin"#를 입력했다.

 

서버 에러

 

서버 에러가 발생했다.

알아본 결과 mysql의 경우 #으로 주석이 가능하지만 sqlite3의 경우에는 #으로 주석처리가 불가능 하다고 한다.

그래서 admin"# 대신에 admin"--을 입력해 보았다.

 

 

DH{c1126c8d35d8deaa39c5dd6fc8855ed0}

 

'WriteUp > 드림핵' 카테고리의 다른 글

error based sql injection  (0) 2024.05.13
command-injection-chatgpt  (0) 2024.04.12
what-is-my-ip  (0) 2024.04.08
baby-union  (0) 2024.03.26
XSS-1, XSS-2  (0) 2024.03.21