반응형

이번에 심심해서 만들어 본건데..

처음에는 인라인 어셈으로 짜볼까 했지만

휴가 때 너무 머리쓰는건 아니라 생각해서 쉽게쉽게 만들어 봤습니다~



Crack Me_.zip


키값을 얻으셨다면 nekoplus.iptime.org에 가입하셔서 한번쯤 인증해보는 것도.. 나쁘진 않은 것 같네요.

문제 이름은 Would you Crack Me? 입니다.

'공부' 카테고리의 다른 글

GOT 입력 ( _dl_runtime_reslove )  (0) 2015.12.29
MISC_Nyan [MISC]  (0) 2015.08.12
[C++] Template  (0) 2015.01.02
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
[리버싱 핵심원리]PE File Format #1 -- 미완성  (0) 2014.12.24
블로그 이미지

KuroNeko_

KuroNeko

,

DLL Injection

API/공부 2015. 5. 27. 08:15
반응형

DLL 인젝션에도 종류가 있긴한데, 가장간단하게 구현가능한게

CreateRemoteThread를 사용한 거다.


먼저 가상메모리 공간에 VirtualAllocEx함수를 이용해 Buffer size+1(NULL 포함) 만큼 할당.

그 VirtualAllocEx함수의 반환값은 메모리에 할당된 주소값이니 그 값을 저장해놓고

WriteProcessMemory를 사용해서 Buffer를 넣어주면 된다.


그러고는 GetModuleProc로 Module Handle을 구한뒤, GetProcAddress함수로 LoadLibraryA함수 주소를 얻어온다.

// 윈도우에서 중요한 dll 파일들은 각각의 로딩주소값을 가지고 있어서 가능하다.


마지막으로 CreateRemoteThread함수를 사용해 파라미터를 넘기면 끝.


근데, DLL인젝션이용해서 Hook도 할 수 있고, 기능 향상을 시켜주는건데,

윈도우8의 메모장은 인젝션이 되지 않는다.(다른 윈도우8 프로그램들[사용자 제작프로그램제외]도 그렇다)

뭔가 다른 DLL에서 인젝션을 막아놓은건지, 아니면 Previlege설정을 해줘야 가능한건지

한번 파봐야징

'API > 공부' 카테고리의 다른 글

API Hooking - Debugging  (0) 2014.11.13
API 자료형(추가 예정)  (0) 2014.10.31
HANDLE and etc  (0) 2014.10.31
블로그 이미지

KuroNeko_

KuroNeko

,

[C++] Template

공부 2015. 1. 2. 15:33
반응형

Template : 형판, 견본

라는 뜻을 가졌는데, C++에서 Template의 의미는 견본이라고 하는게 맞는 것같다.

템플릿 이게


template<typename T>

class neko{

private:

T num;

public:

void Setnum(T n)

{

num = n;

}

T print()

{

return num;

}

}


이런식으로 임시변수를 만든다고도 할 수 있는데, 사용할 때는

neko<int>::num = 12;

이렇게 사용해야한다. 많이 유용할듯

'공부' 카테고리의 다른 글

MISC_Nyan [MISC]  (0) 2015.08.12
Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
[리버싱 핵심원리]PE File Format #1 -- 미완성  (0) 2014.12.24
MIPS 명령어  (0) 2014.11.21
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

먼저 PE가 메모리에 적재되기 전에 파일의 기본 ImageBase는 0이다.

그리고 PE안에서는 상대주소로 주소가 적혀있게되는데, 왜냐하면 메모리에 적재되어 있을때 절대주소가 들어가있게된다면 Relocation이 어렵기때문이다.(하드코딩) 반면에 상대주소가 들어가있게 된다면 주어지는 ImageBase에서 얼마만큼 떨어진 곳으로 이동하면 되기때문에 Relocation이 쉽게 된다.


예를 들면,


ImageBase : 0x00400000

VA : 0x1000

이라고 했을때 절대 주소가 되는 값은 0x00401000이 된다는 말이다.


즉, VA와 RVA, ImageBase로 식을 나타내면

RVA + ImageBase = VA

상대주소 + 베이스주소 = 절대주소

이 된다.

'공부' 카테고리의 다른 글

Easy Crack Me[Would you Crack Me?]  (0) 2015.05.30
[C++] Template  (0) 2015.01.02
[리버싱 핵심원리]PE File Format #1 -- 미완성  (0) 2014.12.24
MIPS 명령어  (0) 2014.11.21
새로 알게 된것  (0) 2014.11.02
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

이 문제 같은 경우에는 소켓통신을 통한 간단한 숫자 게임이였습니다.

간단히 룰을 설명하면 가장 작은 숫자나 가장 큰 숫자를 찾아서 데이터값을 보내주면 다음으로 진행하는 방식이였습니다.


이걸 풀기 위해, 데이터 값을 받았을 떄 max나 min이 데이터 안에 들어있다면 Sorting을 통해서 정렬하여 첫번째 값을 보내주면 끝나겠죠.


아래는 파이썬으로 간단히 만들어본 소스입니다.


from socket import *


sock = socket(AF_INET,SOCK_STREAM)

sock.connect(('number.quals.seccon.jp',31337))


i=1


