SQL injection/webhacking

webhacking 56번

ys.k 2022. 8. 21. 19:43

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

56번 문제이다.

테이블이 있으며 검색을 할 수 있게 되어있다.

각 링크를 들어가 보자.

admin은 접근이 거부되었다.

guest는 hello~라는 메시지가 있다.

이것저것 search에 시도를 하던 중 hello~를 입력했을 경우 guest 하나만 뜨는 것을 알게 되었다.

검색어는 subject의 내용을 검색한다는 것을 알아내었다.

또한 hello~ 뒤에 공백을 하나 추가하여 검색했을 경우에는 guest가 출력되지 않았다.

아마 내부 쿼리는 select * from table_name where search > '$_search'의 형태로 되어있다고 추측할 수 있다.

우리는 인젝터를 사용하여 admin의 blind sql injection과 비슷하게 불러와야 한다.

_를 사용해 문자열의 길이를 추출해보자.

테스트 결과 _이 44개까지 일 때 admin이 추출되었으며 그 이후에는 추출되지 않았다.

우리는 내부 내용의 길이가 44자리 인 것을 알아내었다.

이제 인젝터를 만들어 돌려보자.

이번 방식은 get 파라미터를 사용하지 않고 post방식으로 값을 입력받는다.

따라서 post 형식으로 인젝션을 진행해야 한다.

하지만 필자가 만든 코드의 로직상 첫 번째 글자는 수작업으로 찾아 넣어줘야 인젝터가 정상적으로 작동한다.

따라서 막일로 첫자리가 f인 것을 찾아내어 알고 있다는 전제하에 코드를 작성하였다.

찾는 방법은 search값에서 _를 43개로 줄이고 맨 앞자리에 하나씩 넣어가면서 찾으면 된다.

모두 뽑아내었다.

하지만 우리는 한 가지 알아야 할 점이 있다.

_는 ascii 번호에서 {, }보다 우선순위로 있기 때문에 {와 }이 있을 경우 _라 인식되고 다음 단계로 넘어가버린다.

따라서 추출된 flag를 조금 수정해야 한다.

추출된 flag : fLAG_HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO?_

수정 flag : FLAG{HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO?}

검증해보자.

문제 해결

시행착오

1. 다음에 인젝터 하나만으로 깔끔하게 풀어보고 싶다. 

   ㄴ hex 사용하면 될 거 같음