id가 admin이면 풀리는 문제다. and와 or이 필터링된다. pw=1' or id='admin 을 입력하니.. 역시 필터링이 되며 'HeHe'가 출력된다. 이를 우회하기 위해 or 대신 ||를 사용했다. ?pw=1' || id='admin 위와 같이 입력해주었다. Clear!
id가 admin이면 풀리는 문제다. 공백이 필터링된다. 공백 대신 tab(%09)을 써보기로 했다. ?pw=1'%09or%09id='admin 위와 같이 입력해주었다. Clear!
pw 값이 일치해야 풀리는 문제다. 알고 있는 값이 없기 때문에 우선 패스워드의 길이를 알아내려고 한다. 아래와 같은 쿼리문을 작성하여 pw의 길이를 1부터 대입해봤다. 8까지 입력하니 Hello admin이 출력된다. 즉, pw의 길이가 8이라는 말이다. 이제 pw를 한 자리씩 찾아야 한다. 아래의 쿼리를 이용할 것이다. ?pw=' or id='admin' and substring(pw, n, 1)='a substring() 함수를 이용해 pw의 n번째 자리가 a인지 판단한다. 더보기 첫 번째 자리: 0 두 번째 자리: 9 세 번째 자리: 5 네 번째 자리: a 다섯 번째 자리: 9 여섯 번째 자리: 8 일곱 번째 자리: 5 여덟 번째 자리: 2 이렇게 찾은 8자리 패스워드는 095a9852 다. 이제..
전 단계와 마찬가지로 id가 admin이면 풀리는 문제다. 다만, 따옴표(quotes)가 필터링된다. 우선 no=1을 입력해보았다. Hello guest라고 뜨는 것을 보니 guest의 no값이 1인 것 같다. 따라서 1이 아닌 다른 숫자를 썼다. no=0 or id='admin'을 입력해보았다. 쿼터를 썼기 때문에 위와 같이 뜬다. ' 대신 인코딩된 %27도 써 보았지만 결과는 같았다. 그래서 헥사값을 이용해보았다. admin을 헥사값으로 변환하면 0x61646d696e이다. 따라서 위와 같이 no=0 or id=0x61646d696e 를 입력했다. Clear!