一些简单的前置知识

用于命令执行的常用函数

system

exec

passthru

shell_exec

一些常见的绕过方式

Windows支持:

|直接执行后面的语句 ping 127.0.0.1|whoami
||前面出错执行后面的 ,前面为假 ping 2||whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

%0a 回车

%1a 作为.bat文件的命令分隔符

Linux支持:

;前面的执行完执行后面的 ping 127.0.0.1;whoami
|管道符,显示后面的执行结果 ping 127.0.0.1|whoami
||当前面的执行出错时执行后面的 ping 1||whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

%0a 回车

%0d 换行

过滤空格绕过

使用<代替空格

使用${IFS}代替空格

IFS变量的相关信息:

  • Shell把变量IFS内的每一个字符都当做是一个分割符(delimeter),用这些字符作为每一个字段的结束符来进行分割。
  • 如果IFS没有设置,或者IFS的值被设置为"\t\n"(space, tab和 newline),那么操作对象的开始和结束处的所有space, tab和newline序列都将被忽略,但是操作对象中间的space, tab和newline序列会作为界定符工作。
  • 如果IFS值不是默认值(例如程序中对IFS进行设置过),只有出现在IFS内的空白字符(可能是space, tab或newline中的一个或几个)才会在单词开始和结束处被忽略,这里说的是单词,而不是整个操作对象。
  • IFS内的非空白字符多个连续出现时,每个非空白字符会被当做单独的分隔符看待,但是多个连续的空白字符会被当做一个分隔符看待。
  • 如果IFS为空(“null”),则不会进行单词分割。

使用$IFS代替空格

过滤斜杠/绕过

使用${HOME:0:1}代替

posted @ 2024-05-08 14:08  Hsad  阅读(17)  评论(0)    收藏  举报