ez_php
这题前面简单,不多说
|
|
解法一日志包含
接下来我打的是日志包含,算是非预期
各发包2次哈
解法二打自增
文件包含读取后,有base64字符(还一个非预期直接/file就能出flag)
|
|
解码得到
|
|
这里无字母rce,且过滤了^,~,|,那只能打自增(其实也可以fuzz一下看看可以用哪些)
|
|
那显然只能打自增
自增规则简单,比如$a=‘A’;$a++=‘B’,所以只要一个字母A,我就可以构造一个$_GET,这样就可以给 _
还有__
赋值(这里有数字,但是还是用_
,因为我这个照着无数字字母rce打,相当于通用payload),从而到达命令执行的目的,那这个A怎么的得到?
在php中,数组与字符串连接,会被转换成字符串,值就是Array,那就相对于拿到了所有字母
|
|
接下来就可以尝试去给_
和__
GET传参,这里我们需要把换行的都去掉,然后进行一次URL编码,因为中间件会解码一次,所以我们构造的payload先变成这样
|
|
然后是
|
|
但是这个paylaod不行,因为限制了字符,还是要利用数字,所以应该打$_
GET[1] ($_GET[2])
|
|
|
|
这里是118个字符,比较极限,下面更好,只有111字符
|
|
[从CTFShowRCE挑战]中学习自增构造webshell-腾讯云开发者社区-腾讯云
对于RCE和文件包含的一点总结 | root@wanth3f1ag
[HNCTF] challenge_rce - Boogiepop Doesn’t Laugh
Coding Loving-ssti
有源码先审计代码
|
|
显然这里漏洞点在render_template_string ,这个与ssti密不可分(render_template_string函数在渲染模板的时候使用了%s来动态的替换字符串,在渲染的时候会把 {undefined{**}} 包裹的内容当做变量解析替换。)
Flask的渲染方法函数—render_template()/render_template_string()-CSDN博客
所以就是打ssti(在/test路由,cmd是参数),先fuzz一下,这些都是没过滤的
下面是过滤的(下面还一些关键词,那些无所谓,直接引号绕过了),显然,困难的是数字,下划线过滤了,因为下划线过滤了,一般用request加attr,或者编码,但是数字和点过滤了,这让我束手无策。
那就直接fenjing跑!
一开始我直接跑fenjing跑不出,一般默认跑fenjing基本跑不出,要根据题目加点参数才行。这个fenjing跑要带路由,cookie,不然跑不出。这里我猜猜原因,这里设置了seesion会话用户是test,后面还进行了验证,所以要带上seesion才行。
fenjing如果你是pip下载就打
|
|
不然就命令行前加pyhton -m就行
|
|
然后执行命令就行
这里给出payload:ls
|
|
cat /flag
|
|
总结,fenjing还是很强,以前不会用,以后注意一定要带上参数
light_pink-sql
这题是考sql,但是有非预期
非预期
拿dirsearch扫一下
|
|
db.php没有东西,但是shell.php有好东西
直接有eval了,我这可以直接打一句话木马了!
但是!这里有phpinfo!,所以我猜测一下可能会有flag,直接搜flag或者nss,发现flag在环境变量
预期解
预期解显然就是打sql
先打1'#%23
(%23就是#,–+被过滤了)
然后试1' order by 5%23
(试到6报错)
然后看看哪有回显,但是报错,原因是-被禁用
果然-被禁,结果是4是回显
|
|
接下来找表
|
|
显示不可以哦=,所以应该是**=被过滤,用like代替**
|
|
查列
|
|
查flag
|
|
此题过滤了-还有=,但是还是比较友好,毕竟报错还是有提示,是一个不错的sql题