BOF원정대 2012.11.18 19:52

[0x02] gremlin

int main(int argc, char *argv[]){
    char buffer[16];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}


 gate와 별로 다른 점은 없지만, 버퍼의 크기가 16Byte라는 차이점이 있다. 현존하는 Shellcode(RTL은 제외) 중에 16Byte보다 작은 크기의 Shellcode는 없다. 결국, Shellcode를 저장할 곳이 Buffer가 아니어야 한다는 것이다. 즉, 버퍼가 아닌 쉘코드 저장 장소를 찾는 것이 이번 문제의 목적이다. 그 장소는 환경 변수가 있는 곳일수도 있고, argv[1]일 수도 있고 argv[2] 일 수도 있고... 어디에 Shellcode를 저장할지는 푸는 사람 마음대로다. Shellcode를 저장하는데 성공했다면 그 이후는 말할 것도 없다. 다만 주의할 점은, 환경 변수의 위치나 argv[1], argv[2] 등의 주소는 무언가에 따라 조금씩 달라진다는 점이다(이는 프로그램 실행시마다 Segment마다 할당된 주소가 Random이 되는 ASLR과는 다르다). 그 규칙을 알아내는 것이 결정타.

Hint: export, env, getenv(), argc, argv

Payload


신고

'BOF원정대' 카테고리의 다른 글

[0x03] cobolt  (0) 2012.11.18
[0x02] gremlin  (0) 2012.11.18
[0x01] gate  (0) 2012.11.17
[0x00] 후기  (0) 2012.11.17
VMWare Fusion 5 에서의 부팅 문제  (0) 2012.08.29
BOF원정대 2012.11.17 14:37

[0x01] gate

int main(int argc, char *argv[]){
    char buffer[256];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}

 BOF 계의 printf("Hello, World!\n"); 같은 문제다. BOF 원정대의 기반이 되는 Redhat 6.2에선 생성되는 스택프레임 전후엔 딱히 Dummy같은 것이 없으므로 함수의 지역변수에 필요한 스택의 크기 이후엔 당연히 SFP(Saved Frame Pointer=Saved EBP of caller function)와 RET(Return Address)가 4Byte씩 온다고 생각하면 된다. 

 또한 스택에서 데이터가 실행이 안 된다는 NX(DEP)같은 것도 역시 옛날 리눅스라 그런거 없으니 무시하면 된다. 256Byte의 공간 역시 Shellcode를 넣기엔 충분하다.

 가장 첫 문제니 자잘한 것들을 활용하는 연습을 해야 한다. 원본 실행파일은 gate의 권한으로는 디버깅 할 수 없으므로 gcc로 소스를 gate 권한으로 컴파일 해야하고, 이렇게 컴파일한 프로그램이 segmentation fault를 내면 segmentation fault(core dumped)란 메세지가 나오는데 여기서 core의 중요성에 대해 알아야 한다. core는 프로그램이 비정상적으로 종료되었을 때 메모리의 상태나 레지스터의 값 등을 저장한 일종의 dump 파일로, gdb를 이용해서 비정상적 종료가 일어났을 시점의 메모리의 값이나 레지스터의 값을 볼 수 있다. 이를 이용하여 ret에 채워야 할 주소가 어디인지, eip가 정상적이지 않은 값이 되었는지(ret가 변조되었을 때), 그렇다면 eip가 어떤 값으로 변조되었는지 등을 알 수 있다. core파일을 이용하려면 gdb [실행파일 이름] core 명령어를 이용하면 된다.

Payload

신고

'BOF원정대' 카테고리의 다른 글

[0x03] cobolt  (0) 2012.11.18
[0x02] gremlin  (0) 2012.11.18
[0x01] gate  (0) 2012.11.17
[0x00] 후기  (0) 2012.11.17
VMWare Fusion 5 에서의 부팅 문제  (0) 2012.08.29
BOF원정대 2012.11.17 14:26

