이번에는 webhacking 중 sql이다. sql이 참 어렵다..
문제 설명이다.
들어가보면 나오는 메인 화면이다. 말그대로 Login 화면만 존재한다.
여기에 sql injection을 하여 admin으로 로그인을 해야한다.
먼저 코드를 보면 , database가 존재한다.
users table이 있고 컬럼은 userid, userpassword 두 개로 구성된다.
여기서 insert로 두 가지를 넣어준다.
하나는 id=guest, password=guest 인 계정이고
다른 하나는 id=admin, password=랜덤 16바이트 문자열인 계정이다.
다음은 로그인 코드이다.
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 값으로 여러가지를 줄 수 있다.
ID = admin" --
ID = admin" or "1 // userid 검색 조건 뒤에 OR (또는) 조건을 추가하여 뒷 내용이 무엇이든, admin 이 반환
ID = " or 1 LIMIT 1,1-- // LIMIT 절을 이용하여 두 번째 행인 admin을 반환 (첫 번재 행은 guest)
여러가지 방법으로 우회 시도를 하여 로그인을 하면 플래그를 얻을 수 있다!
+++
python 코드를 작성하여 직접 admin의 비밀번호를 알아내는 방법도 있다. 그 방법도 나중에 시도해 봐야겠다.