전체 글
[python] 정수 실수 자료형
[python] 정수 실수 자료형
2017.02.15파이썬에서는 모든 것이(데이터 타입이나 함수, 프로그램까지) 객체로 구현되어 있다.함수가 일급 객체이기 때문에 JS같이 함수형으로 프로그래밍 할 수도 있다. 파이썬에서 변수를 값으로 초기화하면 자바의 wrapper class 비슷하게 동작한다.1) 값을 담은 객체로 생성된다. 2) 변수는 이 객체를 가리킨다.`` a = 3`` 하면 `` a``라는 변수에 `` 3``이 담기는게 아니라 `` 3``이라는 정수형 객체가 생성되고 `` a``가 객체 `` 3``을 가리키게 된다.자바의 wrapper class도 값을 담은 객체가 생성되고 이를 가리키게 된다. 그러나 값을 4로 변경하고 싶을 때, 자바의 경우 객체에 담긴 값을 변경하거나 새로운 4라는 객체를 생성하는 두가지 방법을 사용할 수 있지만 파이썬은 후..
[Java] lambda 기본 개념
[Java] lambda 기본 개념
2017.02.07Lambda ```java // 기본 형식. 2줄 이상일 때 ( parameters ) -> { expression body } // 별다른 내용 없이 바로 return할 수 있는 경우 ( parameters ) -> expression ``` Lambda를 활용한 Thread 보통 자바에서 Thread는 다음과 같이 Thread로 사용할 class에 Runnable interface를 implements하여 Thread객체에 파라미터로 전달하여 사용한다. ```java class TestThread implements Runnable { @Override public void run() { System.out.println("newTHread"); } } ``` ```java Thread t = new..
[Git] 자주쓰는 command
[Git] 자주쓰는 command
2017.02.06GitHub 단축키 리스트 보기는 `` ?`` 이미 만들어진 저장소를 remote와 연결 리모트 저장소 alias는 보통 origin으로 쓰지만 로컬에서만 사용하는거니까 아무거나 해도 상관없다. ```bash git init git remote add alias url git remote -v git pull alias branch OR git fetch alias ``` 커밋 관련 커밋 히스토리 조회 ```bash git diff git log git log -p [-숫자] ``` commit 합치기 - rebase commit할 때 뭔가 커밋 단위가 너무 작아서 여러개의 커밋을 묶고 싶을 때 사용한다. ``` git rebase -i feature1 ~ 4 # feature1 브랜치 최상위 커밋부터 ..
[python] 팁, 메모
[python] 팁, 메모
2017.02.06hidden-features-of-python 설정값 (config file. properties, json, yml) 관리하기 https://mingrammer.com/ways-to-manage-the-configuration-in-python/ editable로 설치 ```python pip install --editable . -e, --editable Install a project in editable mode (i.e. setuptools “develop mode”) from a local project path or a VCS url. ``` 패키지 수동 설치 패키지 압축을 해제하고 `` dist``(distribution) 폴더로 이동해서 다시 tar 압축 해제 반드시 해당 폴더에서 진행할..
VScode
VScode
2017.02.03VScode```C:\> code ``` extension그냥 검색하고 나서 정렬기준 설치 수로 놓고 조회해서 상위권 다운받으면 된다.Active File in statusbarPath Intellisensegit historyC/C++HTML SnippetsPartial Diffsftp 원격 코딩rmate는 파일단위고 원격에서 열 파일을 지정해서 명령어 쳐야해서 되게 불편하고.호스트가상머신 간 작업만 할거면 공유폴더로 처리해도 되기는 하는데, ftp를 사용하는 편이 좋은게 ftp를 쓰면 파일을 실수로 지워도 한 쪽에는 남아있기 때문. auto upload만 활성화 하면 공유 폴더 처럼 동기화 신경 안쓰고 쓸 수 있기도 해서. ftp를 쓰는게 제일 괜찮은 듯. compile`` Ctrl+Shift+B``..
FC3 gate - iron_golem - dark_eyes
FC3 gate - iron_golem - dark_eyes
2017.02.03FC3에 적용된 메모리 보호 기법Stack Dummy : ODown Privileage of bash : ORandom Stack : ORandom Library : XRandom Program Binary Mapped : XASCII Armored Address Space : O mapping address의 첫번째 1Byte가 0x00이라서 library address를 입력하고 나면 이후 parameter 삽입이 불가능하다. phrack의 어떤 문서에서 이렇게 소개되어 ASCII Armor라고 부르는 것 같지만, 요즘 ASCII Armor는 Radix 64를 의미하는 경우가 더 많은 듯.Non-Executable Stack : ONon-Executable Heap : OStack Smashing P..
IP parsing(+C), URL parsing 정규식 pattern
IP parsing(+C), URL parsing 정규식 pattern
2017.02.01직접 짜기 전에 org.springframework.web.util.UriComponentsBuilder 참조. IP, HOST, HTTP 등 패턴이 static 변수로 선언되어 있음. 또는 InetAddressValidator 같이 아예 유틸리티 클래스로 제공되고 있을 수 있다. 비슷한 계열이 몇 개씩 된다. ```java InetAddresses.isInetAddress() -- guava 530ms InetAddressUtils.isIPv4Address() -- httpclient 1146ms InetAddressValidator.getInstance().isValid() -- apache.commons 1573ms InetAddress.getByName() -- java.net 인데... ㄴ do..
LOB xavius → death_knight : remote BOF, rawbf
LOB xavius → death_knight : remote BOF, rawbf
2017.01.30xavius - throw me awayremote BOF다. 소켓프로그래밍은 오랜만인데, 그래도 코드가 복잡하지는 않다. 서버 프로그램은 서버에서 돌아가는 거니까, 호스트에서 환경변수 등을 사용할 수는 없지만, 256바이트나 사용할 수 있으니까 그냥 버퍼에 집어넣는게 좋겠다. parent는 while로 계속 돌아가고, child가 recv수행하고 나서 return하므로 child를 사용해 익스플로잇 하게 된다. 근데 recv 직후 close(client_fd) 해서 클라이언트와의 연결이 끊어진다. 따라서 client에 데이터를 전송할 수 없다. 리버스 쉘을 사용하거나, 출력 내용을 저장하도록 해야한다. 리버스 쉘 연결을 대기하도록 쉘코드를 짜기는 귀찮아서 그냥 후자로 진행했다. 주의 )쉘코드가 실행되면..
LOB succubus ~ nightmare → xavius : strcpy / stdin과 fgets
LOB succubus ~ nightmare → xavius : strcpy / stdin과 fgets
2017.01.28succubus - here to stay / strcpystrcpy의 PLT 주소로 리턴해야만 한다. ret이후 4byte를 제외한 공간을 사용할 수 있다.ret+4byte를 제외한 이유는 이전 문제처럼 풀지 않도록 하기 위해서 인 듯. strcpy의 PLT 주소는 0x08048410 PLT-GOT resolve 과정에 문제가 있는게 아니라, main에서 strcpy로 리턴하면서 src와 dest를 내 마음대로 정할 수 있다는게 문제.strcpy의 dest에 retAddr이 있는 곳을 넘겨 수정하면 내가 원하는 곳으로 리턴할 수 있다.(strcpy를 이용하면 FSB처럼 메모리의 어떤 공간에 접근해서 그 부분에 데이터를 쓸 수 있다.)strcpy를 call하고 난 직후 stack의 최상단에 dest, s..
서버 취약점 점검 체크리스트
서버 취약점 점검 체크리스트
2017.01.27이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
LOB giant ~ zombie_assassin → succubus : ROP
LOB giant ~ zombie_assassin → succubus : ROP
2017.01.18giant - one step closerargv[1][47] == '\xbf' || argv[1][47] == '\x40' 이면 exitstack, library로 return이 불가능하다. 마지막에 memset(buffer, 0, 44); 한다. buffer랑 sfp까지 초기화. 그래도 ret 이후는 남아있다. 당장 생각나는 방법은 shared library의 header를 수정해 library mapping address를 0x40이 아닌 다른 곳으로 바꾸는 것인데... windows의 image base에 대응되는 LOAD 값이 shared library의 경우 0x00000000으로 나온다는게 문제. (readelf -l )linux는 windows와 달리 library에 정해진 mapping ..
LOB darkknight ~ bugbear → giant : ldd와 nm으로 함수 mapping 주소 찾기
LOB darkknight ~ bugbear → giant : ldd와 nm으로 함수 mapping 주소 찾기
2017.01.16darkknight - new attackerargv[1][47] == '\xbf' 이면 exit 한다. 즉 stack으로 return 못한다.RTL 사용하면 된다./bin/my-pass 문자열 삽입은 환경변수를 사용했다. bugbear - new divideret에 들어가는 주소가 execve의 주소여야만 한다. execve인지 검사하기 위해 execve의 주소를 얻는데 ldd와 nm을 사용한다.보통 함수의 주소를 구하기 위해 gdb로 실행한 다음 print 명령을 이용하지만 다음과 같은 방법으로도 가능하다. ldd로 shared library가 mapping되는 주소를 구한다.nm [-D]으로 함수의 offset을 구한 다음 이를 mapping 주소와 더한다. shared library는 fPIC 옵..