[0x00] 후기


 2012년 8월 27일에 첫 문제를 푼 것으로 기록되어 있는(첫 문제를 풀고 나서 찍은 스크린샷의 일자가 8월 27일 이다.) Hackerschool BOF 원정대 Redhat을 2012년 11월 17일인 오늘 그 끝을 보게 되었다. 문제들을 풀어가면서 느낀 점은, 첫 술 뜨기가 가장 어렵다는 것과, 절대 해설을 보면서 풀면 안 된다는 것이었다. 해설을 본 순간, 자신이 이 문제를 풀기 위해 스스로 이끌어 내야 하는 어떠한 사고작용도 소용없게 되기 때문이다. 그래서 푸는 동안에 막히는 문제에서 필자 역시 고민이 꽤나 많았다. 그리고 몇몇 문제에서는 정말 리눅스에 대해 많은 것을 체계적으로 알지 못하는 대부분의 사람들의 경우 그 풀이법을 알아낼 확률이 희박한 경우가 많았다(필자도 그 중에 한 사람이다). 

 구글에서 BOF 원정대의 몹 이름만 검색해도 검색되는 풀이가 10개는 족히 되는 마당에 이런 경우엔 누구나 해설에 대한 유혹에 이끌릴 수 밖에 없을 것이다(적어도 그걸 찾아볼 열의는 있는 사람이니까!). 그래서 이 카테고리에 쓰는 풀이들은 힌트 위주로, 정 모르겠으면, 정말 최후의 수단으로 payload의 구조를 제시해주는 수준이 될 것이다(그냥 읽으면 보이지 않도록, 보기 전에 자신이 꼭 이걸 봐야되는가에 대해 한번쯤 생각해보길). 아무쪼록 이후에 BOF 원정대를 풀어볼 다른 사람들에게 내 풀이는 자신의 사고를 제한해버리는 계기가 아닌, 영감이 떠오르도록 해주는 조언으로 다가왔으면 좋겠다.

신고

'BOF원정대' 카테고리의 다른 글

[0x03] cobolt  (0) 2012.11.18
[0x02] gremlin  (0) 2012.11.18
[0x01] gate  (0) 2012.11.17
[0x00] 후기  (0) 2012.11.17
VMWare Fusion 5 에서의 부팅 문제  (0) 2012.08.29
works 2012.10.31 04:56

league of legends stats


1. client(adobe air) decompile

http://www.gamersoul.com/forums/archive/index.php/t-66219.html

2. api(library) - 이 방향으론 안 가려고 노력중

http://elophant.com/developers


신고

'works' 카테고리의 다른 글

league of legends stats  (1) 2012.10.31
site 2012.10.04 17:54

crackme site

http://www.crackmes.de/

http://www.woodmann.com/RCE-CD-SITES/Quantico/crackme%27.htm

신고

'site' 카테고리의 다른 글

crackme site  (0) 2012.10.04
Tip/programming 2012.09.18 12:21

osx에서 자바 컴파일하기

우선 소스코드를 작성한다
//hello.java
class Hello{
    public static void main(String args[]){
        System.out.println("Hello, Java!");
    }
}
그다음 javac [src]로 .class파일을 만들면 클래스 이름의 .class파일이 생성된다. 그러면 java [class file]로 실행한다.
r0tten-air:~ fr35h7una$ ls
./
../
.DS_Store
.localized
hello.java
r0tten-air:~ fr35h7una$ javac hello.java
r0tten-air:~ fr35h7una$ ls
./
../
.DS_Store
.localized
hello.java
Hello.class
r0tten-air:~ fr35h7una$ java Hello.class
Hello, Java!
r0tten-air:~ fr35h7una$
신고

'Tip > programming' 카테고리의 다른 글

taglib  (0) 2013.01.03
.NET Sound Library  (0) 2013.01.01
osx에서 자바 컴파일하기  (0) 2012.09.18
Zen Coding Manual  (4) 2012.09.11
Zen Coding  (0) 2012.09.08
Sublime Text 2 FTP Plugin  (5) 2012.09.06
Tip/programming 2012.09.11 10:30

Zen Coding Manual

http://code.google.com/p/zen-coding/wiki/ZenHTMLElementsEn

예를 들어 html:xt를 타이핑한 다음 Zen Coding해주는 Hotkey를 눌러주면


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title></title>
</head>
<body>

</body>
</html>

이런 코드가 생성된다(다른거 아무것도 안함)

신고

'Tip > programming' 카테고리의 다른 글

taglib  (0) 2013.01.03
.NET Sound Library  (0) 2013.01.01
osx에서 자바 컴파일하기  (0) 2012.09.18
Zen Coding Manual  (4) 2012.09.11
Zen Coding  (0) 2012.09.08
Sublime Text 2 FTP Plugin  (5) 2012.09.06
Tip/programming 2012.09.08 10:47

