반응형
반응형
반응형

서버는 닫힌 관계로 사진 없이 글로만 풀이를 작성하였습니다.

 

 

OPEN CTF Write Up

 

MISC - Welcome

 

이미지 파일이 주어지는데, HxD로 열어보면 PNG 파일과 JPG 파일이 붙어있음을 확인할 수 있다. 처음에 PNG 시그니쳐로 시작하기 때문에 엔드시그니쳐 END를 찾아내서 바로 다음에 붙어있는 JPG 시그니쳐부터 끝까지 추출해서 jpg 파일을 하나 만들어주면 flag가 담긴 이미지가 나온다.

 

 

WEB 첫 번째

 

문제 이름이 easy web이었던가.. 혀튼 id값을 받는 폼이 있었는데 admin으로 로그인만 하면 되는 문제였다.

 

여러가지를 입력해보니, "admi"을 필터링 한다는 사실을 알 수 있었다. (해당 문자열을 필터링한 나머지 문자열만 출력한다.)  그렇다면 입력을 admadmiin으로 입력해준다면 가운데 "admi"을 필터링한 나머지 문자열이 admin이 되어서 플래그가 나온다.

 

 

WEB 두 번째

 

문제이름이 proxy 이었을 것이다. 쿼리(url뒤에 ?로 값받는거)로 url을 입력받아 해당 url의 내용을 보여준다.

 

url에 문제 url을 입력하고 페이지 소스를 보니, 주석으로 admin.php가 적혀있던 것으로 기억한다.

 

url에 문제 url/admin.php를 입력했을 때 권한이 막혔거나 아무것도 표시되지 않았던 것으로 기억되고, 그래서 url을 ㅗhttp://127.0.0.1/admin.php 로 했을 때 flag가 나왔던 것 같다.

 

 

WEB 세 번째

 

MAGIC

 

이 문제는 php 소스를 제공했다. 매직해쉬를 이용한 것인데 주니어 보안 세미나에서 php 관련 발표에서도 다뤘떤 내용이었다.

 

https://www.whitehatsec.com/blog/magic-hashes/ 여기 참조해서 md5값을 넣어주면 됐었다.

 

 

WEB 네 번째

 

문제이름에 cookie가 들어갔던 문제. 매우 쉬운 문제. 그냥 쿠키중에 guest를 값으로 가지는게 있었을 것이다. 그 값을 admin으로 바꾸어주면 flag가 나왔다.

 

 

 

 

부스 write up

 

가상화폐 거래서 해킹 체험

 

포인트와 코인이 있는데 코인 수를 50000이상으로 늘리면 된다.

 

 

방법 1

 

처음 계정을 만들면 1포인트를 제공한다. 1코인 시세가 0.00012정도였으니 8000개 정도를 구매할 수 있다.

 

그럼 7개의 계정을 만들어서 8000개정도 구매한뒤 한 계정으로 모두 송금하면 된다.

 

(시도한 사람을 없었다고... 물론 정석은 아니었다.)

 

 

방법 2

 

풀고 있는데 옆에 계신 분이 찾으신 방법. 이 방법도 정석은 아니다.

 

계정을 2개 만든다. (A, B 라고 하겠다.)

 

A로 코인을 1개 이상 매수하고 B로 -(원하는만큼) 송금한다. -50000만큼 보냈다치면, A의 잔액은 +50000이 되는 것이고 B의 잔액은 -50000이 된다.

 

이렇게 A의 잔액을 늘릴 수 있다.

 

 

[A가 0개의 코인을 가지고 있다면 음수의 개수만큼을 송금하는 것은 실패한다. 하지만 코인의 수가 0이 아니라면 음수의 개수만큼 송금이 가능했다.]

 

 

방법 3

 

정석.

 

송금을 할 때, 클라이언트는 서버로 sender, receiver, amount만 보낸다. sender의 지갑에 대한 별다른 인증이 없기 때문에 지갑 주소만 안다면 해당 지갑에 든 코인을 빼낼 수 있다.

 

랭킹을 보면 codegate라는 계정이 존재하는데, 해당 유저의 페이지로 들어가보면 코인을 999999만큼 가지고 있다.

이 유저의 코인을 내 지갑주소로 보내면 된다.

유저 페이지에서 지갑주소가 표시되진 않지만, 크롬 개발자 도구 > Network에서 wallet의 response들을 잘 살펴보면 지갑주소를 찾아낼 수 있다.

 

burp suite을 이용해 송금할 때 발생되는 패킷을 잡아서,

찾아낸 codegate의 지갑주소를 sender로, 나의 지갑주소를 receiver로, amount는 50000 이상으로 바꿔주면 된다.

 

 

반응형

'CTF Write Up' 카테고리의 다른 글

YISF 2019 본선 풀이  (0) 2019.08.19
제17회 YISF 2019 예선 write-up  (0) 2019.08.14
TAMU CTF 2019 wirte up  (0) 2019.03.04
제 1회 TRUST CTF write up  (0) 2019.02.18
NeverLAN CTF 2019 write up  (0) 2019.02.04
반응형


