이번 문제는 where절의 pw가 ('')
로 감싸져 있다. 또한 id는 admin이 아니라고 박혀있다.
solve를 얻기 위해선 쿼리문의 값이 있어야 solve를 얻을 수 있다.
문제를 풀기 앞서 pw에 대한 검사가 있었다.
prob, _, ., (), #, -
를 필터링- 길이가 6 초과를 하면 안됨.
일단 #, --
를 사용해서 and id != 'admin'
를 주석 처리하는 것은 포기해야할 것 같다.
인터넷에 주석 방법을 찾아보니 #, --, /**/, ;%00
4가지 방법이 있었다.
이 중 #, --
은 필터링 때문에 불가능하며, /**/
은 *
사이에 쿼리문이 들어가야 함으로 현 문제에서 사용이 불적합하다.
즉, ;%00
을 이용하여 and id != 'admin'
를 주석 처리해야한다.
select id from prob_nightmare where pw=(';%00') and id!='admin'
에서 select id from prob_nightmare where pw=('
으로 되기 때문에 pw를 True로 만들 방법을 생각해야한다.
일단 ('
로 내두면 어떠한 값을 넣어도 쿼리문이 Error를 발생시키기 때문에 ('')
으로 만들어줘야한다.
그럼 pw=('')
임으로 아무 값이 없기 때문에 False로 된다. 이 때문에 ''
사이에 값을 넣어서 True로 만들어야한다.
몇가지 SQLI의 사례를 살펴본 결과 pw=('')=0
으로 True로 만들어 줄 수 있다는 것을 알 수 있었다.
이것은 pw=('')
이 False이고, 0
은 Fasle이고 이들을 False = False
로 비교하면 True로 나오게 된다.
문제를 쉽게 클리어할 수 있었다.
'워게임 > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] Iron Golem Write UP (0) | 2021.08.07 |
---|---|
[Lord of SQLInjection] Dragon Write UP (0) | 2021.08.07 |
[Lord of SQLInjection] Zombie Assassin Write UP (0) | 2021.08.07 |
[Lord of SQLInjection] Succubus Write UP (0) | 2021.07.24 |
[Lord of SQLInjection] Assassin Write UP (0) | 2021.07.24 |