死亡exit

看了p牛的文章受益匪浅,跟着p牛的思路复现一遍如何绕过exit函数。

环境:win+iis+php

PHP

1

2

3

4

5

6

7

<?php

$c="<?php exit;?>";

@$c.=$_POST[‘c‘];

@$filename=$_POST[‘file‘];

@file_put_contents($filename, $c);

highlight_file(‘tmp.php‘);

?>

一、通过phpfilter协议的base64编码

可以看到在写入的文件之前存在exit;即使正确写入了shell也无法执行。这种情况一般出现在一些缓存文件中。如果能绕过这些就可以直接getshell了。

幸运的是,这里的$_POST[‘filename’]是可以控制协议的,使用php://filter流的base64-decode方法,将$content解码,利用php base64_decode函数特性去除“死亡exit”。

值得注意的有两点:

    • . base64_decode()会忽略要解码字符串中无效字符像<>?;等,这里给出base64_decode()函数忽略无效字符相应的代码
    • “phpexit”一共7个字符,因为base64算法解码时是4个byte一组,所以给他增加1个“a”一共8个字符。这样,”phpexita”被正常解码,而后面我们传入的webshell的base64内容也被正常解码。结果就是<?php exit; ?>没有了。
    • 可以看到结果 <?php exit;?>已经不存在了。

      利用php://filter的strip_tags

      除了使用base64特性的方法外,我们还可以利用php://filter的strip_tags方法来去除“死亡exit”。

      strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。但是当我们直接使用strip_tags的时候。我们输入的shell的内容也会被过滤掉。

      但是php://filter支持多个过滤器。

      我们只需结合base64-decode即可实现getshell

时间: 2024-08-11 03:26:25

死亡exit的相关文章

MOCTF web writeup

前几天发现一个不错的平台MOCTF但一直没时间刷.这几天陆续更新web题的wp web1:一道水题 进去一堆青蛙 查看源代码,看到flag web2:还是水题 发现密码框输入不了,遂F12审查元素,删除disable属性,以及将长度改为5,输入moctf.得到flag web3:访问限制 题目提示用NAIVE浏览器,于是想到burp改user-agent:NAIVE run得到flag web4:机器蛇 这道题....我...一进去玩了半天的贪吃蛇.... 后来随手审查了元素,发现robots.

linux中的exit

C标准定义了下面的退出函数: #include <stdlib.h> void exit(int status); void _Exit(int status); int atexit(void (*function)(void)); 函数功能介绍如下: void exit(int status) 该函数终止调用的程序.status传递给系统用于父进程恢复.程序退出之前,exit()调用所有以atexit()注册的函数,清空所有打开的<stdio.h> FILE*流的缓冲区并关闭流

exit() 和 return

exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数中,则会退出函数并返回一值. 详细说: 1. return返回函数值,是关键字:  exit 是一个函数. 2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它表示了一个进程的结束. 3. return是函数的退出(返回):exit是进程的退出. 4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的). 5. ret

exit参数代表的意思

他就是一个给外部程序一个值,外部程序利用这个值可以相应的捉某些动作,至于这个值代表的是什么,由你自己决定,不管是1代表正常还是0代表正常,都一样,但是在Windows平台一般是0代表正常,这只是个习惯问题.假如是你开发外部程序调用你自己的Java程序,那么使用10000代表正常退出也是无所谓的,只要你理解就可以了,但是还是按照习惯来的比较好 C 语言的设计之初就是为 Unix 系统设计的,而这个系统是『很多程序互相配合』搭配成一个系统. 每个运行着的程序都是进程,而进程就会有父进程,父进程通常是

【Salvation】——怪物角色动画&amp;主角碰撞死亡动画

写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复. 一.设计敌人 拖一个精英sprite到层次面板,把名字改为monster 把敌人 10帧的动画 run 拖给敌人 把动画控制脚本 animationController拖给敌人 设置Frame Number:10     Direction:勾选,向左 给敌人添加碰撞器  Box Collider  勾选IsTrigger 调整碰撞器的大小  

Gtest:死亡测试

转自:玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试 一.前言 “死亡测试”名字比较恐怖,这里的“死亡”指的的是程序的崩溃.通常在测试过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序崩溃,这时我们就需要检查程序是否按照预期的方式挂掉,这也就是所谓的“死亡测试”.gtest的死亡测试能做到在一个安全的环境下执行崩溃的测试案例,同时又对崩溃结果进行验证. 二.使用的宏 Fatal assertion Nonfatal assertion

微商主宰的微信清粉软件正在走向死亡边缘?

也许是意识到微信好友鱼龙混杂,破坏社交生态,微信开始对臃肿的个人社交体系下手了,首先是推出"朋友圈3天可见"功能,后来又推出帮助用户筛选"不常联系的朋友"功能,通过对列表好友的筛选,长时间无任何交集的微信好友将被一一标记出来,微信用户可以选择删除这些"僵尸"好友. 事实上,早在微信动手之前,用户就找到了清理微信好友的神器--僵尸粉清理软件,而且这些软件也帮助不少微信用户重新获得相对清净的朋友圈环境,那么这些清粉软件又是如何走进微信用户视野的呢?

Qt的quit(),exit()以及close()事件捕获

使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit()以及close(). 首先说明窗口退出时,系统提示对话框的代码编辑.对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都能起到关闭应用程序的作用.只是应注意二者调用的方式不同.如下程序示例: { QApplication* app; app->exit(0);}

git did not exit cleanly

exit code 1 1.鼠标右键 -> TortoiseGit -> Settings -> Network 2.SSH client was pointing to C:\Program Files\TortoiseGit\bin\TortoisePlink.exe 3.Changed path to C:\Program Files (x86)\Git\bin\ssh.exe 2与3互换修改,提交一次错误,然后改回来在提交就正常了 exit code 128 github,pul