ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL Injection, HTML, Windows Server 2003 Hacking - SQL 인젝션, HTML, 윈도우 서버 2003 해킹
    Security 2022. 5. 9. 14:25

    hack

    NOTE

    SQL Injection의 기본원리

    : 논리적으로 참이 되도록 해야 함 False or True = True

     

    앞부분이 패스워드일 경우, 패스워드를 몰라도 결과가 참이 되도록 만드는 방법

    - 주석 처리

    오라클, MS-SQL은 주석으로 --을 사용

    MySQL, MariaDB는 주석으로 #을 사용

    HTML은 주석으로 .//을 사용

     

    - 중첩문을 사용하는 방법

    앞의 SQL문과 뒤의 SQL문이 서로 다르면 세미콜론(;)을 사용해서 끝내고, 새로운 SQL문을 작성하면 됨

    SELECT문을 두 개를 사용할 수 있는 경우 UNION으로 연결 (합집합의 기능, 같이 보여줌)

    UNION을 사용할 경우, 앞의 SELECT문과 뒤의 SELECT문에서 요구하는 컬럼의 개수는 같아야 함

     

    * MySQL, MariaDB

    - DB를 운영하는 DB가 있음 > 스키마 : information_schema (DB의 모든 정보를 저장하는 Meta DB)

    - 여러 테이블이 있음

    DB에 대한 정보는 table_schema에 있음, select문에서 database()를 사용해도 됨

    Table에 대한 정보는 tables라는 테이블의 table_name이라는 컬럼에 들어있음

    Column에 대한 정보는 columns라는 테이블의 column_nmae이라는 컬럼에 들어있음

     

    * SQL 인젝션에 사용하는 구문

    ' or 1=1 --

    ' or 2>1 --

    ' or  'A'<'B'

    ' or 'a'='a' -- // '를 홀수 개로 사용하면 짝이 맞지 않으므로 주석처리를 해주어야 함

    ' or'a'='a       // '를 짝수 개로 사용하면 짝이 맞지 않으므로 주석이 필요 없음

     

    로그인할 때의 SELECT문(예시) : select id,pw from member where id=' ' and pw ' ';

    *UNION을 사용한 중첩문 SQL 공격

    ' union select null #

    select id,pw from member where id="' union select null #' and pw=' ';               //컬럼 개수 불일치 (different number of columns)

    select id,pw 컬럼이 두 개인데 빨간색 union null은 컬럼이 한 개다.

    select id,pw from member where id="' union select null,null #' and pw=' '; //컬럼 개수 일치

     

    - DB정보, Table 이름, Column 이름 등을 모두 알아내서 새로운 SQL문을 만들 수 있음.

     

     

     

     

     

    * SQL Injection : SQL문이 참이 되도록 만들어서 SQL문이 실행되도록 하는 것이 목적

    * Blind SQL Injection : Target DB에 대한 정보가 없는 상태에서 SQL문을 거짓이 되도록 만들면 오류 메시지 또는 다른 반응을 토대로 DB에 대한 정보를 알아내는 것 > DB 이름, Table 이름, Colimn이름 등을 알아냄 > 새로운 SELECT문을 만듦

     

    - SNI -

     

    * 표준 문서 체계

    1) SGML (Standart Generalized Markup Language)

    - 미 국방부에서 제공하는 문서 형식으로 만들라고 제시함

    - 작성하기가 복잡, 어렵고, 까다로워 문서 작성하는 담당자가 따로 있어야 함

     

    2) HTML

    - 팀 버너스 리가 SGML을 단순화해서 만든 것이 HTML

    - Image, Text, Hypertext 등을 표시 (매우 단순)

     

    3) XML

    - 내용과 형식을 분리 > 변경 내용이 있을 때는 내용만 바꾸면 되며, 형식은 기존의 것을 그대로 사용

    - 보편적으로 많이 사용 ppt > pptx, doc > docx, xls> xlsx, hwp > hwp (형식을 바꿔서 저장됨)

    : 뒤에 붙은 x는 xml의 x임, File Signature는 PK로 변경됨 : 50(P) 4B(K) (Hex code)

     

    HTML 편집기 : Notepad++

    https://notepad-plus-plus.org/

     

    Notepad++

    What is Notepad++ Notepad++ is a free (as in “free speech” and also as in “free beer”) source code editor and Notepad replacement that supports several languages. Running in the MS Windows environment, its use is governed by GNU General Public Lice

    notepad-plus-plus.org

     

    HTTP Error Code (일부)

     

    1xx (Information) : 요청을 받았으며 프로세스를 계속 진행하는 상태

    100 : Continue - 진행 중임을 의미하는 응답 코드 클라이언트가 계속 요청을 하거나 요청을 이미 완료한 경우 무시해도 되는 것을 알려줍니다.

    200 : OK - 요청이 성공적으로 되었으며, 정보는 요청에 따른 응답으로 반환됩니다.

    2xx (Successful) : 요청을 성공적으로 받았으며 인식했고 수용하는 상태

    3xx (redirection) : 요청 완료를 위해 추가 작업 조치가 필요한 상태

    302 : Found - 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 새롭게 변경된 URI는 나중에 만들어질 수 있습니다. 그러므로 클라이언트는 향후의 요청도 반드시 동일한 URI로 해야 합니다.

    4xx (Client Error) : 문법 오류, 요청 처리 실패

    403 : Forbidden - 접근할 권리를 가지고 있지 않아서 접근하면 안 되는 페이지 또는 사이트, 서버에서 거절을 위한 응답

    404 : Not Found - 브라우저에서 알려지지 않은 URL을 의미

    5xx (Server Error) : 서버가 명백히 유효한 요청에 대한 충족 실패

    500 : Internal Server Error 

    503 : Service Unvailable > 사용자가 폭주하거나 DDos 공격받을 때

     

    Google Chrome F12 디버깅 모드 HTML Code 이용하기

    네이버 화면에서 광고를 없애고 싶을 때

    F12키를 눌러서 디버깅 모드에 진입한 화면

    F12키를 눌러서 디버깅 모드에 진입해줍니다.

    오른쪽 상단의 빨간색 점선으로 표시한 element select 버튼을 누른 뒤에 홈페이지의 광고 배너를 눌러줍니다.
    우클릭을 하고 Delete element를 눌러줍니다.

    Delete element를 눌러주면 저렇게 광고부분이 삭제되어 보이는 것을 확인하실 수 있습니다.

     

    우클릭이 제한된 포스트에서 이미지를 가져오고 싶을 때

    네이버 블로그에서 검색한 사진입니다.

    가끔씩 필요한 사진이 있는데 우클릭이 허용되지 않은 사이트가 있습니다. 대표적으로 일부의 네이버 블로그가 있는데요.

    왼쪽의 사진을 선택한 화면

    위의 방법과 같이 element select 버튼을 눌러주시고 사진을 클릭해줍니다.

    그러면 img src로 시작되는 코드가 표시됩니다.

    사진의 정보를 가져온 상태

    사진의 정보를 가져오게 되는데, Current source에 사진의 하이퍼링크가 뜹니다.

    하이퍼링크를 클릭한 상태

    하이퍼 링크를 클릭하면 온전한 사진이 떠있는 창으로 사진을 저장하실 수 있습니다.

    저작권에 주의해서 필요한 정보를 얻어올 때 사용하시기 바랍니다.

    강민경님 팬이에요

    Windows Server 2003, 연습용 사이트 해킹하기

    VMware에서 File > Open > Windows Server 2003 > 확장자가 vmx인 파일 열기

    id administratop pw hp12345

    우선 IP 변경을 위해 Windows Server 2003에 접속해줍니다.

    그리고 아래와 같이 들어갑니다.

    시작 > 제어판 > 네트워크 연결 > 로컬 영역 연결
    속성 > 인터넷 프로토콜(TCP/IP) > 속성 > 자동으로 IP 주소 받기, 자동으로 DNS 서버 주소 받기 체크

    cmd에 들어가서 ipconfig를 입력해서 IP Address를 확인해줍니다.

    192.168.5.141을 확인할 수 있습니다.
    Window10의 Internet Explorer에서 IP주소를 입력한 모습

    Internet Explorer창에서 도구(우측 상단 톱니바퀴) > 호환성 보기 설정 > 192.168.5.141 > 추가를 하시면 좀 더 최적화된 화면으로 보입니다.

    호환성 보기에 현재 사이트를 추가해줍니다.

     

    Login Bypass : 패스워드를 모르지만 로그인하는 방법 : SQL 인젝션

    select id,pw from ?? where id='  ' and pw= '  '

     

    ' or 1=1 --을 이용해서 아무 계정으로 로그인을 하는 방법부터 설명하겠습니다.

    ID

    ID에 ' or 1=1 --을 입력한 모습
    superman으로 계정이 로그인 된 모습입니다.

    select  id,pw  from  ???  where  id='' or 1=1 --' and pw='

     

    Password

    PW에 ' or 1=1 --을 입력해줍니다.
    존재하지 않는 아이디로 로그인에 실패한 모습입니다.
    아이디를 알 수 없어 실패했는데 이 사이트의 자유게시판에 글을 보면 등록자의 아이디인 'webmaster'를 유추할 수 있습니다.
    ID에 webmaster를 입력하고, PW에 ' or 1=1 --를 입력해줍니다.
    로그인 성공 메시지
    superman으로 로그인 완료한 모습입니다.

    select  id,pw  from  ???  where  id='webmaster' and pw='' or 1=1 --';

    왜 webmaster로 로그인을 시도했지만 superman 계정으로 로그인이 되냐면

    Windows Server 2003을 들어가서 아래와 같이 쿼리 분석기를 접속해줍니다.

    모든 프로그램 > Microsoft SQL Server > 쿼리 분석기
    04arg > 사용자 테이블 > dbo.tbl_member

    경로를 따라가면 member 테이블이 보이는데 특정이 되지 않은 경우에는 가장 위의 계정을 default로 지정하기 때문입니다.

     

    하지만 유추했던 ID인 webmaster로 로그인하고 싶다면 패스워드를 무력화시키는 방법이 있습니다.

    select id,pw from ??? where id='webmaster' or 1=1 --'and pw='  '; // True or True는 어차피 참이므로 불필요한 코드가 되며

    select id,pw from ??? where id='webmaster' --' and pw=' ' // webmaster로 로그인 가능

    ID에 webmaster' --를 입력합니다.
    webmaster로 로그인 된 모습

    상단의 패션 탭을 눌러 이동 후 로그인하려고 하면 ID 부분에 특수문자를 사용할 수 없게 되어있습니다.

    어떻게 인젝션을 할 수 있을지 알아보도록 하겠습니다.

    Brup Suite를 사용할 예정인데요, 우선 설치를 해주도록 하겠습니다.

     

    Brup Suite

    https://portswigger.net/burp/community-download-thank-you

     

    Upgrade your skills with the Web Security Academy - from PortSwigger

    Take your Burp Suite Community Edition experience to the next level with a free skills upgrade in the Web Security Academy.

    portswigger.net

    Products에 들어가서 Community Edition(무료 버전)을 다운로드합니다.

    Burp Suite에서 Suite는 여러 개가 붙어있다는 뜻으로 사용되고 있으며

    Burp Suite의 용도는 로컬프록시(Local Proxy), 즉 클라이언트의 컴퓨터에 설치한 proxy > 클라이언트의 요청을 조작할 수 있으며 이 외에도 많은 기능이 있습니다.

    로컬 프록시의 종류 : Paros, Fiddler2, Charley, Achilles 등

     

    설치하셨다면 실행해줍니다.

     

    Proxy Listeners를 확인해주시면 Interface에 127.0.0.1:8080이 있는 것이 확인됩니다.

    상단의 Proxy > Options > Proxy Listeners 확인

    Windows 10 Internet Explorer의 Proxy Server를 설정해줍니다.

    인터넷 옵션 > 연결 > LAN 설정 > 프록시 서버 > 사용자 LAN에 프록시 서버 사용 체크 > 주소 127.0.0.1, 포트 8080 입력

    그리고 Brup Suite의 Intercept is off를 클릭해줍니다.

    Proxy > Intercept > Intercept is off

    Interceopt is on으로 변경되는 것을 확인할 수 있습니다.

    Intercept is on

    인터넷 옵션의 프록시 서버를 사용하고 익스플로러(개발자 도구(F12)를 켠 상태)와 Burp Suite(Intercept in on 상태)를 켜놓고 ID는 webmaster PW는 1111을 임의로 입력하면 Burp Suite의 Raw에 입력한 아이디와 패스워드가 입력되는 것을 확인할 수 있습니다.

    userid=webmaster&passwd=1111이 입력된 모습
    Line 14 userid=webmaster'--&passwd=1111로 변경

    여기서 userid=webmaster에 '--를 붙여서 Injection을 완성시켜줍니다.

    그리고 상단의 Forward 버튼을 눌러주면

    로그인 성공

    로그인이 완료된 것을 확인하실 수 있습니다.

     

    F12를 누르고 열린 화면의 디버거 탭을 눌러 확인해줍니다.

    스크립트는 클라이언트에서만 동작하기 때문에 클라이언트를 벗어난 패킷을 조작하면 특수문자를 넣을 수 있습니다.

    이렇게 Proxy를 이용해서 특수문자를 추가해주면 특수문자를 사용해서 패션 탭에서도 로그인을 할 수 있게 됩니다.

    이러한 결과로 미루어 보았을 때 클라이언트에서 보안을 적용하는 것은 옳게 된 보안이라 보기 힘든 것을 알 수 있습니다.

     

    * DOR : Direct Object Reference (직접 객체 참조)

    : 다운로드를 받지 못하게 하는 이미지를 직접 접근해서 다운로드 받는 것

     

    * Proxy Server를  계속 사용하면 Google, Naver 등 접속이 되지 않습니다. *

     

    Blind SQL Injection : DB에 대한 정보가 거의 없는 상태에서 에러를 유발해서 DB에 대한 정보를 알아내는 것

    대표적인 구문으로는 'having 1=1--가 있습니다.

    원래 having문은 앞에 group by가 있어야 합니다 예시로 select ~~ group by ~~ having ~~; 이것과 같은 구조의 문장입니다.

     

    하지만 group by 없이 입력을 함으로써

    ID에 'having 1=1-- 입력 후 로그인
    select id,pw from ?? where id=''having 1=1 --' and pw='&nbsp; ';

    정보를 확인하여 취약점을 획득할 수 있습니다.​

     

    그리고 webmaster의 Password를 변경하는 방법이 있습니다.

    '; update tbl_member set passwd='1234' where userid='webmaster';--

    ID에 입력해줍니다.
    존재하지않는 아이디입니다. 라고 하지만..
    ID webmaster PW 1234를 입력해줍니다.
    Password가 변경되어 로그인에 성공했습니다.

     

     

    댓글

Designed by Tistory.