본문 바로가기

IT

눈내리는 효과 CSS 적용하기(Letitsnow) /* written by kaspyx (kaspyx@gmail.com) */ 웹페이지를 디자인할때 간혹 눈내리는 효과 적용이 필요할때가 있다. CSS로 효과를 적용하면 Javascript 보다 메모리와 연산을 상당히 적게 잡으므로 특정 세밀한 기능구현이 필요없다면 CSS를 활용하는것이 매우 유용하다. 특히 HTML 문서에서 외부 CSS 템플릿을 참조하여 가져다 쓰면 문서에 문서에 효과를 붙였다가 빼는것을 쉽게 적용할수있는 모듈화가 가능하다. 문내리는 CSS효과는 비록 내가 만든것은 아니지만, 유용한 CSS가 있어서 블로그 하였다. Let it snow 여기서 style.css와 받은 파일 snow.png, snow2.png, snow3.png 는 같은 경로상에 있어야한다. (아니면 디렉토리를 만들어서 상.. 더보기
SimpleHTTPAuthServer로 간단하게 HTTP 서버 구축하기 /* written by kaspy (kaspyx@gmail.com)*/ 파이썬 SimpleHTTPAuthServer를 이용해서 간단한 HTTP서버를 구축해보도록하자. 서버 내부 파일 다운로드가 필요하면서 인증이 필요한 환경이라면 사용해도 좋을것이다. 해당 파이썬 라이브러리는 아래 URL에서 다운로드 받을수 있다. - 다운로드 URL https://gist.github.com/fxsjy/5465353 - pip 으로 설치하기 pip install git+git://github.com/tianhuil/SimpleHTTPAuthServer.git@master - 사용법 mkdir "공유할 디렉토리"cd "공유할 디렉토리"python -m SimpleHTTPAuthServer portnumber userid:.. 더보기
64bit 버퍼오버플로우(Buffer Overflow) /* written by kaspy (kaspyx@gmail.com)*/ 버퍼 오버플로우 공격기법이 등장한지도 꽤오래되었지만 64비트에서 공략하는 문서는 그리 많지않아서 정리하게되었다. 그냥... 64비트는 그환경특성상 exploit 하기 여러모로 굉장히 더어려워졌다. 1. 쉘코드 우선은 간단한거부터 말하자면 (당연한거지만) 64비트 리눅스 ELF 바이너리에서는 64비트 쉘코드를 써야한다는것이다. 32비트 같은 경우에는 eax 레지스터에 0xb를 넣고 ebx에 "/bin/sh"의 문자열의 주소, ecx,edx에는 0을 넣은뒤 int 0x80 어셈블리를 실행하면 쉘이 쉘이 떴다. 그러나 64비트에서는 syscall 이라는 어셈블리를 사용하고 rdi에 0x3b를 넣고, rsi와 rdx에 0을 넣은뒤 호출해야.. 더보기
Toybox - strings contribution /* written by kaspy (kaspyx@gmail.com)*/ 정말로 오랫만에 toybox 관련 포스팅을하는데 예전에 strings 라는 명령어를 기부(contribution) 했을때 소스코드입니다. strigns 명령어는 바이너리에 존재하는 출력가능한 아스키코드등을 출력해주는 명령어입니다. toybox 인프라에 맞게 코딩을 한후 toybox@lists.landley.net 으로 보내주면 됩니다. /*strings.c - print the strings of printable characters in files. * * Copyright 2014 Kyung-su Kim * Copyright 2014 Kyungwan Han * * No Standard * TODO: utf8 strings * T.. 더보기
Buffer Overflow - RTL(Return to library) 기법 /* written by kaspy (kaspyx@gmail.com)*/ 1. 서론 RTL(Return to library) 기법이란, 버퍼오버플로우(Buffer Overflow, 이하 BOF) 취약점이 존재하는 프로그램을 익스플로잇 할때 해당 프로그램의 스택(stack) 영역에 실행 권한이 존재하지 않을때 프로그램이 사용하는 glibc 내에 존재하는 함수를 호출하는 기법이다. 요즘 대부분의 리눅스 및 윈도우 시스템은 NX 또는 DEP등으로 스택(stack) 영역에 실행 권한을 주고있지않고, 특별한 컴파일 옵션을 주어서만 실행권한을 줄수있는만큼 간단하면서도 자주 사용되는 방법이다. 포너블문제(pwnable)에서는 기본중에 기본이니 잘알아두도록하자. * 테스트 환경은 우분투 리눅스 16.04 64bit 입.. 더보기
ROP(Return Oriented Programming) /* written by kaspy (kaspyx@gmail.com)*/ 1. 시작하며 ROP(Return Oriented Programming) 이란 버퍼 오버플로우 취약점이 발생하는 바이너리를 exploit 할때 가장 많이 사용되는 기법으로 바이너리 내부에 존재하는 gadget을 사용하여 호출 함수 및 인자를 조작하는 방법이다. 솔직히 관련 자료도 굉장히 많은데.. 나도 복습 할겸 정리해보았다. 일반적으로 ASLR이 걸려있는 바이너리는 Memory leak 또는 got, plt 등에 함수가 존재해야하는 특수한 전제가 붙어야 exploit 가능하지만, ROP 기법을 사용하면 (PIE가 걸려있지않아야함) 바이너리의 고정주소의 gadget을 활용하여 exploit 할수있다. 여기서 gadget이란 바이너리.. 더보기
자바 리플렉션(Java Reflection) /* written by kaspy (kaspyx@gmail.com)*/ 자바 리플렉션(Reflection)이란 컴파일된 자바 코드에서 역으로 클래스를 불러서 메소드(Method) 및 변수(Field)를 구해오는 방법으로 클래스를 동적 로딩하여 사용할때 많이 사용되고 디컴파일할때에도 자주 사용되는 기법이다. 1. 리플렉션(Reflection) 기본 예를들어 아래와 같이 Class가 있다고 하면 생성자(Constructor)도 있을것이고, 필드(Field) 및 메쏘드(Method)도 있을것이다. vi MyClass.java public class MyClass{ private static String myName = null; public String pubString = null; private void.. 더보기
파이썬 장고(Django) - MTV 패턴을 통한 웹서버 개발하기 /* written by kaspy (kaspyx@gmail.com)*/ 저번 포스팅에 이어서 이번에는 장고(Django)를 이용해서 웹페이지를 추가하고 이에대한 요청을 처리하는 웹페이지를 만드는 과정을 다루어보도록하겠습니다. 구현된 소스코드에는 자세히 다루지는 않겠지만 따라하기만 해도 어느정도 이해하는데 도움이 될것으로 생각합니다. 개발 환경은 Ubuntu Linux 16.04 기준 1. 기본 프로젝트 및 구조 생성하기 우선 장고를 사용한 웹서버 구축하기를 먼저보고 오는게 좋을것이다. - link 1) 프로젝트 생성 웹서버라면 제공하는 서비스에따라 다양한 요청을 처리할수있어야한다. 우선 프로젝트를 추가하고 어플리케이션을 추가하도록 하겠다. 이번 포스팅에서는 설문조사를 하는 사이트를 만들어보도록 하겠다... 더보기
파이썬 장고(Django)를 사용한 웹서버 구축하기 /* written by kaspy (kaspyx@gmail.com)*/ 장고(Django)란 파이썬으로 구현된 웹 개발 프레임워크로 무료 오픈소스로 배포되며 웹서버 개발 및 관리가 용이한 장점을 가지고있습니다. 이번 포스팅에서는 리눅스(Ubuntu) 환경에서 장고를 설치하고 간단한 웹서버를 만드는내용을 다루도록 하겠습니다. 장고를 사용한 웹서버 구축은 정말이지 쉽다~!! 1. 장고(Django) 설치하기 sudo apt-get install python-django 장고가 잘 설치되었으면 python 명령어를 실행하여 Django 버젼을 확인할수있다. pythonimport djangoprint django.get_version() kaspyx@kaspyx-Virtual-Machine:~$ python.. 더보기
리눅스 에그쉘(egg shell) 사용법 /* written by kaspy (kaspyx@gmail.com)*/ 에그쉘(eggshell)이란 취약한 바이너리를 exploit 할때 버퍼의 주소 계산이나 버퍼 사이즈등의 난관으로 공략하기 어려울때 이를 환경변수에 등록해두고 이주소를 사용한다. 로컬(local) 환경에서만 사용할수있는 단점이있다. 아래 두개 쉘코드는 25 바이트 및 22바이트로 나름 경량화하였다. 사용법은 export 명령어를 사용하여 에그쉘을 환경변수로 등록하고 getenv 함수를 통하여 에그쉘의 주소를 얻어온후, 프로그램의 ret 주소를 getenv 함수의 주소로 변경한다. 끗 shellcode 1 - 25 byte#include #include //export kaspyx=`python -c 'print "\x90"*10000.. 더보기