티스토리 뷰

 - HTML, Javascript 정도는 생활코딩(https://opentutorials.org/course/1703), https://www.codecademy.com/

등을 활용하여 개인적으로 깊이있게 공부해야함.



DOM & BOM 리뷰

 - DOM : document 객체. 열려있는 문서에 대한 모든 정보를 가지고 있는 객체. document, history 등을 가장 많이 사용.


 - document.getElementsByTagName 을 포함하여 태그네임, Id 등을 이용한 요소에 접근하는 방식은 사실 옛날 문법이다.

요즘은 JQuery, Ajax 등 자바스크립트 라이브러리를 사용하여 구현하기 때문에, 추후에 이런 요소들에 대한 공부가 필요하다.



오늘 배우게 될 PHP는 CGI기술에 막대한 영향을 끼친다. 즉 WEB 2.0의 등장에 가장 큰 역할을 했다고 할 수 있다.

WEB 2.0 즉, CGI기술에서 가장 중요하게 다뤄지는 부분은 데이터의 전달(입/출력) 이다.


이전까지에서는 열려진 문서에서 이벤트만  처리하는 정도였는데, CGI 기술이 발달하며 사용자, 제공자 간의 교류가 가능해진다.

사용자가 값 또는 데이터를 전달 하지 않았다면, 보안상 취약점들은 나오지 않았을 수도 있다.


이런점을 인지하고 있어야 왜 우리가 기초 지식을 쌓아야 하고, 웹의 초기부터 현재까지에 이르는 과정을 모두 알고있어야 하는지

설명이 가능하다.



공격 이란?

 - 비정상적인 입력값 들을 의미한다.

 - 따라서 의도하지 않은 결과들을 나타내게 하는것을 의미.

 - 프로그램의 오작동을 이용한다.


그렇기 때문에 데이터가 어떻게 전달되는지 등을 이해 해야만 취약점을 이해할 수 있다.



데이터의 전달 : 네트워크를 이용한 통신


데이터를 전달하는 방식

 - GET 방식

 - POST 방식


위와같은 방식은 HTTP(hypertext transfer protocol) 즉, 하이퍼텍스트를 전송하기위한 네트워크 통신규약에 정의된 방식이다.

이는 사용자가 요청할 때 GET 방식인지, POST 방식인지 결정이 된다.

일반적으로 네트워크에 관련된 내용을 확인할 때는 와이어샤크 등 네트워크 모니터를 이용하여 구체적으로 직접 확인하며 볼 수도 있지만, 웹 해킹에 국한하여 다룰 때는 크롬의 개발자도구에서 확인하여도 충분하다.



# 개발자 도구에서 확인 가능한 네트워크 항목


내가 어떤 하이퍼텍스트를 요청했는지 확인할 수 있다. 물론 요청하는 파일들이 많으면 여러개가 나오게 된다.

Headers 를 눌러서 헤더 파일들을 확인해 보자. 헤더 또한 문자열 형태로 되어있어 직관적으로 확인이 가능하다.



헤더란? 

 - 어떠한 데이터를 어떻게 요청했고, 어떻게 응답이 왔느냐 하는 정보가 들어있는것을 의미한다.


일반헤더(General Headers) : GET 방식으로 되어있음을 알 수 있다.

응답헤더(Response Headers) : 그 자원에 대한 응답에 대한 정보가 들어 있는 부분

요청헤더(Request Headers) : 어떠한 자원을 요청할 때 들어있는 정보



결국 앞으로 중요한것은 어떤 내용을 어떻게 주고받았느냐를 분석하는것이 중요하다.

눈에 보이지 않는데(명시적이지 않은데) 어떻게 흐름이 흘러가는지 머릿속에서 추상화를 시키는것이 중요.



서버쪽으로 데이터를 전달 하면, PHP로 만들어진 웹 어플리케이션이 전달 받는다.

*)_ 웹 어플리케이션

 - CGI 프로그램

 - PHP로 만들어진 프로그램 (앞으로 PHP로 진행을 할 것이기에)


