Description

Category: Pwnable

Source: TAMUctf 2019

Points: 463

Author: Jisoon Park(js00n.park)

Description:

nc pwn.tamuctf.com 4322

Difficulty: easy

pwn2

Write-up

어떤 함수를 실행할건지 물어보고 입력값을 select_func() 함수로 넘긴다.

막상 select_func() 함수에서는 입력한 값이 "one" 인지 아닌지만 검사하는 것 같다.

stack 구조를 살펴보자.

내가 입력한 값을 dest로 최대 0x1f 바이트만큼 복사하는데, dest 버퍼의 크기는 0x1e 바이트이고 dest 버퍼 다음은 v3 변수이다. 즉, v3 변수의 첫번째 바이트를 변조할 수 있다.

v3 변수는 상황에 따라 one() 또는 two() 함수의 주소를 갖고 있게 되는데, 첫번째 바이트가 변조된다는 소리는 호출되는 주소값의 마지막 한 바이트를 바꿀 수 있다는 뜻이다. (little endian이니까)

그럼 v3 변수가 default 값인 two 함수 주소를 갖고 있을 때 마지막 바이트를 변조해서 호출할 수 있는 곳에 뭐가 있는지 살펴보자. 너무 뻔하게도, print_flag() 라는 함수가 6D8 번지에 존재한다.

v3 변수의 첫번째 바이트를 D8로 변조하는 exploit을 작성하여 실행해보니 flag를 얻을 수 있었다.

Flag : gigem{4ll_17_74k35_15_0n3}

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

Pwn4  (0) 2019.11.23
Pwn3  (0) 2019.11.23
Pwn1  (0) 2019.11.23
fd  (0) 2019.11.23
collision  (0) 2019.11.23

Description

Category: Pwnable

Source: TAMUctf 2019

Points: 402

Author: Jisoon Park(js00n.park)

Description:

nc pwn.tamuctf.com 4321

Difficulty: easy

pwn1

Write-up

주어진 파일을 실행해보면 역시나 이것저것을 물어본다.

IDA를 이용해서 main() 함수를 decompile 해보면 어떤 답을 입력해야 하는지 알 수 있다.

마지막에 secret을 묻는 질문이 있는데, 입력한 s 변수가 아니라 v5 변수를 대상으로 값을 검사한다.

s 변수의 주소는 ebp-3Bh이고, v5 변수는 ebp-10h이고, gets() 함수를 이용해서 s 변수를 입력 받으니 bof를 이용해서 v5 변수의 값을 바꿀 수 있다.

0x3B - 0x10 = 0x2B 만큼의 아무 데이터를 집어넣고 이후에 0xDEA110C8을 붙여서 보내는 exploit을 작성해서 실행해보면 flag를 얻을 수 있다.

Flag : gigem{34sy_CC428ECD75A0D392}

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

Pwn4  (0) 2019.11.23
Pwn3  (0) 2019.11.23
Pwn2  (0) 2019.11.23
fd  (0) 2019.11.23
collision  (0) 2019.11.23

Description

Category: Reversing

Source: TAMUctf 2019

Points: 491

Author: Jisoon Park(js00n.park)

Description:

nc rev.tamuctf.com 8188

Difficulty: medium

noccbytes.pyc

Write-up

실행해봐도 별거 없다. 일단 main() 함수를 살펴보자.

뭔지 모를 check() 함수를 지나고 나서 입력받은 값을 passCheck() 함수에서 체크한다.
이 체크만 잘 넘기면 flag를 보여준단다.

passCheck() 함수도 살펴보자.

여기서도 역시 뭔지 모를 check() 함수를 지나고나서 globPass에 있는 문자열과 입력한 문자열을 비교하여 결과를 리턴하도록 되어있다.

앞에서 뭐 어떻게 되건 별 관심없고, 최종적으로 비교하게 되는 globalPass 변수에 어떤 값이 들어가는지 gdb를 통해 확인해보자. (hi는 내가 입력한 값이다.)

서버에 접속 후 globalPass 변수에 들어있던 WattoSays를 입력해주면 flag를 얻을 수 있다.

Flag : gigem{Y0urBreakpo1nt5Won7Work0nMeOnlyMon3y}

