ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6주차 과제
    모의해킹스터디_과제 2023. 12. 8. 15:39

    [1] UNION SQL Injection 복습

    http://ctf.segfaulthub.com:1020/sqlInjection3.php

     

    [2] doldol 데이터만 출력하기 (하나만 나오게!)

    http://ctf.segfaulthub.com:1020/sqlInjection_2_1.php 

     

    [3] CTF 문제 풀기

    -> SQL Injection 1, 2 풀어보기

     

    [+] Web 개발

    로그인
    회원가입
    마이페이지 (내 정보 보기)
    게시판

     

     

     


    [2] doldol 데이터만 출력하기 (하나만 나오게!)

    1. Data 추출 페이지

     

    위의 링크에 들어가보면 비밀번호를 입력할 수 있는 페이지가 나온다. 아무거나 넣고 엔터를 누르면 결과가 없다는 알림창이 나오면서 아래에 정확한 SQL문을 볼 수 있다.

    select * from member where id = 'normaltic' and pass = '1'

     

    저기에 입력한 단어가 위의 빨간 부분에 들어가게 되는 것이다. 이 문제는 어렵지 않은게 정확한 SQL문도 제공하고 있고 테이블 이름과 컬럼의 정확한 명칭까지 다 알려준다.

     

     

     

     

     

    1. 모든 정보를 추출한 다음 doldol 데이터 출력하기

     

    2. 1번 방법

     

    select * from member where id = 'normaltic' and pass = '' or '1'='1'

     

    위의 SQL문을 입력하면 id='normaltic'이나 pass와 상관없이 or 이후가 무조건 참이라 모든 결과가 나오게 된다.

    보면 normaltic이 있는 곳이 id 컬럼인 것을 알 수 있고, 그럼 id가 doldol인 데이터를 추출하면 된다.

     select * from member where id = 'normaltic' and pass = '' or id='doldol'

     

     

     

     

    2. SQL Injection으로 데이터 구해서 UNION으로 출력하기

     

    6주차에 배운 SQL Injection 과정 1~7번을 그대로 실행하면 쉽게 정보를 얻을 수 있다.

    DB 이름 : segfault_sql
    테이블 이름 : member
    컬럼 이름 : id, pass, email, info

     

    이 정보들로 UNION을 할 SELECT문을 입력하면 된다.

    select * from member where id = 'normaltic' and pass = ''
    union select id, pass, email, info from member where id = 'doldol' #
    '

     

    이렇게 해도 doldol의 결과를 얻을 수 있다.

     

    3. 2번 방법

     

     


    [3] CTF 문제 풀어보기

    1. SQL Injection 1

    4. SQL Injection 1

     

    정석적으로 SQL_Injection 방법을 따라하면 별 어려움 없이 쉽게 답이 나온다.

    DB 이름 : sqli_1
    테이블 이름 : flag_table, user_info
    컬럼 이름 : flag

     

    헷갈리지도 않게 테이블, 컬럼에 flag라고 명시해서 시간 낭비하지도 않고 바로 찾았다.

    답을 굳이 여기에 쓰진 않겠다.

     

     

     

    2. SQL Injection 2

    5. SQL Injection 2

     

    앞의 문제보다 어렵게 느껴질 만한 부분들이 몇 가지 있다.

     

    첫번째, 검색을 하면 ID에 입력했던 문구가 그대로 나오게 된다.

    두번째, 값이 온전히 나오지 않는다.

    세번째, 한 행만 나온다. 

     

    그래도 UNION SQL Injection을 사용할 수 있는 이유는 결과값을 볼 수 있는 부분이 있기 때문이다.

    그 부분이 Info 컬럼이다.

     

    UNION의 결과 중 한 행만 나오는 경우, LIMIT을 활용하면 다른 결과를 볼 수 있다.

    지금 게시판은 가장 위의 행을 나타내게 되있는 것 같다.

     

    이럴 경우 내가 원하는 결과 한 행만을 출력하게 SQL문을 작성하는 방법도 있고,

    여러 행 중에서 LIMIT을 사용하여 내가 원하는 결과만 보이게 하는 방법도 있다.

     

    6. SQL Injection 2_DB이름 추출

     

    나는 한 행만 출력되게 했다. (ORDER BY로 컬럼 개수를 미리 구한 상태)

     

    그렇게 해서 하나씩 찾다 보면 농락을 당하기도 한다.

    7. SQL Injection 2_notHere

     

    이거 말고 하나 더 있었지만 한번 더 보면 열받을 것 같아 넘기도록 한다.

     

     

    8. SQL Injection 2_flag

     

    그렇게 해서 모든 테이블의 모든 컬럼을 찾아보면 언젠간 찾을 수 있다.

    '모의해킹스터디_과제' 카테고리의 다른 글

    8주차 과제  (0) 2023.12.22
    7주차 과제  (0) 2023.12.12
    5주차 과제  (0) 2023.12.07
    4주차 과제  (0) 2023.12.06
    3주차 과제  (0) 2023.11.24
Designed by Tistory.