Zen Coding






멋지다!

http://code.google.com/p/zen-coding/

신고

'Tip > programming' 카테고리의 다른 글

taglib  (0) 2013.01.03
.NET Sound Library  (0) 2013.01.01
osx에서 자바 컴파일하기  (0) 2012.09.18
Zen Coding Manual  (4) 2012.09.11
Zen Coding  (0) 2012.09.08
Sublime Text 2 FTP Plugin  (5) 2012.09.06
Tip/programming 2012.09.06 02:22

Sublime Text 2 FTP Plugin

 Windows에서 Notepad++을 잘 쓰고 있었는데, Mac에서는 그만한 에디터가 없는것 같아서 찾다찾다 찾은 것이 Sublime Text 2라는 에디터이다. Sublime Text 2는 Windows/Mac/Linux 겸용으로 배포되고, 성가시게 뜨는 창을 닫아가면서 무료로 쓰던지, 결제해서 유료로 쓸 수 있다. 이 에디터는 다 좋은데, Nppftp같은 강력한 에디터-FTP연동 툴이 내장되어 있지 않은게 흠이라 이런 기능이 있는 플러그인을 검색해 보았다.

 구글에서 Sublime Text FTP라고 검색하면, Sublime SFTP라는 사이트가 가장 먼저 뜨는데, SFTP/FTP와 텍스트에디터를 연동하는 플러그인조차 돈을 내고 써야 한다는 것이 꺼림직하고, 그렇다고 무턱대고 크랙을 쓰는것도 영 아닌것 같아서 대체물을 찾아보았다.

NoxArt / SublimeText2-FTPSync

 우선 무료긴 한데, 정말 좋은지는 써봐야겠다.

신고

'Tip > programming' 카테고리의 다른 글

taglib  (0) 2013.01.03
.NET Sound Library  (0) 2013.01.01
osx에서 자바 컴파일하기  (0) 2012.09.18
Zen Coding Manual  (4) 2012.09.11
Zen Coding  (0) 2012.09.08
Sublime Text 2 FTP Plugin  (5) 2012.09.06
Tip/mac os x 2012.09.05 16:19

VMWare Fusion에서 background로 VM 돌리기

 가상 머신을 켜놓고 직접 쓰지는 않고 터미널로 remote하게만 쓰고 싶을 때 background로 VM을 돌리면 되는데, 직접 터미널에서 vmware-vmx start /path/to/vm 으로 VM을 구동하는 방법이 있긴 하지만 부트 옵션을 직접 입력해 줘야 하는 경우(linux noapic 같은)엔 이렇게 실행만 하면 안되므로 울며 겨자먹기로 쓰지도 않는 VM창을 띄워 놓아야 한다. 이럴때 쓰는 신박한 방법이 있는데...

Does Fusion 3 have a "background" mode like Workstation 7?

 강제 종료(Force Quit - Cmd+Option+ESC)로 VMWare를 종료하면 vmware-vmx는 남아있고(즉, VM 자체는 켜져있고) UI를 담당하는 VMWare만 꺼지는 아주 바람직한 현상이 일어난다.


 실제로 Activity Monitor에 들어가봐도 UI를 담당하는 프로세스만 없어져있고 vmware-vmx는 멀쩡히 돌아간다. VMWare를 정상 종료하면 그 전에 보통 구동되는 VM을 끄게 되는데, 강제 종료라서 그런 과정 없이 종료되는 것이다. 

 다시 창을 복구하려면 그냥 VMWare를 다시 실행하면 끝.

 링크의 포럼 내용은 VMWare Fusion 3에 대한 내용이지만, 5에서도 정상적으로 작동하는것을 확인하였다. Fusion 2까지는 있던 기능이었는데 3에서 빠졌다고 업데이트조차 안한 사람이 당시에 있는걸 보면 왜 이 기능을 뺐는지 이해가 안 간다.

ps. Windows에서 돌아가는 VMWare Workstation에서는 당연히 존재하는 기능이다. VM이 떠있는 Sub Window를 닫을 때 Run in background 버튼을 눌러서 간단하게 background로 진입 가능하다.

신고

'Tip > mac os x' 카테고리의 다른 글

[VMWare Fusion] Port Forwading  (0) 2013.07.31
VMWare Fusion에서 background로 VM 돌리기  (0) 2012.09.05