Lord of SQL injection 01, 02
Lord of SQL injection
Lord of SQLInjection
los.rubiya.kr
해당 사이트에서 실습을 진행한다.
초록색 [enter to the dungeon] 누르고
가입 후 로그인하면 끝!
이제 이 사이트에서 뭘 해야하냐면...
id admin / pw password 로 로그인 시 wrong 문구가 출력되고
id guest / pw guest 로 로그인 시 hello guest 가 출력되는데
이는 admin 계정의 암호는 dict 형태로 16진수 난수 형태로 생성되기 때문이다.
파이썬 코드에는
db.execute(finsert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");')
라는 부분이 있는데
여기서 binascii.hexlify 는 binary 데이터 16진수 표현법이다.
res=query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}")
쿼리문을 확인해보면 user 테이블에서 로그인할 때 아이디와 패스워드가 필요하다는 내용이다.
그런데 패스워드가 없이도 로그인할 수 있어야 하기 때문에,
아이디가 admin 이기만 하면 로그인이 되도록
아이디 부분 이후를 모두 주석 처리할 것이다!
admin" 쿼리문 이후를 주석 처리하면 아무 패스워드나 입력해도 로그인이 될 것이다.
SQL 주석 처리 방법은 -- 이다.
웹 주석 처리 방법은 %27%23 이다. ( '#' 을 의미한다)
php?id=swing
이런 식으로 아이디를 웹 주소창에서 보내면
query : select id from prob_gremlin where id='swing' and pw=''
쿼리문에 id 로 들어간 것을 바로 확인할 수 있다.
문제를 풀어보자.
1번, 2번
그냥 주소창에 php 뒤에
?id=admin%27%23
치면 된다.