一点笔记
命令执行(RCE)
php命令执行原理
通过参数可控的命令执行函数进行命令执行
相关函数
exec
写了一个简单的demo进行演示test
|
|
|
|
其实html可写可不写。
当我构造payload为?value=whoami
的时候,就会将电脑名+当前用户名返回。
如果是>value=calc.exe
,就会成功召唤计算器。
shell_exec
shell_exec()没有回显,用echo
或者var_dump()
进行返回,但这个函数返回所有内容——也是和exec()的区别所在。
``其实就是调用shell_exec()函数,使用示例如下:
|
|
system & passthru
均将输入的参数当作命令执行,且回显所有内容
|
|
popen & proc_open
popen()
通常用于打开进程文件指针,但如果传入的参数可控,也能进行无回显命令执行
|
|
返回结果是文件指针,即:
|
|
第一个resource是echo的回显,第二个resource是var_dump的回显。
proc_open(),执行一个命令并且打开用来输入或输出的文件指针,与popen()类似但是参数更多,处理数据努力更强。
pcntl_exec
pcntl_exec()在当前进程空间执行指定程序,PHP version >=4.2.0
由于其执行命令是没有回显的,所以其常与python结合来反弹shell,或是绕过disable_functions
管道符
-
|
:直接执行后面语句,A|B,执行B -
||
:如果前面语句执行错误,才执行后面语句 -
&
:均执行 -
&&
:如果前面语句执行错误则后面也不执行,只有前面执行成功才执行后面 -
;
:only for Linux的一个,前面执行完,继续执行后面。
代码执行
需要分清楚命令执行与代码执行的区别与联系。
代码执行–通过代码调用函数直接调用PHP中任意代码进行执行。
funny thing is :代码执行可以通过调用命令执行的函数来执行系统命令,来达到控制后台甚至服务器——达成RCE。
相关函数
eval() & assert()
preg_replace()
create_function()
array_map()
call_user_func() & call_user_func_array()
array_filter() & array_walk()
ob_start()
usort()
番外
用dirmap和dirsearch又扫描了一下这个为测试用而搭建的本地网站,结果dirsearch还在努力着,dirmap已经把所有文件都告诉我了。。。下一步思考怎么设置文件禁止访问。