首页 > 编程语言 >php命令执行

php命令执行

时间:2024-01-23 15:34:11浏览次数:24  
标签:文件 LD 执行 demo 命令 php

LD_PRELOAD绕过原理介绍

  • mail 函数
    • 内嵌在php里
    • 先vim demo.php
      • 里面写入mail(",",",")
      • 然后用strace -o 1.txt -f php demo.php
      • 这一句是用文档的形式记录我php demo.php 执行的内容
      • 然后用cat 1.txt | grep execve
      • 这一句是 检查有哪些是执行文件被调用里
      • 发现里面有sendmail这个文件
      • 使用readelf -Ws /usr/sbin/sendmail
      • 然后发现一个 geteuid 函数
      • 这个时候我们编辑一个库文件 demo.c
      • void payload(){
      • system("echo 'xx' ")
      • }
      • int geteuid(){
        • unsetenv("LD_PRELOAD");
        • payload();
      • } 然后把这个文件编译成.so文件 生成动态链接库文件
      • gcc -shared -fPIC demo.c -o demo.so
      • 然后把一开始那个demo.php在开头加上一行
      • putenv("LD_PRELOAD=./demo.so");
      • 表示执行前先加载这个库文件
    • 绕过条件
      • 能够上传自己的.so文件
      • 能够设置LD_PRELOAD变量的值,比如putenv函数并且未被禁止
      • 存在可以控制php启动外部程序的函数并且能够执行
      • 因为新的进程会加载LD_PRELOAD中的.so文件
      • 比如mail()等
  • imagick
    • 需要扩展安装

操作系统连接符

    • 用分号链接 前后都能执行 而且前面命令正确与否都不影响后面命令的执行
  • &
    • 提交后必须要url编码
    • 而且前面命令不影响后面的执行
  • 两个$
    • 如果前面的命令执行成功,才能执行后面的
    • 如果前面不成功,则两条都无法执行
  • |
    • 把前面命令的结果 作为 | 后面命令的参数
    • 然后执行后面的命令
  • ||
    • 类似于if else语句
    • 如果前面的命令执行成功,则后面的命令不再执行
    • 反之执行后面的命令

空格过滤

  • 大括号{}
    • {cat,flag.txt} 第一个作为命令,第二个作为参数
  • 使用$IFS ${IFS} $IFS$9
  • 重定向字符<,<>;
    • <表示的是输入重定向的意思,就是把<后面的文件取代键盘成为新的输入设备
  • %09 TAB %20 SPACE

文件名过滤绕过

  • ?代表单个字符,前提是这个字符要存在
    • 比如flag.php 可以写成????.???
  • *代表任意字符
    • 比如f*.php *
  • 单双引号
    • 比如fla""g.p""hp 或者fla''g.p''hp
  • \ 反斜线
    • 比如 fla\g.ph\p
    • \在Linux里是命令连接符
  • 特殊变量
    • 比如$1到$9、$@和$*等
    • 因为他们的输出都为空
  • 内联执行
    • 定义变量 比如$a=f;
    • 然后cat $alag.php
  • 环境变量
    • $
    • 意思是使用环境变量PATH里的第五个字符里的第一位
    • 从0开始数

文件读取命令的绕过

  • tac 反向显示
  • more 一页一页显示 在linux里按空格翻页
  • less 与more 相似
  • tail 查看末尾几行 最多十行
  • nl 显示的时候 顺便输出行号
  • od 二进制的方式读取
  • xxd 读取二进制文件
  • sort 主要用来排序文件
  • uniq 报告或删除文件中重复的行
  • file -f 报错出具体内容
  • grep
    • grep 搜索的字符 匹配的文件
    • grep { fla*.php

标签:文件,LD,执行,demo,命令,php
From: https://www.cnblogs.com/lolydawn/p/17982586

相关文章

  • SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
       在使用Exists时,如果能正确使用,有时会提高查询速度:     1,使用Exists代替innerjoin     2,使用Exists代替in  1,使用Exists代替innerjoin例子:    在一般写sql语句时通常会遇到如下语句:     两个表连接时,取一个表的数据,一般的写法通过关联查询(inne......
  • redis常用命令
    String数据类型set/get/append/strlen/delsetkeyvalue#存放数据getkeyvalue#获取数据appendkeyvalue#Redis的append命令是往一个key追加value。如果没有key,则创建一个并且设置value。strlenkey#获取指定Key的字符长度existstest#判断该键是否存在,存在......
  • Linux中的bind是什么意思?有哪些命令?
    在Linux操作系统中,内置了很多命令,借助这些命令我们可以完成各种各样的工作,而且身为一名专业的运维工程师,掌握命令是必备的技能。那么Linux中的bind是什么意思?以下是具体内容介绍。在Linux中,bind是一条命令行工具,也是一个系统调用函数,它用于将一个网络套接字与指定的地址和......
  • vim的常用命令
    移动光标:h:向左移动一个字符j:向下移动一行k:向上移动一行l:向右移动一个字符w:跳到下一个单词的开头b:跳到前一个单词的开头0:跳到行首$:跳到行尾gg:跳到文件的开头G:跳到文件的末尾编辑文本:i:在光标前插入文本I:在行首插入文本a:在光标后插入文本A:在行尾插入文本o:在当......
  • SQL server 系统优化--通过执行计划优化索引(3)
    执行时间要7205ms,语句如下:    selecttop30this_.idasid10_0_,this_.objidasobjid10_0_,this_.objnameasobjname10_0_,this_.midasmid10_0_,this_.logtypeaslogtype10_0_,this_.logdescaslogdesc10_0_,this_.submitorassubmitor10_0_,this_.submitda......
  • SQL server 系统优化--通过执行计划优化索引(1)
    正常down机7次左右,在线人员一多,系统运行缓慢,严重影响业务操作,到了无法忍耐的地步,这几天一直在这边处理优化中的问题和升级系统。将这些优化办法和思路记录下来,给大家在以后优化系统中提供思考和建议。      这几天都在通过执行计划来优化索引:      1,首先通过DMVs性......
  • Linux 中常用的基础命令
    byemanjusakafromhttps://www.emanjusaka.top/2024/01/linux-base-command彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。分类总结了Linux中的基础命令,可以收藏本文以后如果忘记了某些基础命令或者对某些命令不知道怎么用时,拿出本文快速查看各种命令的用法......
  • .NET 6 实现一个任务队列,且在不同线程中调用队列,队列始终都是串行执行
    在.NET6中,要实现一个任务队列,确保队列中的任务始终串行执行,即使它们是由不同线程调用的,你可以使用Channel<T>结合Task.Run或者更简单地使用BlockingCollection<T>与Task.Factory.StartNew或async/await模式。不过,为了保持代码的简洁性和现代性,我会推荐使用Channel<T>结合async/aw......
  • Nginx配置ThinkPHP3.1的PATHINFO模式
    server{listen8156;#监听端口(根据自己的需求更改)server_namelocalhost;#域名root/www/php;indexindex.htmlindex.htmindex.php;location~.*\.php/?.*${fastcgi_indexindex.php;fastcgi_pass127.0.0.1:9000;includefa......
  • [转帖]使用MAT命令行工具生成堆dump分析文件
    https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标Java程序运行过程中,难免会出现OOM,往往是在JVM启动参数中添加出现OOM时输出堆dump(又名:堆转储、堆快照)的参数,就在昨天下午我司生产环境出现OOM,生成的堆dump有16个G,......