KoreanHackerTeam
Moderator
CTF 中的命令执行漏洞相关
由于没有针对代码中可执行的特殊函数入口做过滤,导致用户可以提交恶意语句,并交由服务器端执行。 代码 / 命令注入攻击中 Web 服务器没有过滤类似 system()、eval()、exec() 等函数的传入参数是该漏洞攻击成功的最主要原因。
1 代码注入
1.1 相关函数
1.1.1 eval
코드:
|
코드:
|
1.1.2 assert

1.1.3 call_user_func

可以使用
is_callable
函数查看是否可以被回调1.1.4 call_user_func_array

1.1.5 create_function

1.1.6 preg_replace

搜索
subject
中匹配 pattern
的部分, 以 replacement
或其执行结果进行替换。1.1.7 array_map

payload:
url?a=assert&b=phpinfo()
1.1.8 usort

Payload:
url?1[]=phpinfo()&1[]=123&2=assert
1.1.9 uasort

1.1.10 ${php 代码}

1.2 DEMO
코드:
|
코드:
|
url?price=123;}phpinfo();/*
2 命令注入
2.1 相关函数
2.1.1 system

2.1.2 exec

2.1.3 passthru

2.1.4 shell_exec

2.1.5 `` 运算符

2.1.6 ob_start

2.2 命令执行的绕过
2.2.1 命令执行的分隔符
例如:
코드:
|
코드:
|
- 换行符 %0a
- 回车符 %0d
- 连续指令 ;
- 后台进程 &
- 管道符 |
- 逻辑 ||、&&
2.2.2 命令执行的分隔符
- < 符号
- $IFS
- ${IFS}
- $IFS$9
- %09 用于url传递
- ${9}
2.2.3 其它 Tips
2.2.3.1 命令拼接
코드:
|
코드:
|
2.2.3.2 base64 编码
코드:
|
코드:
|
2.2.3.3 substr string pos len
该表达式是从 string 中取出从 pos 位置开始长度为 len 的子字符串。如果 pos 或 len 为非正整数时,将返回空字符串。echo “${PATH:0:1}” -> /

코드:
|
코드:
|

2.3 命令无回显的情况
2.3.1 判断
- 延时
- ls|sleep(3)
- HTTP 请求
- DNS 请求
- ceye.io
2.3.2 利用
- 写 shell(直接写入、外部下载)
- http / dns 等方式带出
2.3.3 DEMO
코드:
|
코드:
|
코드:
|
코드:
|
cat 1.txt|sed s//[[:space:]]//g
是去除空格的作用