728x90

 

소스 코드를 보면 error가 발생했을때 쿼리문을 출력시키는것을 볼수있다. 그리고 싱글쿼터를 필터링하지도 않는다. 이러면 우리는 error based sql injection을 시도해볼수있다. 확실히 쓸수있는지 알아보기위해 에러를 내보자.

 

 

역시 에러문을 그대로 출력해준다. 이렇게되면 이 문제는 거의 error based sql injection이라고 볼수있다. 오류가 나는지 안나는지 여부를 확인하는 코드를 짜서 문제를 풀어보자.

 

 

pw가 나왔다. 이때까지와는 뭔가 달라보인다. 일단 ?pw=!!!!를 쳐보자.

 

 

풀렸다. 답이 좀 그렇긴 해도 오랜만에 보는 error based sql injection이라서 신선했다.

 

 

 

728x90

 

소스 코드를 보면 id='guest'뒤에 #로 주석처리가 되어있다. #는 한줄주석이라서 그냥 개행문자를 써주고 뒤에 admin으로 pw를 맞춰주면 될것같다. 쿼리를 짜보면 ?pw=%0a and 0 or id='admin'%23이 나온다. 이제 넣어보자.

 

역시 풀리게 된다. 이건 #으로 인한 주석처리를 어떻게 피할것인지 묻는 기본적인 문제였다. 

728x90

 

오랜만에 blind sql injection문제이다. regex와 like를 필터링 하고 있다. 일단 그건 그렇다 치고 pw의 길이부터 구해보자.

 

 

 

?pw='||length(pw)<20%23을 넣었는데 거짓이라고 뜬다.

 

 

?pw='||length(substr(pw,1,1))=4%23를 넣어보면 참이 뜬다. 한글자당 4바이트인걸 보면 유니코드같다. 유니코드이므로 ascii말고 ord를 이용해서 풀어야겠다. 코딩을 해봤다.

 

 

이렇게 나왔다. 이제 이 10진수를 16진수로 바꾸고 유니코드로 보자.

 

 

이렇게 나왔다. 이제 저 값을 넣어보자. ?pw=¸ùŰÆÐÄ¡¤»라고 치면 될것같다.

 

풀리게 되었다. 이건 유니코드인지 알아차리는게 중요할것같다.

 

 

 

 

 

 

 

+ Recent posts