SQL Injection 문제다
시작 화면이다. 아무 것도 없는 페이지이다.
링크를 타고 들어가면 로그인 form이 하나 있다.
혹시나 싶어서 웹 페이지 검사를 해봤지만 별 내용은 없다.
문제 파일을 열어보면 테이블 생성에 관한 코드가 있다.
sqlite3을 사용하고 guest / guest와 admin / 랜덤값 을 데이터베이스에 삽입한다고 되어있다.
로그인에 관련된 코드를 보면 select * from users where userid="{userid}" and userpassword="{userpassword}"
를 통해 데이터베이스에서 정보를 가져온다.
userid가 admin일 경우 flag 값을 반환하도록 되어있고, password에 관한 내용은 없다.
따라서 userid를 admin으로 입력하고 password를 확인하는 부분을 주석처리 되도록 SQL문을 작성하면 password와 관련된 조건 부분을 건너뛰고 userid가 admin인 정보를 불러올 것이다.
sqlite3를 사용하는 데이터베이스이므로 주석처리는 --를 사용한다.
(각각의 언어마다 주석처리 하는 방식이 다르므로 맞춰서 사용해야 한다)
따라서 최종적인 코드의 모습은 다음과 같다.
이렇게 입력하면 어차피 userid=admin이 되고 --에 의해 뒷부분은 주석처리가 된다. 따라서 password값에 관계없이 userid=admin에 해당하는 값들을 불러올 것이다.
(이렇게 불러온 값들을 res라는 리스트에 넣고 userid=res[0]이다. res 리스트의 첫번째 요소로 admin이 들어가지 않으면 어떡하지라는 걱정은 안해도 된다. 데이터 베이스를 생성하는 코드에서 볼 수 있듯 userid가 admin인 데이터는 하나밖에 없기 때문이다. 따라서 userid=admin으로 하고 나머지는 모두 주석처리 해도 원하는 데이터를 찾는데는 지장이 없다)
password는 어차피 생략되어 의미가 없으므로 아무 값이나 넣고 Login을 누르면
위와 같이 FLAG 값을 얻을 수 있다.
'보안 > Dreamhack' 카테고리의 다른 글
Dreamhack: file-download-1 (0) | 2022.04.05 |
---|---|
Dreamhack: pathtraversal (0) | 2022.04.04 |
Dreamhack: xss-1 (0) | 2022.04.03 |
Dreamhack: cookie (0) | 2022.04.03 |