$bash

5. 해커의 분류

0x0300 : Study/0x0306 : ETC

해커의 분류.

White hat 

:: 순수하게 공부와 학업을 목적으로 악의적 목표가 없이 하는 해커.


Black hat

:: 악당이라는 의미로 타인에게 피해를 주는 해커.


Gary hat

:: 화이트와 블랙의 개념이 섞인 헤커 순수한 목표로 공부하지만 대가로 무언가 주어진다면 악의적인 행동을 할 수 있는 해커.


Blue hat

:: 보안 분야의 베타 테스터의 개념, 보안 컨설팅 화사에서 근무하는 사람을 의미한다고 한다.


Script Kiddie

:: 프로그램을 이용하여 해킹하는 아마추어 해커.


Hacktivist

:: 해커와 정치가의 합성어로 정치적 사회적 슬로건을 가지고 알리려는 해커.

'0x0300 : Study > 0x0306 : ETC' 카테고리의 다른 글

7. 저작권  (0) 2016.07.03
6. 정보기기 보안 및 관리 수칙  (0) 2016.06.30
4. 해킹과 크래킹  (2) 2016.06.30
3. 정보 윤리와 네티켓  (0) 2016.06.28
2. 컴퓨터가 처리과정중 필요 하는 이유  (0) 2016.06.28

4. 해킹과 크래킹

0x0300 : Study/0x0306 : ETC

해킹(Hacking)

:: 허가 받지 않은 상태에서 다른 사람이나 기관의 컴퓨터 시스템에 접근하여 저장된 정보를 마음대로 복사, 변경 삭제 등의 광범위한 행위를 

의미한다.


해킹의 유형?

3가지 유형은 말그대로 웹은 웹에서 시스템은 운영체제 또는 프로그램, 네트워크는 네트워크 에서 나오는 취약점을 찾아 공격하는 행위이다.


개인적 견해..?

// 해킹의 유형에는 Web, system, Network 가 있다고 한다. 하지만 본인은 System, Network 가 큰 의미이 해킹유형이라고 생각한다.

// Web은 Network 요소와 System요소가 복합적으로 있다고 생각한다. 하지만 단순히 웹페이지 에서만 진행되는 것이 웹이라면...할말이 쩝..


크래킹(Cracking)

:: 다른 컴퓨터의 시스템을 파괴하려는 계획을 세우고 침입하는 행위라는 부정적인 의미의 해킹을 의미한다.

'0x0300 : Study > 0x0306 : ETC' 카테고리의 다른 글

6. 정보기기 보안 및 관리 수칙  (0) 2016.06.30
5. 해커의 분류  (0) 2016.06.30
3. 정보 윤리와 네티켓  (0) 2016.06.28
2. 컴퓨터가 처리과정중 필요 하는 이유  (0) 2016.06.28
1. 자료와 정보  (0) 2016.06.28

System - Return To Library

0x0300 : Study/0x0301 : System

PLG ? GOT?

Plt (Procedure linkage table)

사용자가 만든 함수는 plt를 참조할 필요가 없지만 외부 라이브러리에서 가져다 쓸 경우 plt 를 참조 하게 된다.


got (global offset table)

함수들의 주소를 담고 있는 테이블이다. 라이브러리에서 함수를 호출할 때 plt가 got를 참조한다.



즉 외부 라이브러리에서 함수를 참조할 때? plt에서 got로 넘어가고 got는 실제 라이브러리 함수주소가 들어있다.


got overwrite라는 기법이 plt, got의 동작 과정에서 고안해낸 기법이다. got는 실제 함수의 주소를 가리켜서 그곳을 실행 하기 때문에

got에 우리가 원하는 주소로 덮어버리면 특정 함수가 실행되지 않고 우리가 원하는 주소가 실행된다.


plt (Procedure linkage table)

gdb를 통해 디버깅을 해보면..


fflush@plt

fget@plt

puts@plt


처럼 외부 라이브러리가 있는 것을 확인 할 수 있다.

그 밖에도 사용자가 만든 procedure들도 확인 할 수 있는데...예시가 없어 확인 해줄 방도가..


got (global offset table)

// 뭐라 설명하기 힘든데...공부한 블로그 자료 보는게 좋을듯 ..

// 주소는 아래에 !


즉.

함수 실행전>>

plt 주소 > got 주소 (JMP plt + 6) > jmp got > dl_runtime_resolve > dl_fixup > dl_lookup_symbol > jmp function address


