본문 바로가기

저세상 해킹

(9)
2. 워밍업 - UPX 강사는 본 과정을 따라오지 못한다면, 초급과정으로 내려가는 것이 좋다고 권유함 1. UPX "TEST"를 출력하는 MsgBox를 출력하는 프로그램을 upx패킹해보도록 하자. 1-1. UPX자동 패킹/언패킹 upx.exe를 통해 upx로 패킹할 수 있다. 위와 같이 UPX로 패킹되어 있다는 안내 문구를 프로그램에서 확인해볼 수 있다. PE VIEW로 열어보면 다양한 메모리 할당을 위한 함수를 사용하고 있는 모습 또한 볼 수 있었다. 언패킹 또한 upx.exe로도 가능하다. 위와 같은 명령어를 사용하면 언패킹된다. 패킹되었다는 안내문구가 사라지고, 패킹되지 않은 프로그램임을 알 수 있다. 패킹되기 전 파일을 한번 집어넣어 본 것인데, 함수 호출을 위한 테이블이 그대로 살아있는 모습도 확인할 수 있으며, PE..
1. 실습환경 정리 추후 추가 예정
ROP gadget으로 쉘 따기 feat. calc ROP gadget으로 쉘을 따기 위해 어떤 짓을 하는지 궁금해서 좀 봤다. 일단, 우리가 해야하는건, bss영역에다가 "/bin/sh"같이 생겨먹은 문자열을 박아넣고, 인터럽트를 통해서 원하는 함수를 실행시킬 수 있다. 어떤 개지랄을 해서라도 다음과 같은 환경을 만들어 놔야 한다. 내가 execve함수를 실행한다는 조건에서 이런 환경이어야 한다. eax : 0xb, ebx : &"/bin/sh" 나머지 레지스터는 잘 모르겠고, int80으로 인터럽트를 걸 수 있는 상황이어야 한다. 우선 /bin/sh같은 경우는 bss+0x100같은 곳에 쓰는게 대부분이다. 엄... 그냥 적절한 가젯을 잘 박아서 하면 된다. 원하는 레지스터에 pop해주는거 구한 다음에 그 레지스터를 dword하면 됨~ 아 생각해보니까 ..
PHP - Magic Method 매직메소드는 항상 클래스에 정의되어 있는 메소드로, __로 시작함 __construct() : 생성자, 객체 생성시 처음으로 호출, 부모 생성자를 호출하지 않고, parent::__construct()로 호출 __destruct() : 소멸자, 객체 파괴시 호출, 부모 생성자 호출X -> parent::__destruct()로 호출함 __get(), __set() : 일반적인 getter와 setter라고 생각하자 __isset(), __unset() : 클래스내의 프로퍼티를 isset(), unset()으로 호출했을때 실행됨 __call(), __callstatic() : 정의되지 않은 메소드 호출시 호출, 후자는 static 호출시 발동함 __toString() : 클래스의 내부를 문자열화 해서 re..
PHP Object Injection 웹 문제를 풀다가 신기한 기법을 발견했다. php object injection이라는 것인데, 조건이 다음과 같을 때, 발현된다. 1. unserialize()같은 함수에 사용자 입력값이 들어가 객체로 구현될 수 있을 것 2. __destruct같은 매직 메소드를 구현한 클래스를 보유할 것 3. unserialize()호출 전 모든 클래스의 선언이 완료될 것 그렇다면 한번 예제를 보며 자세히 알아보자. 아래의 예제는 https://qkqhxla1.tistory.com/444를 참고했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Colored by Color Scripter cs 모범적인 예제이다. Example1이란 클래스를 선언했고 매직메소드를 포함하고 있다..
Chunk - FLAG chunk에 flag라는게 N, M, P라는 명목으로 들어가 있길래 이녀석이 뭔가 하고 봤다. 한개당 1bit를 차지해 하위 3bit를 이녀석이 먹고 있는데, 자세한 내용은 다음과 같다. NON_MAIN_ARENA - 현재 청크가 다른 arena에서 위치하는 경우 true가 된다. -> 여기서 다른 아레나라는게 아레나가 쓰레드에 맞게 각각 생성되는걸로 알고 있는데, 즉 main스레드에서 생성된 청크가 아니면 1로 세트되는거 같다. (이친구가 set되면 4다) IS_MMAPPED - 맞는지 틀린지 모르겠는데, 청크의 크기가 과하게 커지면 mmap을 통해 청크를 할당시킨다고 한다. 이때 1로 세트된다.(이 친구가 set되면 2다) PREV_INUSE - 이전 청크가 malloc같은걸로 할당되면 1로 set된..
malloc chunk 구조체 아래처럼 생겨먹었다. 1 2 3 4 5 6 7 8 9 10 11 struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */ struct malloc_chunk* fd; /* double links -- used only if free. */ struct malloc_chunk* bk; /* Only used for large blocks: pointer to next larger size. */ struct malloc_chunk* fd_nextsize; /* double links -- use..
2 - Code Engn Advanced CodeEngn Advanced 03 풀이 2번을 풀려고 했는데, 켜보니까 안돌아가서 라업을 보니까 도저히 정적으로 분석하기엔 내 실력이 딸려서 실행이 되는 3번부터 분석해 보았다. 고맙게도, peid로 분석해도 뭔가 특이한게 발견되지 않아서 바로 x86dbg로 분석 ㄱㄱ했다. 루틴도 찾고 싶었는데 빡쌔서 접었다. Event Handler까진 발견했는데, 그 뒤가 너무 빡셈. EntryPoint를 찾아서 쓱 문자열 검사 하던 중에, 분기문을 발견했다. 그래서 실행시켜서 값을 보았다. 자 그러면 이제 다 끝난것 같다. Name에 CodeEngn을 넣고 분석해 보자 따라서 정답은 3265754874이다. CodeEngn_Advanced 04 솔직히 말해서 03 풀었으면 이건 풀 필요가 굳이 없는 문제다. S..