php命令行传参

通常PHP都做http方式请求了,可以使用GET or POST方式接收参数,有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。
一、使用$argv or $argc参数接收

复制代码代码如下:


<?php
/**
 * 使用 $argc $argv 接受参数
 */
 
echo "接收到{$argc}个参数";
print_r($argv);


执行

 

复制代码代码如下:


[root@DELL113 lee]# /usr/local/php/bin/php test.php
接收到1个参数Array
(
    [0] => test.php
)
[root@DELL113 lee]# /usr/local/php/bin/php test.php a b c d
接收到5个参数Array
(
    [0] => test.php
    [1] => a
    [2] => b
    [3] => c
    [4] => d
)
[root@DELL113 lee]#


二、使用getopt函数

 

复制代码代码如下:


<?php
/**
 * 使用 getopt函数
 */
 
$param_arr = getopt('a:b:');
print_r($param_arr);


执行

 

复制代码代码如下:


[root@DELL113 lee]# /usr/local/php/bin/php test.php -a 345
Array
(
    [a] => 345
)
[root@DELL113 lee]# /usr/local/php/bin/php test.php -a 345 -b 12q3
Array
(
    [a] => 345
    [b] => 12q3
)
[root@DELL113 lee]# /usr/local/php/bin/php test.php -a 345 -b 12q3 -e 3322ff
Array
(
    [a] => 345
    [b] => 12q3
)


三、提示用户输入

 

复制代码代码如下:


<?php
/**
 * 提示用户输入,类似Python
 */
fwrite(STDOUT,'请输入您的博客名:');
echo '您输入的信息是:'.fgets(STDIN);


执行

 

复制代码代码如下:


[root@DELL113 lee]# /usr/local/php/bin/php test.php


请输入您的博客名:脚本之家 www.jb51.net
您输入的信息是:脚本之家 www.jb51.net
你也可以这么干,不让用户输入空信息

 

复制代码代码如下:


<?php
/**
 * 提示用户输入,类似Python
 */
 
$fs = true;
 
do{
oif($fs){
fwrite(STDOUT,'请输入您的博客名:');
$fs = false;
}else{
fwrite(STDOUT,'抱歉,博客名不能为空,请重新输入您的博客名:');
}
 
$name = trim(fgets(STDIN));
 
}while(!$name);
 
echo '您输入的信息是:'.$name."\r\n";


执行

 

复制代码代码如下:


[root@DELL113 lee]# /usr/local/php/bin/php test.php 
请输入您的博客名:
抱歉,博客名不能为空,请重新输入您的博客名:脚本之家
您输入的信息是:脚本之家

 

mac 关于brew

安装方法:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

卸载方法

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
在CTF(Capture The Flag)比赛中,参数传递是解决题目时常见的操作之一,尤其是在Web类、PWN类以及逆向工程类题目中。掌握高效的参数传递方法和技巧,有助于快速完成漏洞利用、命令执行或服务交互等任务。 ### 参数传递的常见方法 1. **URL参数传递** 在Web类题目中,通常通过GET请求传递参数。例如,在URL中使用`?key=value`的形式传递数据: ``` http://example.com/?id=1 ``` 这种方式常用于SQL注入、文件包含、命令执行等漏洞场景[^1]。 2. **POST请求传递参数** 通过HTTP POST请求的Body部分传递参数,适用于需要隐藏参数内容或传输大量数据的情况。在CTF中,常用于上传恶意表单、绕过前端验证等目的。 3. **Cookie与Session参数** 利用Cookie或Session机制传递参数,可以实现身份伪造、会话劫持等攻击。例如修改`PHPSESSID`来接管用户会话。 4. **命令行参数传递** 在PWN类题目中,程序可能接受命令行参数作为输入。选手可以通过构造特定参数触发栈溢出、格式化字符串漏洞等。例如: ```bash ./vulnerable_program "malicious_input" ``` 5. **环境变量传递参数** 某些情况下,程序会读取环境变量中的值作为参数。这在Linux PWN题中可用于控制程序流程或注入shellcode。 6. **函数调用参数传递** 在代码审计类题目中,如PHP的`call_user_func_array()`函数允许动态调用回调函数并传入参数数组,常用于反序列化漏洞中的命令执行链构造[^4]。 ### 参数传递的进阶技巧 - **编码绕过过滤器** 使用Base64、Hex、Unicode等编码方式绕过WAF或输入检查机制。例如将命令`cat flag`编码为十六进制: ```python import binascii hex_data = binascii.hexlify(b'cat flag').decode() print(hex_data) # 输出:63617420666c6167 ``` - **参数拼接与组合攻击** 将多个参数拼接成最终的有效载荷,例如结合`eval()`函数与参数注入实现远程代码执行。 - **盲注与延时注入** 当无法直接获取输出时,使用布尔盲注或时间延迟技术传递参数并判断结果。例如通过`sleep()`函数控制响应时间。 - **反序列化中的参数控制** 在PHP或Python等语言的反序列化过程中,通过构造特定对象结构控制程序逻辑,实现任意代码执行或命令调用。 - **ROP链构造与参数设置** 在PWN题中,使用Return Oriented Programming(ROP)技术构造调用链,并精确控制寄存器或栈中的参数值以达成系统调用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值