DVWA Security Level 을 Low로 설정하고 XSS (Reflected) 페이지로 들어간다. 페이지에 접속하면 이름을 물어보는 폼이 있다. 여기에 alice라고 입력해보자. 입력한 값이 다시 그대로 리턴 되는 것을 알 수 있다. XSS 취약점을 찾기 위한 가장 간단한 방법은 script 태그를 위와 같은 폼에 입력해 보는 것이다. 구문을 넣어보자. 위 그림과 같이 XSS 취약점이 있으면 이렇게 script가 실행된다. alert라는 함수에 의해서 1이라는 값이 출력 되었는데 이 말은 script가 웹 브라우저에서 실행 되었다는 뜻이고 XSS 공격이 가능하다는 뜻이다. 이와 같이 script 코드가 요청에 실어 보내질 때 바로 script가 리턴이 되어 실행되는 것을 reflected XSS ..
XSS 공격은 자바스크립트와 밀접한 관련이 있다. 자바스크립트에 대해 잠깐 살펴보자. 자바스크립트 · 웹 애플리케이션에서 사용되는 언어 - HTML : 텍스트, 이미지 등 정적인 내용을 표시 - 자바스크립트 : 동적인 기능 구현(마우스를 가져가면 메뉴의 색깔이 변함) · 와 같이 구현 - => 이 코드는 쿠키를 빼내는 데 사용 할 수 있다. 쿠키에는 세션 정보가 포함되어 있는데 document.cookie를 실행하면 그 값을 읽을 수 있다. document.location 을 이용하면 외부의 사이트로 전달 할 수 있다. - => 자바 스크립트는 파일 인클루전 공격과 유사하게 src 소스 키워드를 이용하여 외부의 자바 스크립트를 페이지 내에 삽입시켜 실행 할 수 있다. 이를 이용해 외부 해커 사이트에 올려..
DVWA Security Level을 High로 설정하고 SQL Injection 페이지로 간다. High 단계의 SQL Injection 페이지에는 링크가 있는데 이 링크를 눌러보자. 다음과 같은 창이 뜨고 여기에 ID 1을 입력하면 그 결과가 원래 페이지에 표시되는 구조이다. Low 단계와 비교했을 때 폼을 새로운 창에서 입력 받는 차이가 있다. 하지만 만약 이것 뿐이라면 Medium 단계에서 보았듯이 GUI의 변화는 SQL 인젝션 공격을 전혀 막을 수 없다. 소스 코드를 한 번 보도록 하자. 소스 코드를 보면 LIMIT 이라는 키워드를 이용하여 출력되는 레코드의 수를 조절하고 있다. 무조건 하나만 출력 되도록 막고 있는 것이다. 하지만 이것 역시 SQL 인젝션 공격을 방어하는 용도로는 아무런 의미가..
1. 프로세스 생성 부모 프로세스가 자식 프로세스를 만듬. 사람처럼 아버지, 어머니 한 쌍의 부모가 아니라 부모 프로세스는 하나가 자식을 복제해서 만듬. 프로세스의 족보는 트리 형태 ⇒ 자식을 여러개 나을수(복제) 있음 프로세스가 실행이 되려면 자원이 있어야함(CPU, 메모리 등). 이 자원은 OS로부터 받음. 이 자원을 부모와 공유하는 경우가 있고 공유하지 않는 경우가 있음. 원칙적으로는 공유 X (공유하지 않는 것이 일반적) ⇒ 부모 프로세스가 자녀 프로세스를 복제하면 그때부터는 별도의 프로세스이기 때문에 서로 CPU, 메모리를 더 많이 얻으려고 경쟁하는 사이가 됨. 그럼 공유는 어떤 경우에? ⇒ 자식 프로세스는 부모 프로세스를 메모리에 그대로(코드, 데이터, 스택의 주소공간) 카피. 그러면 메모리에..
2장 부연설명 "설명 드리기에 앞서 2장 동기식 입출력과 비동기식 입출력의 차이점에 대한 질문이 많이 들어와서 먼저 이것에 대한 간단한 부연 설명을 드리고 나서 3장을 계속 진행하겠습니다." -교수님- 사용자 프로세스가 OS에게 IO요청을 한 경우, IO가 수행되는 동안 이 프로세스가 입출력이 끝날때가지 아무일 안하고 기다린다면 동기식 입출력. 사용자 프로세스가 입출력 요청을 했을 때, 입출력이 진행되는 동안 그 프로세스가 무언가를 instruction을 하면 비동기식 입출력 동기식이냐 비동기식이냐를 구분할 때 프로세스가 CPU를 가지고 있느냐 없느냐는 중요하지 않음. IO작업 동안 다른 무언가를 실행하지 않고, 결과를 받을때 까지 기다린다면 동기식. IO작업 요청을 한 다음 자신의 일을 계속 수행하는 ..
1. 프로세스의 개념 2. 프로세스의 상태 (Process State) 3. 프로세스 상태도 4. Process Control Block (PCB) 5. 문맥 교환 (Context Switch) ⭐ 6. 큐 (Queue) 7. 스케줄러(Scheduler) 1. 프로세스의 개념 프로세스는 실행중인 프로그램 프로세스의 문맥이란 프로세스가 태어나서 실행이 되다가 종료가 될텐데, 이 프로그램 중간 어느 시점을 잘라놓고 봤을 때 이 프로그램이 무엇을 어떻게 실행 했는 지, 현재 시점에 어떤 상태에 있는 지, 어디까지 작업을 수행했는지를 정확하게 나타내기 위해서 사용되는 개념 프로세스가 CPU를 점유하게 되면 CPU안의 Program Counter라는 레지스터가 이 프로세스의 code 어느 부분을 가리키게 되고, ..
DVWA Security Level 을 Medium으로 설정하고 SQL Injection 페이지로 간다. 이번에는 ID를 폼에다가 입력하는 것이 아니라 정해진 값을 선택하도록 되어 있다. 이 경우 비록 GUI에서 값을 선택하도록 만들어놨지만 Intercept 기능을 이용해서 값을 바꾸는 것을 시도해 볼 수 있다. Burp Suite의 Proxy -> Intercept로 가서 Intercept를 켠다. User ID를 1로 선택하고 submit을 눌러 본다. Burp Suite에서 위와 같은 화면이 나오는데 여기서 id=1 부분을 id=1' or '1'='1 로 수정하여 Forward를 한다. Forward를 했더니 그림과 같이 구문 에러가 난다. id값이 1, 2, 3, 4, 5 로 숫자로 되어 있었는데..
지금까지 우리는 SQL 인젝션 공격을 손수 시도하여 각종 정보를 알아내는 실습을 하였다. 이번 시간에는 SQL 인젝션 공격 프로그램 중 가장 대중적이라고 할 수 있는 SQLMAP 이라는 프로그램을 이용하여 자동으로 공격하는 방법을 배워 보자. Applications 메뉴로 가서 Web Application Analysis -> sqlmap 클릭 sqlmap은 파이썬으로 개발된 프로그램으로 터미널에서 명령을 실행 할 수 있다. sqlmap 화면을 보면 sqlmap과 관련된 각종 옵션들을 참고 할 수 있다. 이 중 필수 옵션은 -u 이다. -u 뒤에다가 공격할 URL주소를 입력하면 sqlmap 프로그램이 그 url을 대상으로 자동으로 공격을 수행한다. DVWA처럼 로그인 된 상태에서 공격을 수행할 때는 쿠키..
이번에는 블라인드 SQL 인젝션에 대해서 알아보자. DVWA의 블라인드 SQL 인젝션 페이지에 들어가서 1이라는 id를 입력해보자. 사용자 1에 대한 정보가 나오는 대신에 이 페이지에는 ID 1인 사용자가 존재한다는 것만 알려준다. 이번에는 지난번에 SQL 인젝션 공격을 할 때 했던 것 처럼 한 번 작은 따옴표를 입력해본다. 특별한 에러가 발생하는 대신 사용자가 존재하지 않는다는 메시지를 보여준다. 에러가 발생하지 않기 때문에 이 폼 뒤에 SQL 쿼리문이 사용되고 있는지, 또 우리가 조작할 수 있는지 쉽게 알기 어렵다. 만약 조작한다고 하더라도 데이터의 내용을 출력하지 않기 때문에 쉽게 정보를 빼내기도 어렵다. 이번에는 1'AND 1=1# 을 입력해본다. ID가 존재한다고 나온다. 1' AND 1=2# ..
1. 동기식 입출력과 비동기식 입출력 ⇒ IO에서의 synchronous라고 하는 것은 IO까지 가서 결과를 보고 오는 것을 보통 동기식 입출력이라고 함. ⇒ 동기식 입출력은 I/O 요청 후 I/O장치로부터 작업이 끝난 다음에야 사용자 프로그램이 다음 일을 함. 비동기식 입출력은 I/O장치에 무언가를 요청한 다음 (결과를 기다리지 않고) 바로 다시 CPU제어권을 얻어서 일을 수행. ⇒ IO장치에 여럿이 동시에 접근할 수 있는데 예를들어, A는 이 IO장치에 갖다 쓰고(synchronous write), B는 읽어오고(synchronous read). 이 때, A, B 모두 읽고 쓰는 것 확인까지 한 상태 ⇒ IO 장치에 가지 않고(확인하지 않고) 다음 일을 수행하는 것은 asynchronous(비동기식 ..
1. 컴퓨터 시스템 구조 ⇒ Memory는 CPU의 작업 공간. CPU는 매 순간(매 클럭) 메모리에서 기계어를 하나씩 읽어서 실행. ⇒ I/O device로 부터 Computer로 데이터를 가져가는 것을 input, 처리된 결과가 I/O Device로 나타나는 것을 output이라고 함. ⇒ Disk는 input 장치이기도 하고 output 장치이기도 함. 파일을 메모리에 input, 파일을 disk에 output. ⇒ 각각의 IO device들은 각 device를 전담하기 위한 작은 cpu같은 것들이 있음. 이것을 device controller라고 부름. ⇒ disk에서 head가 어떻게 움직이고 어떤 데이터를 읽을지와 같이 disk 내부를 통제하는 것은 cpu가 아닌 disk에 붙어있는 disk ..
데이터베이스 정보를 알아내보자. 깃허브에 올려져 있는 SQL 구문을 보면 데이터베이스 명 조회에 관련된 구문이 있다. 이 구문을 사용한다. information_schema라는 데이터베이스의 schemata라는 테이블에서 정보를 가져오는데 mysql에서는 information_schema라는 데이터베이스에서 데이터베이스 정보나 테이블, 칼럼 정보를 관리하고 있다. schema_name을 가져오면 데이터베이스 명을 조회할 수 있다. user ID에 위의 구문을 넣고 실행한다. 모든 데이터베이스의 이름들이 출력되었다. dvwa, information_schema, mysql 등의 데이터베이스 명이 있음을 알 수 있다. dvwa 데이터베이스가 우리가 관심을 가질만한 DB이다. select로 schema_nam..