함수 실행후>>

plt 주소 > got 주소 > jum function address



Return To Library

:: 공유 라이브러리에 있는 함수의 주소를 이용해서 바이너리에 존재하지 않는 함수를 사용 할 수 있다.


DEP (Data Execution Prevention) 메모리 보호기법 우회.

:: 데이터 실행방지로 스택이나 힙에서 쉘 코드를 실행방지를 해주는 메모리 보호 기법.

NX bit (Never Execution Bit) 가 적용된 스택을 우회하기 위해 사용.

:: NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에서 상주 하지 않음으로써 실행되지 않도록 만들어 준다.


본문에서 사용된 예시이다.

// 커피하고 2진법 저거는 무시..


이 코딩을 보면 strcpy라는 함수구문에 libc_start_main대신 system을 실행 하고자 한다.

// system("bin/sh")을 실행 시키는 것이 목표.


먼저 저 코드의 스택 구조를 살펴보면


buf[128] 

sfp[4] 

ret[4]

 dummy[4]

parameter[1] 


이러한 구조로 나타나 있다.

// 이 또한 gdb를 통해 구조를 파악. 사실 굳이 안해도 이정돈 구상 해야되는듯...?


우린 저 구조에서 ret[4]를 ..


 ret [4]

 >>

 libc.so.6

 

 

system() 

처럼 변환 하여 sh을 실행 시키고자한다.


// 왜 이렇게 되는지는 bof하면서 아니깐 pass...궁금하면 원문 링크 .


buf [128] + sfp 값 + return 값 + "AAAA" + parmeter 를 넣어서 실행 시키면?

eip에 0x41414141 이라는 값이 입력 되어있을 것이다...이 곳으로 bof? 이론처럼 하면 되는듯..?


-----

ASLR (Address Space Layout Randomization)

:: 동적 라이브러리의 주소를 프로그램 실행마다 매핑!


ulimit -s unlimited를 이용하면 스택이 더이상 증가하지 않고 랜덤으로 매핑이 되는 것을 방지 할 수 있다.

// ulimit > 시스템 제한    ,    -s > 최대 스택 크기 출력    ,    unlimited > 크기제한 해제.

// 리눅스 상위 버전이나 대부분인거 같은데... aslr이 걸려있다는 거 같다..


-----


다시 돌아와서 ..

시스템 주소값과 파라미터 주소 값을 알게 되어 sh 를 실행 시키면 되는데...


원문에서는 export PATH를 이용해 환경변수에 시스템 출력 하는 것을 지정하였다.

// export PATH=.:$PATH    >    환경변수에 현재 위치( . )를 등록..


페이로드를 작성하면...


buf [128] + sfp [4] + 0x4007b190 (시스템 주소값) + dummy [4] + 0x44가 들어 있는 주소.

// 0x44값을 지우고 쉘 코드를 넣어서 해도 될듯 하다...

// 사용된 주소값은 원문에서 쓰인 값이다.



" 출처 : http://shayete.tistory.com/ "

'0x0300 : Study > 0x0301 : System' 카테고리의 다른 글

System - Format String Attack 1  (0) 2016.08.05
생각난김에 쓴 심볼릭 링크  (0) 2016.07.19
System - Assembly Handray  (0) 2016.06.12
System - stack? gdb?  (0) 2016.06.12
System - 시스템해킹이란?  (0) 2016.06.12

3. 정보 윤리와 네티켓

0x0300 : Study/0x0306 : ETC

정보 윤리의 기본 규칙

존중의 원칙            :    나 자신이 존중을 받기 원한다면 타인부터 존중 해야된다.

책임의 원칙            :    자신이 언급하거나 만든 파생물은 본인이 책임저야 된다. 회피하거나 기피 해서는 안된다.

정의의 원칙            :    다른 사람의 자유와 권리를 침해 하지 않고 자신이 제공하는 정보에도 공정성과 완전성을 추구해야 된다.

해악 금지의 원칙    :    악성 프로그램을 유포나 저작권 침해, 사이버 폭력 등등 다른 사람에게 해가 가는 행동을 해서는 안된다.


네티켓의 기본원칙

1 .     통신하고 있는 상대가 본인과 같은 사람임을 인지한다.

2.     실제 생활과 적용 되는 것과 같은 기준임을 행동하고 고수한다.