while True:

    data = sock.recv(2048)

    data_list=data.split('\n')

    splited= data_list[0].split(', ')

    print i, 'Attempt...'

    print "list :: " , len(splited) , "\n"

    print splited , "\n"

    if 'max' in data_list[1]:

        for i in range(0,len(splited)):

            for k in range(0,len(splited)):

                if(int(splited[i]) >= int(splited[k])):

                    temp = splited[i]

                    splited[i] = splited[k]

                    splited[k] = temp

        sender = splited[0]

        print data_list[1] + sender , "\n"

    elif 'min' in data_list[1]:

        for i in range(0,len(splited)):

            for k in range(0,len(splited)):

                if(int(splited[i]) <= int(splited[k])):

                    temp = splited[i]

                    splited[i] = splited[k]

                    splited[k] = temp

        sender = splited[0]

        print data_list[1] + sender , "\n"

    elif 'Congra' in data_list[1]:

        sock.send(sender)

        

    if sock.send(sender):

        i+=1

    

sock.close()


이렇게 하시면 값을 얻을 수 있게 됩니당.

'Write up' 카테고리의 다른 글

[dctf 2020] writeup  (0) 2020.12.10
Write up  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

PE : Program Execute 의 약자, 파일을 실행할 수 있도록 도와주고 프로그램을 열어보았을 때 확인 할 수 있다.


PE파일의 종류

종류

확장자 

종류 

확장자 

실행 

EXE, SCR

드라이버

 SYS, VXD

라이브러리

DLL, OCX,CPI 등

오브젝트

OBJ 


HxD로 열어본 메모장

이렇게 보면 아무것도 모르니 일단 기본 구조를 살펴보죠.


기본 구조

   - PE 구조

DOS HEADER

DOS STUB

.text Section Header

.data Section Header

.rsrc Section Header

### NULL PADDING ###

.text Section Body

### NULL PADDING ###

.data Section Body

### NULL PADDING ###

.rsrc Section Body

### NULL PADDING ###


이렇게 많은 Header 들과 Body들로 이루어져있는데, 하나하나 설명해볼께요.


Dos Header

- 총 40Byte

- 구조체 형태로 값을 가진다.


Dos Header :: Dos Header Structure

typedef struct _IMAGE_DOS_HEADER {

WORD    e_magic;            //Dos 시그니처

WORD    e_chip;

WORD    e_up;

WORD    e_crlc;

WORD    e_cparhdr;

...

LONG    e_lfanew;            //NT 헤더로 가기 위해 offset

} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;


Dos Header 에서는 위에서 보셨듯이 Dos signiture 가 있습니다.(* EXE파일에서 MZ라는 값을 가지죠.)

또 NT Header로 가기위해 오프셋값을 저장해놓는데, 그 오프셋쪽을 가시면 EXE파일과 DLL파일이 각각 50 45라는 16진수 값을 가지고 있을 것이고, 이건 아스키코드로 변경하면  PE라는 값이 됩니다.

'공부' 카테고리의 다른 글

[C++] Template  (0) 2015.01.02
VA & RVA (절대주소, 상대주소)  (0) 2015.01.02
MIPS 명령어  (0) 2014.11.21
새로 알게 된것  (0) 2014.11.02
RTL(Return To Libc)  (0) 2014.11.02
블로그 이미지

KuroNeko_

KuroNeko

,

MIPS Assemble

자료 2014. 11. 23. 20:37
반응형


MIPS assemble.pdf


'자료' 카테고리의 다른 글

힙(Heap)  (0) 2015.08.06
[C++] PE Viewer 미완  (0) 2015.07.05
Client Socket  (0) 2014.10.30
Server Socket  (0) 2014.10.30
로마 숫자 변환기  (0) 2014.10.30
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

먼저 이 프로젝트를 하게된건, 동아리 스터디그룸에서 발표를 하기 위해서이다.

뭐, 관심은 있었으니 iptime의 펌웨어를 뜯어보고 취약점을 찾아서 쉘을 따봐야겠지.


이제부터 이 프로젝트의 환경은 이러하다.

===================================

공유기 : IPTIME N640V

펌웨어 : 8.76

OS : Ubuntu 14.04 32bit

===================================


먼저 iptime 공유기의 펌웨어가 필요한데,

n604v_kr_8_76.bin

이 파일을 받아주면 되겠다.


그 다음에 bin파일을 HxD로 뜯어보았는데, 처음에는 iso파일로 변환하려고 온갖 지X를 다했었다. 하지만 포기하고 다른 방법을 찾던중, firmware-mod-kit 라는 좋은 녀석을 찾았다. 

fmk_099.zip

이 파일을 받고 tar파일이 나올텐데, 우분투로 파일을 옮겨서

tar -xvf fmk_099.tar 

으로 압축을 풀자.

하지만 이대로는 파일을 추출할 수 없는데,

sudo apt-get install build-essential zlib1g-dev liblzma-dev python-magic

를 사용해서 필요한 라이브러리를 다운받자.


받고 난 후에, fmk 폴더 안의 extract-firmware.sh를 실행하자.

./extract-firmware.sh 펌웨어경로


추출이 끝나면

~/firmware/fmk 폴더에 압축이 풀린 것을 볼 수 있다.


여러 폴더를 볼 수 있는데, 그중에서 핵심이 되는 bin폴더를 보자.

bin 파일안을 보게되면 iptime 관리자 설정에 들어갔을 때 보게되는,

timepro.cgi가 있는데, IDA로 열어보아야한다.


여기까지 펌웨어를 뜯어 보았고, 다음에는 취약점을 찾아보기위해서 탐색(?)을 해보도록 하겠다.

'Project' 카테고리의 다른 글

[행위기반탐지] 삽질2  (0) 2017.02.01
[행위기반탐지] 삽질 1  (0) 2017.01.31
[행위기반탐지] ZwCreateThreadEx 의 인자 분석 ( 32bit )  (0) 2017.01.30
[Project] Console Web  (0) 2016.05.18
[Project] Interpret Nyan  (0) 2016.03.13
블로그 이미지

KuroNeko_

KuroNeko

,