문제에 접속하면 Name과 Title, Content로 보이는 부분을 입력하는 폼이 존재한다.
SQLi가 바탕인 RedTiger 문제이기 때문에 왠지 insert 구문을 이용하여 데이터를 추가 할 것 같다.
이는 Name에 1, Title에 2, Content에 3을 입력하여 제출 했을 때의 결과이다.
mysql의 insert 구문에서는 parentheses를 필터링 하지 않을 경우 사용자의 입력값에 따라 데이터의 중복 삽입을 유발할 수 있다.
이 문제의 경우 모든 입력값에 대해 single quotation으로 묶여있는 형태인데, Name과 Title의 경우에는 single quotation을 \'로 치환하여 특수문자가 아닌 단일문자로 사용하는 반면 Content 부분에서는 이를 필터링하지 않아 string의 끝을 의미하는 quotation으로 적용된다.
mysql에서는 insert 구문 사용 시 insert into table_name values(val1,val2,val3),(val4,val5,val6),... 등으로 데이터를 중복 삽입 할 수 있다.
이를 이용하여 Content 부분에 single quotation을 포함하여 데이터를 중복 삽입하고, 데이터를 삽입하는 위치에 select 구문을 이용하여 level9_users 테이블의 username과 password를 추출해낼 수 있다.
이를 이용해 얻어낸 username과 password를 하단의 입력 폼에 넣어 요청하면 플래그를 얻을 수 있다.
'Wargame > RedTiger:OverTheWire' 카테고리의 다른 글
[RedTiger] Level 10 (2) | 2017.11.07 |
---|---|
[RedTiger] Level8 (0) | 2017.11.01 |
[RedTiger] Level7 (0) | 2017.11.01 |
[RedTiger] Level6 (0) | 2017.11.01 |
[RedTiger] Level5 (0) | 2016.10.19 |