따라서 PHP 환경을 구축하고, 간단한 문법을 확인하자.






PHP

 - 참조 : php.net


PHP 공식 사이트이고, 문서화 된 내용들은 모두 찾아 볼 수 있다. 문서화 되지 않은 내용들은 커뮤니티 등 따로 검색을 통해 확인 가능하다.

한글화 된 정보를 보려면 http://docs.php.net/manual/kr/



# PHP 공식 사이트 이다.






PHP 실행환경 구축



1. PHP 설치


 - 인터프리터 설치 (PHP를 설치한다는 말은 곧 인터프리터를 설치한다는 의미이다. PHP코드를 실행하기 위한 인터프리터를 설치한다.)



#> yum search php 를 입력하면 php에 관련된 여러가지 모듈들을 확인 할 수 있다.

그중에서 우리는 가장 일반적인 php.i686을 설치하도록 하자.


PHP는 서버에서 실행이 되기 때문에 반드시 서버쪽에 실행기를 설치해줘야 실행이 된다.






#> yum install php.i686

입력하여 설치를 진행하자. 중간에 Y를 눌러 설치 확인을 해주고 Complete! 가 나오면 완료된 것이다.






# 기본 아파치 html 루트디렉토리 하위에 php파일을 생성한다.






# 위의 코드중 <?php [코드] ?> 앞부분 php라고 명시해 준 것이 실행기(인터프리터) 를 지정해 주는 것이다.

위와같이 작성 뒤 실행을 해보자.






# 결과가 잘 출력됨을 알 수 있다. 






<?php     //이게 php 블럭의 시작, PHP 라는 실행기를 불러옴

// #> php hello.php


echo "Hello, PHP\n";     //가장 많이 사용되는 출력문구조 셋. echo가 일반적

print "hello, PHP\n";     //파이썬문법에 익숙하면 print 를 사용해도 된다.

printf("%s\n", "Hello, PHP");        //C언어 문법도 사용이 가능하다. (유사하다)

?>







PHP 소스코드 외에 PHP 코드가 아닌 다른코드(예를들어 HTML) 같은게 들어 갈 수 있기때문에

<?php [내용] ?> 과 같이 PHP 블럭을 유지해주고, 해당 블럭 바깥부분에 HTML 코드를 작성 할 수 있다.



# PHP 코드블럭 외에 코드를 입력하여도



# 위와같이 오류없이 출력이 된다.






참고로 PHP는 파이썬과는 달리 더블쿼터 그리고 싱글쿼터 구분을 한다.



PHP를 실행하는 방법에는 위와같이 콘솔에서 실행하는 방법과, 웹에서 실행하는 방법이 있다.


단, 웹에서 실행시 PHP는 자바스크립트로 작성된 파일과의 차이점을 시각적으로 확인 할 수가 없다.

하지만 자바스크립트는 우클릭 -> 소스보기 를 누르면 소스코드가 들어있다.



# 위와같이 소스코드를 확인할 수 있다.






그러나 PHP로 작성된 파일은 다르다.



# 혹시 PHP로 작성된 파일을 웹에서 실행시 위와같이 코드가 보인다면, 아파치 서버가 PHP설정을 못읽은 채 전송한것이다. 따라서 






# 이렇게 아파치를 다시한번 실행시켜주면 된다.






# 이렇게 출력되어야 정상적으로 출력이 되는것이다.






# 우클릭 하여 소스코드를 확인해도 보이지 않는다.







PHP파일은 서버로부터 출력 결과만 받아온다.

자바스크립트는 코드를 모두 불러들여서 웹브라우저가 실행시킨다.


따라서 PHP로 작성된 document는 어떠한 명령에 의해 실행된 것인지 를 알 수가 없으나,

자바스크립트는 어떤 함수를 사용했고 어떤 코드를 사용했는지 볼 수 있으니 확인이 가능하다.


