SKS 공부 - 2025-12-19

SKS 홈으로
38회차 공부

한줄요약:
    애플리케이션 보안 - **SQL 및 XPath 인젝션**은 입력창에 악의적인 쿼리문을 삽입하여 **데이터베이스 인증을 우회**하거나 **데이터를 무단 조회·수정·삭제**하는 공격으로, 각 DBMS의 특수 함수나 XML 트리 구조의 허점을 이용해 **시스템 권한까지 탈취**할 수 있는 치명적인 위협입니다.

오늘 공부한 내용:
  • 
    
    
    ## 💉 SQL 및 XPath 인젝션 공격 개요 요약
    
    
    ---
    
    ### 1. SQL 인젝션의 핵심 원리와 역사
    
    * **정의**: 웹 애플리케이션의 입력값 검증 미흡을 악용하여 **악의적인 SQL 구문을 주입(Injection)**, 데이터베이스를 비정상적으로 조작하는 공격입니다.
    * **역사**: 1998년 처음 언급된 이후, 수억 건의 신용카드 정보 유출 및 국가 기관 해킹 등 현재까지도 가장 위험한 보안 위협 중 하나로 꼽힙니다.
    * **기본 원리**: `SELECT * FROM user WHERE id='admin' AND pw='' OR '1'='1'`과 같이 조건문을 항상 참(**True**)으로 만들어 **인증을 우회**하거나, `;`를 이용해 **추가 명령(UPDATE, DELETE)**을 실행합니다.
    
    ### 2. DBMS별 주요 공격 기법
    
    | 구분 | 주요 공격 방식 및 특징 |
    | --- | --- |
    | **Common** | `UNION`을 이용해 서로 다른 테이블의 정보를 합쳐서 출력 유도 |
    | **MS SQL Server** | `xp_cmdshell` 등의 확장 저장 프로시저를 이용한 **OS 명령어 실행** |
    | **Oracle** | `utl_http`를 이용한 외부 데이터 전송, `Blind SQLi`를 위한 시간 지연 함수 활용 |
    | **SQLite** | 가벼운 구조를 활용한 데이터베이스 파일 직접 생성 및 테이블 조작 실습에 용이 |
    
    ### 3. XPath 삽입 공격 (XPath Injection)
    
    * **대상**: RDBMS가 아닌 **XML 문서**의 노드를 선택하는 **XPath 쿼리**를 대상으로 합니다.
    * **원리**: SQL 인젝션과 유사하게 `' or '1'='1`과 같은 구문을 삽입하여 XML 트리 구조 내의 사용자 정보나 비밀번호를 탈취합니다.
    * **특징**: 논리적 참/거짓을 이용해 데이터 구조를 파악하며, 다양한 프로그래밍 언어(Java, .NET, PHP 등)에서 발생하는 취약점입니다.
    
    ---
    
    1. 새서버 클론(vmware workstation)
    원본->마우스 우클릭->manage->clone->linked clone
    
    2.부팅후 IP 확인, 접속
    
    3. 자바 설치
    sudo apt update
    sudo apt upgrade -y
    
    sudo apt install -y wget apt-transport-https gnupg
    wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
    echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb noble main" | sudo tee /etc/apt/sources.list.d/adoptium.list
    sudo apt update
    
    sudo apt install -y temurin-8-jdk
    sudo update-alternatives --config java (생략 가능)
    
    mkdir /home/user_id/webgoat
    cd /home/user_id/webgoat
    
    4. webgoat 설치 및 구동
    wget https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar
    
    nohup java -jar webgoat-container-7.1-exec.jar -httpPort 80 > /dev/null 2>&1 &
    
    5. run.sh을 만들고 run.sh을 실행하자.
    vi run.sh
    #!/bin/bash
    nohup java -jar webgoat-container-7.1-exec.jar -httpPort 80 > /dev/null 2>&1 &
    
    chmod 755 run.sh
    =====================================================
    
    
    ** 오늘의 명령어
    nohup
        :  > /dev/null 2>&1 &
    traceroute -n target_ip
    (윈도우) tracert -d target_ip
    
    >> https://후이즈검색.한국
    
    
    =================
    proxy를 설치해 보자.
    1. vm 클론
    2. apt-get update && apt-get install tinyproxy
    3. 접근 범위 설정
    vi /etc/tinyproxy/tinyproxy.conf
    ...
    #Allow 127.0.0.1
    #Allow ::1
    Allow 0.0.0.0/0
    
    ======================
    접속 테스트 (다른 차단된 서버)
    (사용법) wget -e use_proxy=yes -e http_proxy=http://프록시IP:포트 http://example.com
    >> wget -e use_proxy=yes -e http_proxy=http://192.168.186.131:8888 http://192.168.186.128
    
    
    ======================
    웹서버에서 로그 확인
    sudo tail -f  /var/log/nginx/access.log
    
    =======================================
    유니온 인젝션을 위한 기본 쿼리 배워보기
    mysql -u mydb -p -h 192.168.186.130
    > show databases;
    > use cloud_db;
    > show tables;
    > select * from userInfo;
    > select * from userInfo where uname="admin" and pass="1234";
    
    사용자 정보 수정 메뉴에서, 관리자 권한 얻기(권한 상승)
    > update userInfo set pass='123', priority='0' where uname="usr1";
    
    관리자 테이블 생성
    > create table adminInfo(id varchar(20),pw varchar(20));
    > show tables;
    > desc adminInfo;
    > insert into adminInfo(id, pw)values("root", "12345678");
    
    
    > select uname, pass from userInfo where uname=”usr1 ” union select id, pw from adminInfo;