본문 바로가기
picoCTF

Verify

Easy라고 되어 있지만 이 문제는 bash script를 작성한 경험이 많지 않으면 어렵다고 생각한다.

 

Instance를 켜서 ssh로 접속하면 파일이 3개가 있다. 

cat checksum.txt 
03b52eabed517324828b9e09cbbf8a7b0911f348f76cf989ba6d51acede6d5d8

 

decrypt.sh은 다음과 같다. 

 

cat decrypt.sh 

        #!/bin/bash

        # Check if the user provided a file name as an argument
        if [ $# -eq 0 ]; then
            echo "Expected usage: decrypt.sh <filename>"
            exit 1
        fi

        # Store the provided filename in a variable
        file_name="$1"

        # Check if the provided argument is a file and not a folder
        if [ ! -f "/home/ctf-player/drop-in/$file_name" ]; then
            echo "Error: '$file_name' is not a valid file. Look inside the 'files' folder with 'ls -R'!"
            exit 1
        fi

        # If there's an error reading the file, print an error message
        if ! openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -in "/home/ctf-player/drop-in/$file_name" -k picoCTF; then
            echo "Error: Failed to decrypt '$file_name'. This flag is fake! Keep looking!"
        fi

 

decrypt.sh은 뒤에 파일 이름을 argument로 받고 argument로는 폴더가 아닌 파일만 받는다. 

 

decrypt.sh의 핵심은 이 부분이다. 

 

openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -in "/home/ctf-player/drop-in/$file_name" -k picoCTF;

 

설명은 다음과 같다.

 

1. openssl로 -d(decryption)을  할 것이다.

2. 알고리즘은 AES 암호화를 이용하는데 key size는 256 bits이고 CBC(Cipher Block Chaining) mode를 이용한다.

3. -pbkdf2(Password-Based Key Derivation Function 2)를 이용하여 key를 얻는다. 

4. -iter 100000 pbkdf2 함수가 100000의 iterations를 돌게 한다. 

5. -salt로 random 한 salt 값을 설정한다. 

6. -in은 복호화할 파일의 위치를 설정한다.

7. -k는 개인 key를 만드는 데 사용되는 password이다.  

 

files는 directory이다.

 

00011a60  2MYWkWLC  4k4veVKp  8Shyigig  AiUxYmz8  Cb22Z7FO  G7enzzui  IITtRrrR  KbGMgDus  O5tEUFhw  R3rVsQa8  TRyxUwzw  WBpZ7iz6  ZyNsHVFW  dKisxYdK  g2nu6vlR  jcMzi4VO  lxv6mvZ6  p1LgEQdu  qojIz6XF  uMpXxbqr  xlqXOqhL
022cvpdN  2QpRnoZQ  4sczhCZl  8d0Ncqme  AmsN0Lkj  Ce5TrzJu  Gcv1H8Qs  IbMiqCHJ  KlqDh1ZQ  OH3906gp  RAXeLvjl  TXsLzqsp  WjY12GNe  aGVRRt1d  deppMJSV  gLAo3J0D  jdYv9CQ3  m1NnTZoo  p5INCxLV  r3HVTaJd  uUI8gJNi  yACAaKqG
04nLilRD  2emuPVOb  58BnWcOc  8hKIvq38  ArUDDIQ3  ClWGbsxu  GhrShrXN  Ie0xOcl5  L58tTvhF  OIYZeUCB  RFLWtody  TeaXjOeh  Ww6oTYL8  aHFaEXKf  dv0Mm4vr  gem657x8  jzmPaO2D  m3bsNhyN  p5INQHq8  r3Pw8pFI  ugeJ5RN3  yYRsKiUO
0MT2Wrui  2gP5wDgq  5bSdd2sp  8rIuGenM  Azqf6EEw  DCn7KnqG  Gtk4Kn9w  IikIpp05  L7gltlCF  OPqDbOIH  RHjAw3hj  TeyHF78l  X5rRZ32p  aIz8E0Iy  e1x51vcc  hNqXyUX2  kDPV8ASY  mWWBZCgt  pXJHJUbH  r8vIZE1F  vJDrHtxo  yg7uBent
0SGMttmR  2w5vJlLG  5gxjbRbh  91cLOGeN  B8pBCEvG  DSKHZ66z  GufDk3Mb  IlQwVZcY  LCLocE1C  Oe0SOw16  RPVIP1xx  ToT9QPKf  XGTpUJIw  afLk75aO  e2umkBxy  hZxbAqts  kKVvPy8S  mdFDpW9k  pb1E0Y3Z  rzYX4BnS  vMv1M1qs  zYz6howf
0fCDySFB  2yMtx5qd  5rHRNllE  9DNfzhUK  BN0HxLxE  Dmsex2Ug  HDLWGApz  ItYR0Da2  LMavH6jA  OnCx4O4u  RQWaIGxG  TtPblPd6  XJiFKTlc  b9YCg3Tz  e5b74XZq  haNCaZmC  kWjYWiLD  n2XnM9Nc  pnycz11G  s9TOeOaJ  vWguQ8rQ  zjkul95p
0hHVJSPh  303DzMmf  63MqIIVV  9KIFXofB  BOeN3lXR  EBBoQm7M  HIeYL84k  Izq2bmb5  Lq3dNalV  P7orF8IR  RVejZvvP  U3BoYTr9  XcmGmkwD  bDK7A26M  eFlmUkb6  iGwCDzaU  kZ6DTcql  n7Vs8Bjh  q53EoTzu  sAy34VP4  vc1wGQhn  zoz7gvVr
0mPyFlda  33CFCJ0y  64nJlBLv  9pluLfgA  BdO65Tk4  EG1lW2KR  HJIPzwjJ  J16J63tC  LrYo1dnu  PECjZnzJ  RdYwRe68  UDI6pN8S  YAZlvEou  bDZN0f4B  eNfM7vPK  iILvZZya  kbumrMcy  n8r2Ejk9  qCTrc9yM  sKi8TaSn  vjypfsoh
0xknvebh  36tjTWoF  69JSHBh1  ADMuzktV  Bh5xju3q  EXQ6DiO5  HMq6348V  JVEoV1Bn  MPeS8YHI  PpktRW9a  Rgs7l9CZ  UF1urDfG  YKQLrxBm  bcZupFpi  eZ4ehccg  ih6levXk  knHTEYup  nldOsSfJ  qHwcKaSC  sNI2Q6oa  vsGKdf0J
1kTWMoOI  3KZwXc8s  6vgioqew  AEJxVlNY  C1kYNpjq  F6yHlWpt  HUjCgnh4  Jcwq4RxP  N8vFOGDF  QHv46Plh  ScOtAOiZ  UUiDNDlO  YdTZkUcM  bjtBJwTc  efpcZmHN  j1v0LBVe  ksIZWNZR  nnZ33FAt  qK35XlHM  sRaKyq1f  w1XGgnr9
1mGlW6Ts  3Vs8v8kW  76rj6cv7  AGOEyD4N  CF4c5xR8  FJBePm2b  HWRVc59e  Jk8UBmcS  NC6PZdoL  QbiQCWZr  SwrcVnay  UuC7t9JQ  Z2rLXuyp  c3Z3JN0m  ekSs7xW4  jIlhVDLw  lZiPMwX4  nrwKQbJk  qSn3WAyi  svmptIxV  w8DmFhfg
2JKdkggW  3qDKN57P  7j2g9w9w  AVdbk5eX  CGkVyMxT  FLsBEmlR  Hmr54gXd  KCL5hW02  NS9xPzIA  QcIkjhJ0  T5IkmqtJ  V2eK2wiC  ZWIiY84t  cIDWC9cb  eknrQKQh  jObn0z94  lcYptJNC  oNnB9jru  qV83Dmye  tFGQywwr  woaiQu5g
2Jr8UtbZ  4CwloraZ  7ye3lPVb  AXFWLqwI  CLCyTz85  FOxKdaVP  HqxLJgMp  KKRWbrqC  Ndyi6bnx  QgmCuMSV  T6AHhqdE  V4VMSZd9  ZXqAvkcE  dDoFZTXh  fZHEnAvZ  jVkxEmtq  ld12od7V  oi96tAtc  qWv24Da7  tY2epsSy  wvhWmTPt
2K4XCmfE  4XqPqs6B  870YaC5g  AdzCNBlC  CNvsyU3W  FtMorZ65  IDQQR4nq  KUIfl2m7  NxdIqu0S  Qxrlj2uk  TPBDRCiJ  VhBNGSYV  ZdPbKJh1  dKYP6pnk  g2E6RkkX  jVlaDg4q  lmr9cGCE  oiy29oCW  qZ7TLGA0  tuma818A  xQJV5GcG

 

 

find files로는 files directory에 있는 모든 파일을 전부 다 찾아 준다. files 밑에 있는 모든 파일을 decrypt 해야 하기 때문에 for loop으로 각각의 파일에 decrypt.sh을 적용한다. 

 

 

for i in $(find files); do ./decrypt.sh $i; done

 

너무 에러가 많이 나와서 grep으로 flag만 잡아보려고 했으나 알 수 없는 이유로 grep을 써도 flag만 걸러지지 않았다.

 

picoCTF{trust_but_verify_00011a60}

 

 

checksum은 data가 손상되었는지의 유무를 확인하는 값이다. MD5, SHA1도 checksum인 걸 보아서는 hash와 유사한 것 같다. 

checksum에 대해서도 좀 찾아봐야겠다.

'picoCTF' 카테고리의 다른 글

ASCII Numbers  (3) 2024.11.06
weirdSnake  (0) 2024.11.06
SansAlpha  (0) 2024.11.06
Trickster  (0) 2024.10.29
findme  (0) 2024.10.29