2017년 7월 3일 월요일

[LOB] 0xff


  • 0xff 인식문제 

Redhat 6.2에서 Bash의 버전이 1.14버전
- 0xff를 인식하지 못하는 버그를 가지고 있기 때문에 문자열의 끝을 알리는 0xff가 0x00과 같은 역할을 함
- bash2: 위의 버그를 픽스한 2.3버전이기 때문에 0xff를 삽입할 수 있다.

1. root/hackerschoolbof
2. :%s/bash/bash2/
vi 데이터로 /etc/passwd을 열어서
: = 커맨드 입력 시작
% = 파일 전체
s/ = 문자열 치환 시작
bash = bash를
/ = 구분선
bash2 = bash로 치환
/ = 끝
3. 재시작



출처: http://ssaemo.tistory.com/2 [뾰족뾰족]

2017년 6월 26일 월요일

사용자 영역, 커널 영역

- 리눅스 i386 32bit 환경에서 사용자 영역을 3G 커널영역을 1G로 나누어 사용함
- include/asm-i386/page.h에 __PAGE_OFFSET이나 PAGE_OFFSET에서 커널공간과 사용자 공간의 경계 값(0xC000 0000)
- 메모리 공간에 접근할 수 았는 권한 부여(일반 사용자의 메모리 접근 제어)
- 메모르 접근 검사는 CPU 자체에서 제공
- 특권 링(privilege ring, privilege level): CPU에서 제공하는 권한
- level 0 : 커널 공간(Core) -> 메모리 영역
- level 1, 2 : 커널 공간(Subsystem) -> 메모리 영역 지정(디바이스, GUI 등)
- level 3 : 사용자 공간
※ 보통은 0, 3만을 사용한다.

GDT(Global Descriptor Table)
- 세그먼트 디스크립터: 운영체제가 부팅하는 과정 동안에 해당 레벨에 사용할 메모리 영역을 지정하는 특별한 자료구조
- DPL 필드(2bit) : 특권 레벨 지정
- Type 필드: 코드영역, 데이터영역, 일기/쓰기, 실행권한 지정
- System Call: 사용자 영역에서 커널 영역에 있는 함수를 호출
- CALL 명령어로 상위레벨에 접근할 수 있게 함
- RET 명령어로 권한을 돌려줌
- JMP 명령어로 다른 레벨 사이로 이동 불가능
DPL 3 --------------CALL------------> DPL 0
        <-------------RET---------------
        <--X--------- JMP---------X-->
- CPL: 현재 실행중인 특권 레벨 저장 레지스터
인터럽트 발생 전(CPL3) ---> 인터럽트 서비스 루틴(CPL0) ---> 인터럽트 처리 후(CPL3)
- RPL: CPL을 조작하여 운영체제를 조작하려 하기 때문에 요청하는 쪽의 권한을 기록하고 추적하기 위한 용도
* 64bit IA64 CALL -> SYSCALL, RET -> SYSRET

[출처] IT EXPERT 리눅스 커널 프로그래밍(도서)


2017년 6월 25일 일요일

[C] 파일 입출력 - 특정 문자 발견 시 처리 루틴

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    FILE *pFile = NULL;
    FILE *pNewFile = NULL;

    pFile = fopen(argv[1], "rb" );
    if( pFile != NULL )
    {
        char szNewFile[255]="new_";
        char szTmp=0;
        strcat(szNewFile,argv[1]);
        pNewFile = fopen("new_web5prob.txt","wb");

        if(pNewFile == NULL){
                printf("2. is not file..!");
        }
        else
       {
             while( !feof( pFile ) )
            {
                szTmp = fgetc(pFile);
                putc((char)szTmp, pNewFile);
                if(szTmp == ';')    //특정 문자
                    fputs("\n", pNewFile);
             }
             fclose( pFile );
        }
    }
    else{
        printf("1. is not file..!");
    }

    return 0;
}


GDB

  • C언어 디버깅
- 컴파일: gcc -g test.c -o test
             -fno-stack-protector: carnary
- 명령어
    next (n) 라인 : 지정해 준 라인만큼 실행하고 라인 지정 하지 않을 시 한 줄 실행
    step (s) 라인 : 지정해 준 라인만큼 실행하고 함수가 있을 시 함수 안으로 진입
    p 변수명 : 지정해준 변수의 현재 값 확인
    set 변수명 = 값 : 지정해 준 값을 변수에 대입
    display 변수명 : 지정해 준 변수명의 상태를 항상 출력
                         display 해준 순서대로 번호를 자동으로 지정 해줌
    undisplay displayNumber : 자동으로 지정된 display 넘버를 지정해주면 명령실행 다음                                          부터 출력해주지 않음
    until (u) : 현재 루프를 빠져나감
    d : 모든 breakpoint 삭제 
    cl 번호 : 번호에 해당하는 breakpoint 삭제
    list (l) : 소스 출력

- perl 인자값 주기
(gdb) run $(perl -e 'print "A"x9, "\x08\x04\x83\xf4"')


2017년 6월 24일 토요일

[VMWare] - Ubuntu 로그인 후 검정화면 해결방법

1) 로그인 화면에서 ctrl + alt + f1 키

2) 로그인 후 xserver-xorg 제거
- sudo apt-get remove --purge xserver-xorg

3) 제거가 완료되면 재부팅
- sudo reboot

4) ctrl + alt + f1 키

5) 로그인 후 xserver-xorg를 다시 설치
- sudo apt-get install xserver-xorg

6) xorg 설정을 다시한다.
- sudo dpkg-reconfigure xserver-xorg

7) 재부팅
- sudo reboot

2017년 6월 21일 수요일

[Ubuntu] FTP ROOT계정 사용


  • vsftpd

- /etc/vsftpd/vsftpd.conf
write_enable=YES
local_enable=YES

- /etc/ftpusers
#root

2017년 6월 20일 화요일

[VirtualBox] 네트워크 설정

  • 네트워크 설정
1. NAT
- 가상머신 내부 네트워크 -> host PC 외부 네트워크 단방향 통신 가능
- Host PC 내의 가상 머신 간의 통신 불가능
- 실제 외부로 나갈때는 host PC가 가진 주소를 갖고 송신한다.
- host PC외부 네트워크에서는 내부 가상머신에 접근 불가능하다.

2.NAT Network
- 가상머신 내부 네트워크 -> Host PC 외부 네트워크 단방향 통신 가능
- Host PC 내의 가상 머신 간의 통신 가능

3. 브릿지 어댑터
- host PC와 동등한 수준의 네트워크 구성
- 추가의 IP할당이 필요함
- Host PC가 192.168.0.10이면 가산머신도 192.168.0.x
- host PC의 이더넷 카드로 virtualbox의 net filter로 host와 guest를 구분한다.

4. 내부 네트워크 
- host PC와 독립적인 내부 네트워크
- 같은 host PC 내의 가상 머신 간 연결이 가능
- host PC와 분리되어 있고 가상머신 간에만 통신이 가능

5. 호스트 전용 어뎁터
- host PC를 포함한 내부 네트워크(외부 네트워크와는 단절)
- 같은 host PC 내의 가상 머신 간 연결이 가능

[참고] http://solatech.tistory.com/263



  •  에러

1. The VM session was closed before any attempt to power it on.
- 저장된 파일 가서 name.vbox-prev 파일을 prev 삭제
- VirtualBox 실행 > 새로만들기 > 기존 생성된 이미지 내 .vdi 선택

[참고] https://www.youtube.com/watch?v=wvI_zWJ7eY0