'포렌식 관련(네트워크 포함)'에 해당하는 글 3건

주니어부 12시간 중 10시간을 뺏어 가고 결국 시간내에는 못 푼 흑흑


우선, 문제 분류는 암호학(Crypto)입니다.



그리고 파일을 받아보면 pcap파일과 py파일이 나오죠


각각의 파일을 알아야 할 것 입니다.

우선 파이썬 코드 부터 봅시다.
from socket import *
from ssl import *
import time

def recv_until(s, string):
    result = ''
    while string not in result:
        result += s.recv(1)
    return result

client_socket=socket(AF_INET, SOCK_STREAM)
tls_client = wrap_socket(client_socket, ssl_version=PROTOCOL_TLSv1_2, cert_reqs=CERT_NONE)

print "[+] Connecting with server.."

tls_client.connect(('ch41l3ng3s.codegate.kr',443))

print "[+] Connect OK"

while 1:
    data = recv_until(tls_client, "Input : ")
    print data
    #message
    user_input = raw_input()
    
    if user_input == "u":
        print "Sorry.. Not support function.."
        exit()
    elif user_input == "d": 
        tls_client.send("6423e47152f145ee5bd1c014fc916e1746d66e8f5796606fd85b9b22ad333101\n")
    elif user_input == "r":
        tls_client.send("34660cfdd38bb91960d799d90e89abe49c1978bad73c16c6ce239bc6e3714796\n")
    elif user_input == "l":
        print "Sorry.. Not support function.."
        exit()
    else:
        print "Invalid input!"
        exit()    

client_socket.shutdown(SHUT_RDWR)
client_socket.close()

우선 SSL통신을 하네요.

그리고 입력값에 따라 값을 보내고요.

하지만 u일 때와 l일 때에는 값을 보내지 않아요.


아마 저 값을 찾아야 플래그를 얻을 수 있을 것 같군요.


이제 pcap파일을 봅시다.

아주 짧은 캡처 파일 이군요. 그리고 모든 패킷이 암호화 되있다는 것을 알 수 있습니다.

저 패킷들을 모두 복호화 하면 답을 알 수 있겠군요!


이제부터 저것들을 복호화하기위한 RSAkey를 얻어 봅시다.


6번 패킷에서 공개키를 포함하고 있는 인증서를 주는 군요. 우선 인증서를 받아 옵시다.


이렇게 해서 확장자를 .der로 바꿔주시면 인증서가 완성됩니다.


인증서는 이렇습니다.


이제 이 인증서에서 공개키를 추출해 냅시다.

openssl을 통해 공개키를 추출했다면 이제 거의 다 온 것입니다.



우리가 필요한 것은 개인키인데 공개키를 받아서 무엇하느냐?

이 공개키를 이용해서 개인키를 얻어 낼 겁니다.


여기서 사용할 것은 RsaCtfTool입니다.

https://github.com/Ganapati/RsaCtfTool

하지만 저는 이것을 그대로 쓰지 않을 것입니다.

이것을 받은 뒤 저희가 할 것은

RsaCtfTool.py를 수정 할 겁니다.


이 툴은 값을 찾는 순간 다른 값을 안 찾고 넘어가게 되는데 값을 찾는 방법 중 db에서 받아오는 것이 존재 합니다. 하지만 저희가 찾는 개인키는 db에 존재하지 않으므로 그 부분을 주석처리 해야합니다. 

이렇게요.

함수를 정의하는 부분과 리턴을 남겨둔 이유는 이 함수를 호출 했을 때 함수가 없으면 오류 나기 때문입니다.


그리고 한 곳 더 고쳐야 할 곳이 있습니다.

소수쌍을 찾아서 푸는 것을 시도 하는 부분이 있는데 이 툴은 그것의 제한시간을 60초 즉 1분으로 해두었습니다. 하지만 1분안에 찾아지는 소수쌍은 얼마 없지요. 그렇기 때문에 이 제한시간도 늘려야 합니다.

이부분을 

이렇게 고쳐 줍시다. 즉 1시간 정도로 넉넉하게 시간을 주는 것이죠.


이제 준비는 끝났습니다.

./RsaCtfTool.py --publickey ~/pubkey.pem --verbose --private

를 입력해서 개인키를 알아 냅시다.


약 5분 정도 기다리면 개인키를 알려줍니다.


이것을 와이어 샤크에 넣어주면!


u일 때와 l일 때의 값을 알게 됩니다. 이제 파이썬 코드를 수정합시다.

from socket import *
from ssl import *
import time

def recv_until(s, string):
    result = ''
    while string not in result:
        result += s.recv(1)
    return result

client_socket=socket(AF_INET, SOCK_STREAM)
tls_client = wrap_socket(client_socket, ssl_version=PROTOCOL_TLSv1_2, cert_reqs=CERT_NONE)

print "[+] Connecting with server.."

tls_client.connect(('ch41l3ng3s.codegate.kr',443))

print "[+] Connect OK"

while 1:
    data = recv_until(tls_client, "Input : ")
    print data
    #message
    user_input = raw_input()
    
    if user_input == "u":
        tls_client.send("9de133535f4a9fe7de66372047d49865d7cdea654909f63a193842f36038d362\n")
    elif user_input == "d": 
        tls_client.send("6423e47152f145ee5bd1c014fc916e1746d66e8f5796606fd85b9b22ad333101\n")
    elif user_input == "r":
        tls_client.send("34660cfdd38bb91960d799d90e89abe49c1978bad73c16c6ce239bc6e3714796\n")
    elif user_input == "l":
        tls_client.send("27692894751dba96ab78121842b9c74b6191fd8c838669a395f65f3db45c03e2\n")
    else:
        print "Invalid input!"
        exit()    