3.     자사이 접속해 있는 곳을 정확히 알고 그곳 문화에 어울려 행동한다.

4.     다른 사람의 시간을 존중한다.

5.     자신의 표현하는데 주의를 가한다.

6.     전문적인 지식은 공유를 한다.

7.     논쟁은 절제된 감정 아래 행동한다.

8.     다른 사람의 사생활을 존중한다.

9.     자신의 권력을 남용 하지 않는다.

'0x0300 : Study > 0x0306 : ETC' 카테고리의 다른 글

6. 정보기기 보안 및 관리 수칙  (0) 2016.06.30
5. 해커의 분류  (0) 2016.06.30
4. 해킹과 크래킹  (2) 2016.06.30
2. 컴퓨터가 처리과정중 필요 하는 이유  (0) 2016.06.28
1. 자료와 정보  (0) 2016.06.28

2. 컴퓨터가 처리과정중 필요 하는 이유

0x0300 : Study/0x0306 : ETC

컴퓨터가 자료 처리 과정중 사용 해야 되는 이유?

정확성    :    1+1은 2라는 값처럼 진리값만이 도출하여 나타난다.

신속성    :    사람보다 처리하는 속도가 빠르다.

대용량성 :    많은 양의 정보를 저장 하여 처리 할 수 있다.

자동성    :    사용자가 만든 프로그램을 통해 자동적으로 실행시킬수있다.

정보통합 :    다양한 정보를 통합하여 처리 할 수 있다.

전달성    :    시간과 공간의 제약 없이 멀리 보낼 수 있다.


'0x0300 : Study > 0x0306 : ETC' 카테고리의 다른 글

6. 정보기기 보안 및 관리 수칙  (0) 2016.06.30
5. 해커의 분류  (0) 2016.06.30
4. 해킹과 크래킹  (2) 2016.06.30
3. 정보 윤리와 네티켓  (0) 2016.06.28
1. 자료와 정보  (0) 2016.06.28

1. 자료와 정보

0x0300 : Study/0x0306 : ETC

자료(Data)

자료란 정보를 구성하는 요소이다. 단순한 사실이나 값들 따위의 집합을 뜻한다.


보통 연구나 조사 등의 바탕이 되는 재료를 말하며, 자료를 의미있게 정리하면 정보가 된다.


정보(Information)

수집한 자료를 다양한 방법으로 가공하고 처리하여 사용자가 의미있게 사용 할 수 있도록 한 결과물 이다.


정보는 항상 변화하고 있으며, 그 속도가 더욱 빠르게 진행된다. 개인이 하나의 정보를 선택하게 된다면 변화에 의해 불확실성이 커지게 되며 정보의 가치가 적어질 수 있다는 이유 때문에 선택된 정보보다 선택되지 않은 정보가 더 가치 있으며 불안감을 조성하게 된다.


정보의 특성

적시성     :    필요한 상황이 연출 되었을 경우 제공되어 정보가 가치가 있게 된다.

활용성     :    활용이 되어야 비로소 정보의 가치를 가지게 된다.

비인전성  :    타인에게 전달되어도 본인에게 남아 있게된다.

결합성     :    결합되거나 가공되어 다른 정보로 파생이 될 수 있다.

희소성     :    독점이 되어있을 때 가치가 증대된다.

무형성     :    보이지 않고 형태가 없다.

정확성     :    정확하고 공신력 있어야 신뢰와 가치가 생긴다.

상대성     :    사람, 장소 등에 따라 같은 정보라도 가치가 다르다.

'0x0300 : Study > 0x0306 : ETC' 카테고리의 다른 글

6. 정보기기 보안 및 관리 수칙  (0) 2016.06.30
5. 해커의 분류  (0) 2016.06.30
4. 해킹과 크래킹  (2) 2016.06.30
3. 정보 윤리와 네티켓  (0) 2016.06.28
2. 컴퓨터가 처리과정중 필요 하는 이유  (0) 2016.06.28

Pwnable.kr - random

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

SQL - 트랜잭션 작동 및 복구

0x0300 : Study/0x0305 : SQL

트랜잭션 작동 및 복구


데이터 베이스의 기본 구조

데이터 베이스는 물리적으로 파일임


기본적으로 ' *.mdf '와 '*.ldf' 두 파일이 생김.

데이터 파일

// *.mdf 로 생성됨

// 이 파일에는 데이터베이스 개체(테이블, 인덱스 등)와 그 행 데이터가 저장됨

