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 |