네트워커의 보안 티스토리

* 본 게시물의 내용은 수업에서 배운 것을 정리한 것이므로 악용해서는 안됩니다.

  게시된 내용들은 잘 알려져있는 기술들입니다. 따라서  악용하더라도 쉽게 적발되니

  절대 악용해서는 안됩니다.

--------------------------------------------------------------------------------------------


26일차에 CSRF 를 살펴보았다.


방어방법을 살펴봐야할 차례다.


* 대응책

- XSS 취약점이 없도록 한다


- Session Token만을 이용한 권한 부여 금지


- 서버가 클라이언트가 전달하는 Referer가 정상인지 확인하게 끔 한다








다른 것들이 실행되기전에 제일 먼저 확인해주는게 좋을 것 같다.


요청메시지중에 REFERER 헤더의 문자열을 가지고오게 된다.

그 함수를 Len이라는 함수로 길이를 가져온다.

그 길이가 0이라면 then,  <script>alert('레퍼러 어딨죠?')</script> 라는 스크립트를 실행하고 종료후 , if문 끝마침




레퍼러를 지운후 해보니 잘된다.


그런데 레퍼러가 있냐 없냐로는 공격방어를 할 수 없다.


왜냐하면 공격당한 요청메시지에도 레퍼러가 있다.


if문을 활용하려면

if not

혹은

if 조건문 =대신에 <>해주면 부정문을 사용할 수 있다.





세션 아이디가 변경될 것을 고려해서, mid, instr 함수로 추출해서 값을 비교한다.



웹서버가 제공해주는 기능을 전체를 대상으로 CSRF 공격이 되는지 안되는지 테스트해봐야한다.





#################


* SQL (Structured Query Language)


DDL(Data Definition Language) : 데이터 정의어

DML(Data Manipulation Language) : 데이터 조작어
DCL(Data Control Language): 데이터 제어어







실행 시킨 모습






varchar은 최대 20인데 더 적게 들어가면 더 적게 잡아먹는다.

하지만 요즘 char쓴다. 처리속도가 더 빠르다. 하드값보다 처리속도가 더 중요하니까.


Null은 있어도 되고 없어도 된다는 옵션이다.








like 는 포함한 내용


%는 앞에 뭐가있든 해당되는 것


%혜% 라면 혜가 어디에있든.




* 집계함수


SELECT 집단함수(<필드명>)

FROM <테이블명>


예) SELECT COUNT(*) FROM member








상황에 맞춰서 사용하면 되겠다.



-select 구문과 집계함수를 이용해 신설동에 사는 사람 중 나이가 가장 많은 사람의 이름과 나이를 구하라.


(주소 조건은 zipcode로, 쿼리문은 하나로 할 것!!!)



¿ 쿼리문의 결과를 데이터로 사용하려면 해당 쿼리문 전체를 괄호로 묶어주면 된다.










* UNION


SELECT <필드명> FROM <테이블명> WHERE <조건>


UNION
SELECT <필드명> FROM <테이블명> WHERE <조건>


- 합쳐질 필드의 개수와 타입이 같아야함.


- 두 테이블의 검색결과를 합쳐서 반환한다.


예) SELECT name, age FROM member UNION SELECT strname, intReadno FROM board



공격자는 아래와 같은 error 발생으로 user_pw 데이터 값을 가져올 수 있게 되는데





형변환 오류로 인한 공격이다


mysql은 형변환을 자동으로 하지만, mssql은 형변환을 자동으로 하지 못한다.





* INSERT


INSERT INTO <테이블명> (컬럼명,) VALUES(값,)



예 ) INSERT INTO member(user_id,user_pw,name,nickname,age) VALUES('hacker','hacker','hacker','hacker',1)



* UPDATE


UPDATE <테이블>

SET <필드명>=<값>

WHERE<조건>


<조건>에 맞는 레코드의 <필드>값을 <변경될 값>으로 변경

조건 없을시 전부다 변경됨


예) member 테이블의 '이명수'를 '박명수'로 수정

UPDATE member SET name='박명수' WHERE name='이명수'


name뿐만 아니라 email도 바꾸고싶을때는


UPDATE member SET name='박명수' , email=asd@asd WHERE name='이명수'



DELETE


DELETE

FROM <테이블명>

WHERE <조건>


<테이블명>에서 <조건>에 맞는 레코드를 삭제한다.



* SQL INJECTION


사용자로부터 입력 받은 데이터를 이용하여 동적으로 Query 구문을 완성하도록 되어있는 페이지에서 사용자로부터 입력된 데이터가 적절한 검증없이 DB 쿼리문의 일부로 포함되는 경우 발생할 수 있다.




- 웹 어플리케이션 인증 우회

- Database 덤프, 조작, 파괴

- 시스템 커맨드의 실행 (주로 MS-SQL 에서 발생)

- 시스템 주요 파일 노출




웹 어플리케이션의 일반적인 ㅇ니증 절차


1. ID / PASSWORD 입력


2. SQL Query 생성


3. DB에 쿼리 전송


4. DB에서 쿼리 실행


5. 반환되는 Return 값에 따라 인증 여부 판단.



공격자가 제일 먼저 하는 것은 인젝션 벡터 찾기


SQL 구문에 영향을 줄 수 있는 문자들을 다양한 방법으로 삽입하여 결과 확인


'

"

;

--

#

/* */










익스플로러는 고급탭-  HTTP 오류메시지 표시 체크해제 해야 저런 오류 메시지를 확인 할 수 있다.



  다시 경고하지만 

* 본 게시물의 내용은 수업에서 배운 것을 정리한 것이므로 악용해서는 안됩니다.

  게시된 내용들은 잘 알려져있는 기술들입니다. 따라서  악용하더라도 쉽게 적발되니

  절대 악용해서는 안됩니다.


###


where 1=1 경우 where 절에 참인 값을 넣어주면 다 불러온다.

이걸 응용한 것이다.


기존에 있는 ''와 조합을 이루어 참을 만들어낸 것이다.



'or1='1





- 주석처리 활용




- 일부는 아는데 일부는 모를 경우





'or1='1같은 경우 계정 중 맨 첫번째 줄 계정으로 접근이 되기 때문에

혹시라도 모를 상황에 대비해 1,2번째 계정은 아무 권한 없는 계정을 생성 해두는 것이 좋다.


그러므로 관리자 계정은 쉽게 유추가 가능한 아이디로 하면 안된다.


ex) admin, administrator , root


'정보보안' 카테고리의 다른 글

29일차 데이터 스키마, SQL 인젝션  (0) 2017.03.20
28일차 SQL Injection  (0) 2017.03.17
26일차 CSRF  (0) 2017.03.15
25일차 XSS webshell  (0) 2017.03.14
24일차 인증공격 XSS  (0) 2017.03.13