이 차이점을 인지하는것이 매우 중요하다. 이에 따라 공격 방향이 달라지기 때문.

그래서 경험이 매우 중요하다. PHP 취약점은 모두 추측성이다. PHP언어나 프로그래밍적 지식이 없으면 공략이 매우 어렵다.


기본적으로 php 확장자를 가지고 php파일인지 인지를 한다. 


또한 콘솔에 출력했을때와는 달리, 브라우저에서는 \n 이 인식되지 않는다.

브라우저에서는 <br> 을 이용해야한다.



# 다음과같이 <br> 을 통해 웹브라우저에서는 \n 을 먹일수가 있다.








**HTML파일로 실행했을때와 PHP파일로 실행했을떄의 차이점 명확하게 인식해야한다.


PHP는 실행 결과만 가져 오는것. 

HTML은 브라우저 에서 실행시켜서 오는것.


그러나 이렇게 차이점을 둬도 화면상에서 보이기엔 동일하게 보이기 때문에

이런 차이가 존재할 수 있다는것을 항상 염두해두어야한다.


어디서 실행되느냐? 가 공격에 있어서 매우 중요한 요소가 된다.


웹브라우저를 통해 접근하는것 만으로도 소스코드를 표현이 가능하다.

우리는 웹브라우저를 통해서 서버와 통신하는 형태로 어플리케이션을 실행한다.

php는 반드시 서버에 코드가 있어야 결과물을 확인 할 수 있다.






# 에러메세지 확인이 콘솔에서는 가능하지만, 웹상에서는 아예 나타나지를 않는다.



웹상에서도 에러메세지를 출력하려면 설정을 변경해주어야 한다.



#> vi /etc/php.ini

입력 이후



#> :530 을 입력하여 530번째 행에 위치한 display_errors 항목을 ON 으로 수정해준다.


*)_ 명령어

리눅스 vi 창에서 저장 안하고 나가는 경우엔 :q! 







PHP 문법 기본

 - 다른것과 나머지는 거의 비슷하지만, 배열이 조금 어렵다. 연관배열부분



# 이렇게 보면 파이썬의 딕셔너리 같은 개념이다. 키와 값을 지정해 줄 수 있다.

php는 변수 앞에는 반드시 $ 로 시작해야함.






# 이렇게 선언하는 방법이 첫번째

배열의 원소를 출력하려면 이렇게 첨자 를 넣어줘서 가능하다.






# 이렇게 배열을 사용 가능.

배열 선언시 키값을 따로 지정해서 해당 키 부터 순차적으로 할당되게끔 할 수 있다.


. 은 자바스크립트의 + 연산자와 동일한 역할. PHP는 연결 연산자가 . 이다.






# 이와같이 다차원 배열 표현 가능하다.






#PHP의 장점은 "" 더블쿼터 내에 변수를 넣어도 출력이 가능하다.

변수 앞에는 $ 달라싸인이 붙어야 하기때문에 인식이 가능한것인데, 그래도 혹시모를 오류를 방지하기위해 변수는 중괄호로 묶어준다. 






그 외 기능들은 자바스크립트랑 거의 유사하다.



# PHP도 같다 같지않다 를 비교할 때 세개를 사용한다. (출처 : https://www.w3schools.com/)






# 파이썬에서의 for ~ in 문법인데, PHP에서는 foreach 로 사용한다.

단, 여기서는 인덱스를 반환하지 않고 값을 반환해서 출력해준다.






# 이렇게 키와 값을 한꺼번에 출력하는 문법도 알아두자.

'WEB > WEB HACKING' 카테고리의 다른 글

1-9) 사용자 인증 / MySQL을 사용한 Database  (0) 2018.02.22
1-8) GET vs POST  (0) 2018.02.21
1-6) JavaScript DOM, BOM  (0) 2018.02.15
1-5) Javascript 이론 마무리, 실습  (0) 2018.02.14
1-4) id, class / 서버연동 / javascript  (0) 2018.02.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함