[reference doc/site] 

http://sweet-memories.tistory.com/3

http://ccnpsecurity.blogspot.kr/2011/12/tcp-header-format.html

- http://blog.naver.com/ssamba?Redirect=Log&logNo=125712071

http://packetcrafter.wordpress.com/2011/02/13/tcp-flags-hackers-playground/


1. TCP 프로토콜 구조



- telnet 은 요즘은 리눅스에서도 사용되지 않고 ssh 로 대체됨

- 꼭 봐야할 프로토콜 : IP, ICMP, TCP, UDP


2. TCP 프로토콜 역할과 특징

1) 역할

- 데이터를 전송 전 양 종단 간의 연결 설정

- 연결 설정 후 가상회선 생성

- 데이터그램 연결이 설정된 것을 알리고 연결종료를 통해서 연결을 종료

- 패킷이 아닌 전체 메시지를 기다림

- 오류 검출 기능과 손상된 프레임의 재전송을 보장


2) 특징

- 높은 신뢰성

- 가상회선 연결 방식 : 전화선과 비슷한 개념

- 연결의 설정과 해제

- 데이터 체크섬 : 요즘은 장비들이 각각 기능에 따라 패킷을 건드려서(소스 IP 변경 등) 잘 사용안됨

- 시간 초과와 재전송

- 데이터 흐름 제어


3. TCP Segment Format


- TCP 세그먼트의 전문 구조 (20byte)


- TCP 세그먼트를 2바이트 단위로 쪼갠 구조



- 출발지, 목적지 포트 번호 : 호스트에 있는 응용 프로그램의 포트 번호

- 순서번호 : 전달되는 각 바이트에 대한 시퀸스 넘버로 1씩 증가

- 확인번호 : 수신측에서 수신하고자 하는 바이트의 번호

- 헤더길이 : TCP 헤더의 길이

- 예약 : 아직 사용하지 않는 필드로 값은 0


4. TCP Flag


1) URG (Urgent)

-  Urgent point 유효여부, Urgent pointer 란 전송하는 데이터 중 긴급히 전달해야 할 내용이 있을 

    경우에 사용


2) ACK (Acknowledgement)

- 받는 사람이 보낸 사람 시퀸스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK

   를 보냄


3) PSH (Push)

- 대화형 트랙피에서 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달


4) RST (Reset)

- 재설정을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업. 비 정상적인 세션 연결 끊기에

   해당


5) FIN (Finish)

- 세션을 종료시키는 데에 사용되며 보낸 사람이 더 이상 보낸 데이터가 없음을 보여줌


6) SYN (Synchronization)

- 세션을 설정하는 데에 사용되며 초기에 시퀸스 번호를 보내고, 시퀸스 번호는 임의적으로

   생성하여 보냄


- 와이어 샤크에서 TCP Flags



'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
Form SQL Injection  (0) 2013.11.10
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,

[reference doc/site] 

http://www.9lessons.info/2008/12/sql-injection.html

http://www.w3resource.com/php/function-reference/addslashes.php

http://docs.moodle.org/dev/Slashes

http://kyumboy.tistory.com/40


1) 정의

- 폼 기반 사용자 인증을 하는 어플리케이션에서 사용자 인증을 위한 쿼리가 참이 되도록 하여 인증을 우회

   하는 SQL Injection 취약점중의 하나


2) 특징

- where 절 이하가 항상 참이 되도록 입력 폼에서 쿼리 조작을 한다.

- 입력한 id 에 의한 개별 사용자 인증이 아닌 Table 에서 반환되는 첫 번째 레코드가 있으면 사용자 인증이 

   되는 것으로 권한을 획득


3) 예



- Java

- Login Source


String userid = request.getParameter("userid");

String password = request.getParameter("password");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection("jdbc:odbc:projectDB");

query = "SELECT * FROM Users WHERE user_id ='" + userid + "' AND password ='" + password +"'";

PreparedStatement ps = connection.prepareStatement(query);
ResultSet users = ps.executeQuery();

if(users.next()){

//some thing here
}
else{

}


- 실제 작동되는 쿼리


query = "SELECT * FROM Users WHERE user_id ='' OR 1=1; /* AND password ='*/--'";


- PHP

- Login Source


$myusername=$_POST['usr']; 

$mypassword=$_POST['pwd']; 

$sql="SELECT * FROM users WHERE user='$myusername' and password='$mypassword'";

$result=mysql_query($sql);
$count=mysql_num_rows($result);

if($count==1){

//some code
}
else {

}


- 실제 작동되는 쿼리


$sql="SELECT * FROM users WHERE user=''OR 1 = 1;//' and password='....'";


4) 조치

① addslashes(), stripslashes()

- java, php 소스는 post 로 넘어온 값에 addSlashes() 함수를 붙여 작은 따옴표, 큰 따옴표 문자열 

   앞에 백 슬래시를 추가시켜 저장한다.

- DB 에 저장된 값을 꺼내 비교할 때는 stripslashes() 함수로 백슬래시를 제거해서 비교한다


//Java Code

addSlashes(String userid);

// PHP Code
$myusername=addslashes($_POST['usr'];);



- 예



② 매개변수 활용

- 쿼리문내에서 ? 등의 매개변수를 사용해서 입력 변수를 매칭시킨다.



③ 입력 문자열 길이 제한

- ID, 비밀번호 자리에 맞게끔 입렵박스 length 를 제한하면 명령어 삽입이 어렵다.


'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,

(2013.10.25) 중간고사

2013. 10. 27. 02:23

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.