이번에는 UNION 키워드를 이용한 공격을 실습 해보자. UNION을 이용하면 데이터베이스의 모든 정보를 알아낼 수 있다. UNION은 합집합 이라고 했었는데 UNION을 사용하기 위해서는 원래 쿼리문이 조회하는 select문에 칼럼 개수와 union 뒤의 select문에서 요청하는 칼럼 개수가 같아야 한다. 그렇지 않으면 에러가 발생하기 때문에 먼저 원래의 쿼리문이 몇 개의 칼럼을 리턴하는지 알아내야 한다. DVWA의 SQL Injection 페이지에 가서 UserID에 1'union select 1# 을 입력해보자. 이 select 뒤에 1이라는 상수 값을 주게 되면 그것을 그대로 출력 할 수 있다. 꼭 1 뿐만 아니라 2, 3 혹은 null 이라는 값을 줄 수 있다. submit을 누른다. 실행을 ..
DVWA Security Level을 Low로 설정한 후 SQL Injection 페이지로 간다. user ID를 입력하는 폼이 있다. 여기에 1이라는 값을 넣으면 ID가 1인 사용자에 대한 정보가 출력된다. 위와 같은 페이지가 있을 때 SQL Injection 공격에 취약한지 알아보는 가장 기본적인 방법은 작은 따옴표를 입력해 보는 것이다. 작은 따옴표를 입력해보자. 취약한 페이지의 경우 위 페이지 처럼 sql 관련 에러가 발생한다. 그 이유는 소스 코드를 보면 알 수 있다. user_id 부분을 보면 사용자가 입력한 값은 $id라는 변수로 들어가게 되는데 이 $id라는 변수는 이미 작은 따옴표로 둘러싸여 있다. 만약 여기에 작은 따옴표가 하나 더 들어오게 되면 작은 따옴표가 총 세 개가 되면서 에러가..
1. 운영체제란? 소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 함 ⇒ 운영체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라감 ⇒ 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것. ⇒ 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 됨. ⇒ 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 부르며 이를 좁은 의미의 운영체제라고도 부름. ⇒ 즉, 커널은 OS 코드 중에서도 핵심적인 부분 ⇒ 넓은 의미의 OS는 커널뿐 아니라 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념 ex) 윈도우에서 파일을 복사..
JVM이란? JVM은 'Java virtual machine'을 줄인 것으로 직역하면 '자바를 실행하기 위한 가상 기계' 가상 기계라는 말이 좀 어색하겠지만 영어권에서는 컴퓨터를 머신(machine)이라고도 부르기 때문에 '머신'이라는 용어대신 '컴퓨터'를 사용해서 '자바를 실행하기 위한 가상 컴퓨터'라고 이해하면 좋습니다. '가상 기계(virtual machine)'는 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어. 예를들어 TV와 비디오를 소프트웨어화한 윈도우 미디오 플레이어, 곰플레이어 등이 있습니다. 이와 같이 '가상 컴퓨터(virtual computer)'는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 됩니다. 자바로 작성된 애플리..
1. 운영체제에 독립적 ⇒ 기존의 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운영체제에 적용하기 위해 많은 노력 필요 ⇒ 자바 응용프로그램은 OS나 하드웨어가 아닌 JVM(자바가상머신)과 통신 ⇒ JVM이 자바 응용 프로그램으로부터 전달받은 명령을 해당 OS가 이해할 수 있도록 변환하여 전달 ⇒ 자바로 작성된 프로그램은 OS에 독립적이지만 JVM은 OS에 종속적이어서 썬에서는 여러 OS에 설치할 수 있는 서로 다른 버전의 JVM을 제공 ⇒ 자바로 작성된 프로그램은 OS와 하드웨어에 관계없이 실행 가능 ⇒ '한 번 작성하면, 어디서나 실행(Write once, run anywhere)'고 표한하기도 함 2. 객체지향언어 ⇒ 자바는 프로그램의 대세로 자리 잡은 객체지향 프로그래밍언어(Objec..
SQL 인젝션 공격 SQL 인젝션 공격 이란 데이터베이스에 전송되는 SQL 쿼리문을 사용자 입력으로 조작하여, 데이터베이스 내의 데이터를 변조하거나 허가되지 않은 정보에 접근 할 수 있는 공격이다. 웹사이트의 회원정보 등 개인정보를 빼낼 때 최근까지도 자주 쓰이는 웹 공격이다. 실제 사례 · 2011년 소니 해킹 2011년에 소니 데이터베이스가 SQL 인젝션 공격을 당해 100만 명의 회원정보와 350만 개의 디지털 쿠폰 등이 탈취 · 2015년 뿜뿌 해킹 뿜뿌 사이트가 해킹 되어 190만의 회원정보가 유출 · 2015년 어나니머스 WTO 해킹 유명한 해킹그룹인 어나니머스가 WTO 세계무역기구의 한 사이트를 SQL 인젝션 공격으로 해킹하여 수천 명의 각국 재직자 정보를 유출 두 가지의 기본적인 SQL 인..
이번에는 High 단계에서 실습해보자. DVWA Security Level을 High로 설정한다. 이번에도 프록시 history 기능을 통해서 어떻게 전달 되는지 확인한다.CAPTCHA 메뉴로 가서 password는 normal을 입력하고, captcha 값을 입력해준다. change 버튼을 누른다. 이번에는 두 단계에 걸치지 않고 바로 패스워드가 변경된다. 이제 Low, Medium 단계의 방식으로는 공격을 할 수 없게 되었다. 소스 코드를 한 번 살펴보자. 이 부분은 captcha가 실패했을 때 처리하는 부분이다. if문의 조건을 자세히 살펴보면 응답이 vaild 하지 않으면(!$resp->is_valid 부분) 뒤에 추가로 조건을 검사하고 있다. 그 조건은 'recaptcha response fie..
DVWA Security Level을 medium으로 설정하고 Insecure CAPTCHA로 들어간다. Low 단계에서 작업했던 것 처럼 password는 'normal'로 입력하고 captcha부분을 작성한다. change 버튼을 두 번 누른다. HTTP history를 확인해보면 이번에도 Law 단계와 마찬가지로 두 단계에 걸쳐서 패스워드를 변경하고 있음을 알 수 있다. 두 번째 요청의 내용을 보면 이전 Law 단계의 두번 째 요청과 같이 step 파라미터의 값이 2이고 password 역시 같이 전송한다. 한 가지 추가된 것은 passed_captcha 파라미터인데 아마도 이 파라미터를 추가로 넣어서 captcha를 제대로 입력했는지 확인하려고 한 것일 것이다. 이 요청을 Repeater로 보내서..
오늘은 테두리 선 스타일 중 자주 사용되는 세 가지 속성에 대해 알아보도록 하겠습니다. 먼저 기본 값은 none입니다. 즉, 테두리 스타일을 지정하지 않으면 테두리 색상이나 두께를 지정하더라도 화면에 표시되지 않습니다. 따라서 테두리를 그리기 위해서는 맨 먼저 테두리 스타일을 지정해야 합니다. border-style 대표 속성 세 가지 1. solid => 테두리를 실선으로 표시합니다. 2. dotted => 테두리를 점선으로 표시합니다. 3. dashed => 테두리를 짧은 선으로 표시합니다.
오늘은 웹 폰트(web font)를 사용하는 법에 대해 알아보도록 하겠습니다. 웹 폰트(Web font)란? 먼저, 웹 폰트란 웹 문서를 작성할 때 웹 문서 안에 글꼴 정보도 함께 저장했다가 사용자가 웹 문서에 접속하면 글꼴을 사용자 시스템으로 다운로드시키는 방식입니다. 결국 사용자 시스템에 없는 글꼴이더라도 웹 문서를 통해 필요한 글꼴들을 사용자 컴퓨터에 다운로드한 후 표시하기 때문에 웹 제작자가 의도한 대로 텍스트를 표시할 수 있습니다. 다운로드 없이 웹폰트를 사용하는 방법 구글에서 무료로 제공하는 웹 폰트를 사용하면 따로 다운로드 할 필요 없이 직접 링크해 사용할 수 있습니다. https://fonts.google.com에 접속하면 구글에서 제공하는 여러 웹 폰트가 나열되어 있습니다. 저는 웹 사이..
오늘은 visual studio code에서 html로 출력할 때 한글이 깨지는 현상을 없애는 법에 대해 알아보겠습니다. 먼저 위의 코드를 html로 출력했을 때의 화면입니다. 한글이 깨져서 나온다? 는 십중팔구 인코딩 문제입니다. visual studio code의 우측 하단을 보면 UTF-8로 되어있는 인코딩을 확인할 수 있습니다. "UTF-8"을 먼저 클릭합니다. 다음으로 저는 visual studio code를 영문 버전으로 다운받았기 때문에 Reopen with Encoding이라고 나와 있으나 한글버전일 경우 '인코딩하여 다시 열기'를 클릭합니다. Korean의 일부를 입력하면 그와 관련된 목록이 나옵니다. Korean(EUC-KR)을 클릭해줍니다. UTF-8이 Korean(EUC-KR)로 바..
악성 쿼리 오늘은 악성 쿼리문에 대해 알아보도록 하겠습니다. 악성 쿼리문이란 서버의 처리량을 많이 사용해서 결국 서버의 전반적인 성능을 나쁘게 하는 쿼리문을 뜻합니다. 비유를 하자면 많은 사람(쿼리문)이 음식을 주문하기 위해 줄 서 있는데, 어떤 사람(악성 쿼리문)이 계속 판매원에게 필요치 않은 질문을 던져서 뒤에 서 있는 다른 수많은 사람들이 음식을 주문하는데 시간이 오래 걸리는 것과 같습니다. SQL 초보자들은 결과만 나오면 잘 된 것처럼 느끼지만 실무에서는 얼마나 효과적으로 결과를 얻느냐가 중요한 이슈가 되기 때문에 잘못된 악성쿼리를 자꾸 만들지 않도록 신경을 써서 SQL문을 만들 필요가 있습니다.