트랜잭션 로그파일

// *.ldf 로 생성됨.

// 데이터의 변경에 대한 내용을 기록해 두는 공간

// 정전 등의 응급한 상황에서 입력된 데이터가 완전하도록 함


데이터 베이스의 간단한 구조도


트랜잭션 개념 및 구문 형식

트랜잭션 개념

- 하나의 논리적 작업단위로 수행되는 일련의 작업


- SQL문 (SELECT/INSERT/UPDATE/DELETE)의 묶음


- 한 단위의 트랜잭션은 모두 처리되거나, 모두 처리 되지 않도록 DBMS가 관리해 준다.


구문 형식

// BEGIN TRANSACTION                         (또는 BEGIN TRAN)

//     SQL구문 ...


// COMMIT TRANSACTION                     (또는 COMMIT TRAN)


자동 커밋 트랜잭션 작동

일반적으로 사용하는 SQL문

// UPDATE userTbl SET addr = '서울'

// WHERE 아이디 = 'AJH'


자동커밋트랜잭션 방식에 의한 내부 작동

// BEGIN TRANSACTION                         (또는 BEFIN TRAN)

// UPDATE userTbl SET addr = '서울'

// WHERE userID = 'AJH'

// COMMIT TRANSACTION                     (또는 COMMIT TRAN)

'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 기초  (0) 2016.06.15
SQL - SQL?  (0) 2016.06.15

SQL - 기초

0x0300 : Study/0x0305 : SQL

SQL 기초

SELECT

관계 연산자의 사용
// SELECT 아이디, 이름 
// FROM userTbl 
// WHERE 생년 >= 1970 AND 신장 >= 182

BETWEEN... AND와 IN()
// SELECT 이름, 신장 
// FROM UserTbl 
// WHERE 신장 BETWEEN 180 AND 183

// SELECT 이름, 지역
// FROM UserTbl
// WHERE 지역 IN (N'서울', N'경기', N'강원'

ANY / ALL / SOME 그리고 하위쿼리(SubQuery)
// SELECT 이름, 신장
// FROM UserTbl
// WHERE 신장 >= ANY (SELECT 신장 FROM UserTb WHERE 지역 = N'서울')

// SELECT 이름, 신장
// FROM UserTbl
// WHERE 신장 = ANY (SELECT 신장 FROM UserTbl WHERE 지역 = N'서울')

ORDER BY (순서대로 정렬)
// SELECT 이름, 신장
// FROM userTbl
// ORDER BY 신장

DISTINCT (중복 제거)
// SELECT DISTINCT addr
// FROM userTbl

TOP(N) (상위 N개만 출력)
// SELECT TOP(10) 신장
// FROM UserTbl

// SELECT TOP(0.1) PERCENT 신장
// FROM UserTbl

GROUP BY (집계함수 활용)
// SELECT 아이디 AS [사용자 아이디], SUM(수량) AS [총 구매 개수]
// FROM buyTbl
// GROUP BY userid

// SELECT AVG(수량) AS [평균 구매 개수]
// FROM buyTbl

// SELECT 아이디, AVG(수량 * 1.0) AS [평균 구매 개수]
// FROM buyTbl
// GROUP BY 아이디


SQL Insert, Update, Delete

Insert 구문 형식
// INSERT INTO 테이블이름 (열이름1, 열이름2, .... )
// VALUES(값1, 값2, 값3, .... )

Update 구문형식
// UPDATE 테이블이름
// SET 열1=값1 , 열2=값2 ...
// WHERE 조건

Delete 구문형식
// DELETE 테이블이름
// WHERE 조건

SQL 고급

JOIN

구매 테이블 중에서 'LCS' 아이디를 가진 사람이 구매한 물건을 발송하기 위해서, 이름 / 주소 / 연락처 등을 조인
// SELECT *
// FROM buyTbl INNER JOIN UserTbl
//     ON buyTbl . 아이디 = UserTbl . 아이디
// WHERE buyTbl. 아이디 = 'LCS' ;

별칭의 사용.
테이블의 별칭을 사용함으로써 코드를 간결화 할 수 있다.
// SELECT *
// FROM BuyTbl B INNER JOIN userTbl  U
//     ON B . 아이디 = U . 아이디
// WHERE B . 아이디 = 'LCS' ;

CASE

