[BUUCTF 2018]Online Tool WP(未完)
进去就是一个代码审计
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if(!isset($_GET['host'])) { highlight_file(__FILE__); } else { $host = $_GET['host']; $host = escapeshellarg($host); $host = escapeshellcmd($host); $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); chdir($sandbox); //chdir()是改变工作目录 echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); }
里面有两个函数escapeshellarg()和escapeshellcmd(),这两个函数分别是对即将传入shell函数的命令的参数和完整语句进行安全处理
shell 函数包含 exec(), system() 执行运算符 。
escapeshellarg() 将给字符串左右增加单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。(不过我本地试了一下是增加了双引号)
escapeshellarg()的用法:
<?php system('ls '.escapeshellarg($dir)); ?>
可见escapeshellarg()一般代码是对命令的参数进行过滤
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。 反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\
, \x0A
和 \xFF
。 '
和 "
仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 %
和 !
字符都会被空格代替。
知识点:
1.nmap写文件命令:-oG a.php
2.escapeshellarg()和escapeshellcmdI()函数,我在windows上测试的结果和网上说的不太一样,之后在kali里试试。