4월 5월 코드게이트에서 이벤트로 진행되었던 OPEN CTF 일부 문제 풀이입니다.



- DoorLock Hacking

- Car Canbus Hacking





DoorLock Hacking


도어락의 펌웨어를 분석하여 비밀번호를 알아내서 도어락 해제후 안에 들어있는 FLAG를 얻으면 되는 것이었습니다.


주어진 펌웨어는 ARM에서 작동하는 32bit ELF 파일입니다.


IDA를 이용하여 분석하면 됩니다.




Shift + F12 단축키를 이용해 Strings를 확인 할 수 있습니다.





들어가보면 키패드 문자처럼 보이는 것들이 뜨네요.


여기서 스크롤을 위로 올라가다 보면




각 함수 하나에 정수 하나씩 있는 것을 확인 할 수 있습니다.


조합해보면 


19981217


누군가의 생일 같아 보이네요.


키패드를 누를때 *눌러 시작하고 #을 눌러 완료하면 됩니다.



도어락 비밀번호 : *19981217#


그후 안에 있는 FLAG를 확인 합니다.






Car Canbus Hacking


자동차 계기판에서 RPM을 5000으로 올리면 되는 문제.

-아두이노 불량인 줄 모르고 3시간 동안 삽질했었던....



문제를 풀기 위해선 아두이노와 캔통신모듈이 필요했습니다. 



힌트로 제공된 링크 :


http://orasman.tistory.com/282

http://bimmerforums.com/forum/showthread.php?1887229-E46-Can-bus-project




첫번째 링크 포스트를 통해 이두아노와 캔통신모듈의 배선 연결 표를 참고하여 연결할 수 있습니다.


아두이노를 설치한 후 다음 링크에서 라이브러리를 다운받아 설치합니다.

https://github.com/coryjfowler/MCP_CAN_lib



아두이노를 설치해 주고 위 링크에 있는 예제중 CAN_Send를 불러 옵니다.


기본 설정은 힌트를 참고해 수정해 줍니다.


MCP_16MHZ -> MCP_8MHZ

delay(100); -> delay(10);  # 사실 딜레이는 큰 상관이 없습니다.


CS는 10번핀에 꽂아줍니다.



이제 수정해야 할값은 ID와 DATA뿐입니다.


이것들은 두번째 링크를 참고해 줍니다.


우리한테 필요한부분은 RPM을 올리는 것이므로 RPM부분을 찾아봅시다.



ARBID: 0x316 (DME1) 
-B0
-B1 
-B2 RPM LSB
-B3 RPM MSB [RPM=(hex2dec("byte3"&"byte2"))/6.4]
-B4
-B5
-B6
-B7



설명을 보면 ID는 0x316, B0~B7은 DATA배열에서 각 설명입니다.

B2와 B3만 수정해주면 될 것 같습니다.


B3을 보면 RPM=(hex2dex("byte3"&"byte2"))/6.4 라는 식이 있습니다.


이 식의 의미는 B3 + B2 의 값을 10진수로 변환 하여 6.4로 나눈 값이 RPM이 된다는 것입니다.


여기서 B3 + B2의 의미는 예로 들면 B2 = 0xAB이고 B3= 0xCD일때 0xCDAB가 되는 것입니다.



우리는 RPM = 5000으로 만들어야 합니다.


5000 x 6.4 = 32000, dex2hex(32000) = 0x7D00


B3 = 0x7D, B2 = 0x00 이 되겠네요.



위의 값을 가져와 코드를 수정해 줍시다.


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
#include <mcp_can.h>
#include <SPI.h>
 
MCP_CAN CAN0(10);     // Set CS to pin 10
 
void setup()
{
  Serial.begin(115200);
 
  if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
  else Serial.println("Error Initializing MCP2515...");
 
  CAN0.setMode(MCP_NORMAL);   // Change to normal mode to allow messages to be transmitted
}
 
byte data[8= {0x000x000x000x7D0x000x000x000x00};
 
void loop()
{
  byte sndStat = CAN0.sendMsgBuf(0x31608, data);
  if(sndStat == CAN_OK){
    Serial.println("Message Sent Successfully!");
  } else {
    Serial.println("Error Sending Message...");
  }
  delay(10);
}
cs



이후 아두이노에 코드를 업로드 하면 계기판의 RPM이 5를 가리키고 있는 것을 확인 할 수 있습니다.

반응형

'CTF Write Up' 카테고리의 다른 글

KDMHS CTF 2018 Write-up  (0) 2018.06.18
H3X0R 4rd CTF 2018 [easy_png] Write-up  (0) 2018.06.14
제 1회 TEAMH4C CTF Write Up  (0) 2017.10.29
[EKOPARTY CTF 2017] Malbolge  (1) 2017.09.17
CRC CTF 2017 Write-up  (0) 2017.09.13

+ Recent posts