구매한 액수에 따라서 최우수고객 / 우수고객 / 일반 고객 등으로 분류하기 위해서는 CASE구문을 활용한다.

// SELECT U.아이디, U.이름, SUM(단가 * 수량) AS [총구매액]


// CASE

//     when (sum(단가*수량) >= 1500) then N'최우수고객'

// when (sum(단가*수량) >= 1000) then N'우수고객'

// when (sum(단가*수량) >= 1) then N'일반고객'

// else N'유령고객'

// end as [고객등급]


// from buyTbl B right join userTbl U

// on B.아이디 = U.이름


// group by U.아이디, U.이름

// order by sum(단가*수량) desc


TRY ... CATCH

오류를 처리하는 데 편리함.

// use db2016a11

// begin try

//  insert into usertbl_ÃÖ°­Çö values('LSG', N'이상구', 1988, N'서울', '999', '9999', 170)

//  print N'정상적으로 입력이 됬습니다.'

// end try


// begin catch

//  print N'응 안되 돌아가 ^ㅡ^'

// end catch



'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 트랜잭션 작동 및 복구  (1) 2016.06.15
SQL - SQL?  (0) 2016.06.15

SQL - SQL?

0x0300 : Study/0x0305 : SQL

데이터 형식

문자데이터

// char, nchar, varchar, nvarchar [n 은 유니코드허용. var는 주소같은 값?..]


숫자 데이터

// int(정수) , real(실수) , bit (0 또는 1)


날짜/시각 데이터

// datetime 밀리초까지 나타낸다.

// smalldatetime 분 까지 나타낸다.


기본키

데이터의 무결성을 지키기 위한 제한된 조건

// 특정 데이터를 입력할 때 무조건 입력되는 것이 아니라, 어떠한 조건을 만족했을 때에만 입력되도록 제한하는 것


테이블의 각 행들은 구분할 수 있는 식별자


중복될 수 없고, NULL값이 입력될 수 없음


기본 키로 설정하면 자동으로 클러스터형 인덱스가 생성됨.


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMARY KEY, name nvarchar(10) NOT NULL)


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL CONSTRAINT PK_userID PRIMARY KEY, name nvarchar(10) NOT NULL)


Unique

중복되지 않는 유일한 값을 입력해야 함.


primary key 제약조건과 거의 비슷하며 차이점은 Null값을 허용한는 것(대개 후보키에 설정)


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMARY KEY ... email nchar(30) NULL UNIQUE )


외래 키 (foreign key)

두 테이블 간의 관계를 선언함으로써 데이터의 무결성을 보장해 줌


외래키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됨


'외래키 테이블'에 데이터를 입력할 때는 꼭 '기준 테이블'을 참조해서 입력하므로, '기준 테이블'에 이미 데이터가 존재해야만 함.


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMMARY KEY, ..... ) GO

// CREATE TABLE buyTbl

// ( num int NOT NULL PRIMARY KEY, userid nchar(8) NOT NULL FOREIGN KEY REFERENCES userTbl(userID) )


데이터 무결성 (Integrity)

개체 무결성

// 기본키가 Null 값을 가질 수 없음

// 이렇게 되면 모든 필드는 키필드에 종속 됨


도메인 무결성

// 필드의 유효한 값만을 허용

// 데이터 타입, Null 허용여부 등이 도메인 무결성을 지켜 줌


참조 무결성

// 외래키가 참조하는 기본키는 반드시 존재해야 함

// 외래키가 참조하고 있는 기본키는 임의로 삭제 불가


Check

입력되는 데이터를 점검하는 기능


Check 제약조건이 설정되면 제약조건에 위배되는  데이터는 입력 안됨


// 출생년도가 1900년 이후이고 현재 시간 이전이어야 하는 조건을 지정


// ALTER TABLE userTbl

// ADD CONSTRAINT CK_birthYear

// CHECK

// (birthYear >= 1900 AND birthYear <= YEAR(GETDATE()))


Default

데이터를 입력하지 않았을 때 자동으로 입력되는 값을 정의하는 방법

//단, 값이 직접 명기되면 DEFAULT로 설정된 값은 무시


// CREATE TABLE userTbl

// userID nchar(8) NOT NULL PRIMARY KEY, name nvarchar(10) NOT NULL, brith Year int NOT NULL DEFAULT YEAR (GETDATE())....



'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 트랜잭션 작동 및 복구  (1) 2016.06.15
SQL - 기초  (0) 2016.06.15