'writeups > Reversing' 카테고리의 다른 글

EASY_CrackMe  (0) 2019.11.25
Crypto Crackme Basic  (0) 2019.11.25
Cr4ckZ33C0d3  (0) 2019.11.23
Cheesy  (0) 2019.11.23
keypad CrackMe  (0) 2019.11.23

Description

Category: Reversing

Source: TAMUctf 2019

Points: 493

Author: Jisoon Park(js00n.park)

Description:

nc rev.tamuctf.com 8189

Difficulty: hard

prodkey

Write-up

prodkey를 입력하라고 한다. prodkey를 어떻게 확인하는지 살펴보자.

  puts("\nPlease Enter a product key to continue: ");
  fgets(&s, 30, _bss_start);
  if ( (unsigned __int8)verify_key(&s) )
  {
    stream = fopen("flag.txt", "r");

fgets()로 받은 입력값을 verify_key() 함수를 통해 검사하고 있다.

verify_key() 함수는 check_01()부터 check_0F() 함수까지 15가지의 조건 함수를 만족하는지 확인한다.

각 조건 함수들은 입력한 값의 각 자리에 대해 부등식 또는 다항식의 형태를 정의하고 있는데, 이를 모두 만족하는 값들을 찾아야 한다.

연립방정식을 세워서 풀어보는 것도 재미있겠지만, 이런 문제는 보통 symbolic execution으로 풀으라고 나오는 문제이다.

symbolic execution의 대명사인 angr를 이용해서 풀어보자.

간단하게 바이너리 파일을 연 다음 탐색을 성공했을 때 도착할 주소를 대충 넣으면 알아서 적당한 데이터를 찾아준다.

그 후 서버로 접속해서 찾은 데이터를 전송하도록 exploit을 구성하면 flag를 얻을 수 있다.

Flag : gigem{5y573m_0v3rfl0w}

'writeups > Reversing' 카테고리의 다른 글

Crypto Crackme Basic  (0) 2019.11.25
NoCCBytes  (0) 2019.11.23
Cheesy  (0) 2019.11.23
keypad CrackMe  (0) 2019.11.23
flag  (0) 2019.11.23

Description

Category: Reversing

Source: TAMUctf 2019

Points: 370

Author: Jisoon Park(js00n.park)

Description:

Where will you find the flag?

reversing1

Write-up

file 명령을 이용해서 주어진 파일의 정보를 설펴보면 64bit 실행파일이다.

실행 해보면 base64 인코딩 된 것으로 보이는 아래의 문자열들이 나온다.

QUFBQUFBQUFBQUFBQUFBQQ==
RkxBR2ZsYWdGTEFHZmxhZ0ZMQUdmbGFn
Q2FuIHlvdSByZWNvZ25pemUgYmFzZTY0Pz8=
RkxBR2ZsYWdGTEFHZmxhZ0ZMQUdmbGFn
WW91IGp1c3QgbWlzc2VkIHRoZSBmbGFn

디코드 해보면 아래의 데이터를 얻을 수 있는데, flag로 보이는 것은 없다.

AAAAAAAAAAAAAAAA
FLAGflagFLAGflagFLAGflag
Can you recognize base64??
FLAGflagFLAGflagFLAGflag
You just missed the flagm

reversing 문제니까 일단 IDA로 decompile을 해보자.

아까 본 것들 외에 basic_string 인스턴스로 할당만 하고 출력하지 않는 문자열이 하나 더 보인다.

이것도 디코드 해보니 flag를 얻을 수 있었다.

Flag : gigem{3a5y_R3v3r51N6!}

'writeups > Reversing' 카테고리의 다른 글

NoCCBytes  (0) 2019.11.23
Cr4ckZ33C0d3  (0) 2019.11.23
keypad CrackMe  (0) 2019.11.23
flag  (0) 2019.11.23
DLL with notepad  (0) 2019.11.23

Description

Category: Web/Network

Source: TAMUctf 2019

Points: 482

Author: Jisoon Park(js00n.park)

Description:

Using a teletype network protocol from the 70s to access a calculator from the 70s? Far out!

Note to new players: You won't see anything in Wireshark / tcpdump when you initially connect. (i.e. packets are sent unicast on a bridged network)

OpenVPN Config

Write-up

VPN에 접속한 다음 Wireshark로 tap0를 열어보자. 문제에서 얘기한 대로 별다른 패킷들이 보이지 않는다.

패킷들이 unicast로 날아다녀서 그런 거라고 하니 ettercap을 이용한 ARP spoofing을 통해 패킷을 살펴보자.

먼저 ettercap을 실행하고, host 들을 scan 해보면 172.30.0.2172.30.0.3 두 개의 host가 찾아진다.

이들을 각각 Target 1과 Target 2로 지정한 다음, ARP poisoning - Sniff remote connections을 이용해서 sniffing을 시도하면 Target 1과 Target 2가 주고 받는 패킷들을 나도 볼 수 있게 된다.

(참고로, ettercap의 사용법은 이 페이지에 잘 나와있다. 잘 정리되어있어서, 보고 따라해서 한번만에 성공했다.)

wireshark를 이용해서 tap0 인터페이스에서 날아다니는 패킷들을 확인해보면, telnet 패킷들이 보인다. (문제에서 얘기한 teletype network protocol을 검색해보니 그게 telnet 프로토콜이라고 해서 바로 알았다.)

telnet 프로토콜의 패킷들을 follow 해보면 alice의 로그인 계정(alice / 58318008)을 확인할 수 있다.

Telnet host인 172.30.0.2에 alice의 계정으로 접속 후 디렉토리의 파일들을 살펴보면 .ctf_flag 파일이 있는 것을 볼 수 있고, flag를 알아낼 수 있다.

Flag : gigem{f5ae5f528ed5a9ad312f75bd1d3406a2}

'writeups > Web' 카테고리의 다른 글

login filtering  (0) 2019.11.25
fly me to the moon  (0) 2019.11.25
WTF_CODE  (0) 2019.11.23
webhacking.kr 058  (0) 2019.11.23
webhacking.kr 047  (0) 2019.11.23

Description

Category: Web

Source: wargame.kr

Points: 168

Author: Jisoon Park(js00n.park)

Description:

This is another programming language.

Can you read this source code?

Write-up

주어진 soruce_code.ws 파일을 다운받아 열어보면 아무것도 안보인다.

hexdump로 보면 탭(09), 스페이스(20), 뉴라인(0a) 세가지 문자로만 이루어진 문서임을 알 수 있다.

이건 뭔가... 싶어 해킹대회에 자주 나오는 모스부호(morse code)로 생각하고 decoding을 해보았지만, 제대로된 모스부호가 아니었다.

구글신에게 'space tab lf code' 관련 문서를 물어보면 'Whitespace'라는 게 있다고 알려준다.

적당한 온라인 Whitespace Compiler(http://vii5ard.github.io/whitespace/ 를 사용했다.)를 찾아서 주어진 문서를 넣고 실행해보았더니 key를 얻을 수 있었다.

Flag : 9374d96ce2339697674df71a74ed9b25f84eec90

'writeups > Web' 카테고리의 다른 글

fly me to the moon  (0) 2019.11.25
Calculator  (0) 2019.11.23
webhacking.kr 058  (0) 2019.11.23
webhacking.kr 047  (0) 2019.11.23
webhacking.kr 039  (0) 2019.11.23

Description

Category: Web

Source: webhacking.kr

Points: 150

Author: Jisoon Park(js00n.park)

Description:

Write-up

flash로 작성된 문제이다.(문제를 열었을 때 flash를 허용할거냐고 묻는다.)

페이지 소스를 분석해 보면 hackme.swf 파일을 여는 것을 알 수 있다.

일단 다운로드 받아서 swf 디컴파일을 시도해보자. (ffdec라는 좋은 오픈소스가 있다.)

디컴파일을 해서 script 항목에 있는 코드를 확인해보면 쉽게 암호를 알아낼 수 있다.

암호를 입력하면 점수를 획득할 수 있다.

'writeups > Web' 카테고리의 다른 글

Calculator  (0) 2019.11.23
WTF_CODE  (0) 2019.11.23
webhacking.kr 047  (0) 2019.11.23
webhacking.kr 039  (0) 2019.11.23
webhacking.kr 038  (0) 2019.11.23

+ Recent posts