client_socket.shutdown(SHUT_RDWR)
client_socket.close()

이걸 파이썬으로 실행시킨뒤 목적지에 도달하면 플래그가 나오게 됩니다.

'포렌식 관련(네트워크 포함)' 카테고리의 다른 글

2013 Codegate Forensic 100  (0) 2017.12.12
2014 Codegate Forensic 150 풀이  (1) 2017.12.11

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

이 문제는 저 같은 포렌식 못하는 사람이 봐도 쉬운 문제입니다.

2013 Codegate Forensic 100

IOS기기에 대한 지식이 어느정도 필요합니다.


문제부터 올리도록하죠


A회사 보안팀은 내부직원 PC 자체보안감사 중 특정직원 PC에서 인터넷을 통해 내부문서를 외부로 업로드한 흔적을 발견하였다. 보안팀은 보안 위반 흔적을 더 찾기위해 직원 스마트폰도 임의 제출을 받아 추가 흔적을 조사하였다. 내부 문서의 정보를 찾아 정답을 입력하시오.


Correct Answer ex)

Upload Date&Time(UTC+09:00)_Modified Date&Time(UTC+09:00)_FileName.Extention_Filesize(LogicalFileSize)

2013-03-01 21:00:00_2013-04-03 10:00:50_sample.docx_100MB


일단 파일을 받아서 FTK Imager로 봅시다.



앱이름.app라는 디렉토리가 있고, iTunesMetadata.plist가 있는것 그외 여러가지 이유를 통해 이 핸드폰은 ios계열이라는 것을 알 수 있습니다.


무슨 무슨 앱이 있는지를 봅시다.

각폴더를 다 보니 이 정도가 나오네요. 하지만 여기서 '업로드'와 관련된 어플은 dropbox가 유력한 것 같습니다.

보통 파일들은 Document에 저장 됩니다. 들어가 봅시다.



Document에도, 그안에 Uploads폴더에도 없군요.. 하지만 여기서 포기하지말고 다른 곳도 뒤져 봅시다.



여기 무슨파일이 있었는지 볼 수 있네요.

S-Companysecurity.pdf를 제외한 모든 파일이 0B이므로 저희가 찾는 파일은 이 파일이라고 추측할 수 있겠군요 게다가 용량까지 한번에 알아 냈습니다. 이제 시간만 알아내면 되겠군요


 하지만 아까 위치에 파일이 없었는데 어떻게 알아낼까요?

파일을 삭제해도 캐시는 남아있을 겁니다 캐시로 가죠



캐시는 여기서 cache.db에 저장됩니다 이 파일을 보아야 합니다.



아까 위에서 봤던 폴더는 tim_folder였죠 data를 보면 base64로 인코딩 된 것 처럼 보이는 문자열이 보입니다. 이걸 디코딩해서 다운 받도록하죠



plist파일이 군요 여기서 S-Companysecurity.pdf를 찾아 봅시다.



여기 있네요. 이 아래쪽에 시간을 저장하는 곳이 있습니다.




위에 것이 업로드 시간, 아래것이 수정 시간입니다. 저 숫자를 MAC:Absolute Time으로 바꾸겠습니다.



시간을 이렇게 바꿔주면 됩니다.


그래서 답은..... 

2012-12-27 17:53:52_2012-05-01 17:49:32_S-Companysecurity.pdf_2.1MB

'포렌식 관련(네트워크 포함)' 카테고리의 다른 글

codegate 2018 miro  (0) 2018.02.08
2014 Codegate Forensic 150 풀이  (1) 2017.12.11

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

저는 아직도 배워야 하는게 많은 것같습니다 ㅠㅠ


2014 Codegate Forensic 150

파일 크기가 작길래 쉬운 포렌식인 줄알고 파일을 까보았으나....

이런 것이 뜹니다.

해석해보면 패킷데이타는 총 4270407998인데, 블럭의 총길이보다 크다~ 라는 군요


아무래도 손상된 모양입니다. 헥스에디터로 열어보도록하죠


4270407998은 hex값으로 0xFE89413E이므로 Ctrl+F를 통해 찾아봅시다.

보통 파일에서는 리틀엔디안이 적용되므로 hxd에서 검색할 때, 3E4189FE로 검색해야 될겁니다.

찾았네요. 하지만 저는 이값이 어떻게 변해야되지 몰랐습니다. 그래서 검색해보니

지금 저 4칸이 패킷길이고, 오른쪽 4칸이 캡쳐길이라더군요 이 두개가 맞아야 와이어 샤크가 제대로 패킷파일을 해석 할 수 있다고 합니다.

그러므로 저 값을 오른쪽과 같이 바꿔주면 되겠군요!

이렇게 바꾸고 저장하면....


성공적으로 열렸습니다!

http 패킷들이 보이므로 http패킷에서 파일을 추출하도록 하죠


수상한 pdf가 보이네요 열어보면!


성공 @~@

'포렌식 관련(네트워크 포함)' 카테고리의 다른 글

codegate 2018 miro  (0) 2018.02.08
2013 Codegate Forensic 100  (0) 2017.12.12

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,