命令注入&代码执行 - Web for pentester
简介:
- 命令执行漏洞原理
"& | ||" 在操作系统中会被是为命令连接符使用,用户通过浏览器提交执行命令,服务器端可能没有针对执行函数进行过滤,导致在没有指定绝对路径的情况下,就执行命令
- 代码执行漏洞原理
应用有时需要调用一些执行系统命令的函数,如php中的system、exec、shell_exec、passthru、popen、proc_popen等,
攻击者可能通过控制函数参数,拼接恶意命令,从而进行 命令执行攻击
- 两者区别:
命令执行漏洞是可以直接调用操作系统命令,代码执行漏洞是靠执行脚本代码调用操作系统命令
Web for pentester
虚拟机下载安装略
https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso
主要有如下功能
- Code injection (代码注入)
- Commands injection(命令行注入)
- XSS(跨站脚本)
- SQL injections(sql注入)
- File include(文件包含)
- LDAP attacks(LDAP攻击)
- File Upload(文件上传)
- XML attacks(XML攻击)
用ifconfig 查询ip

192.168.47.129
使用nmap查询靶机开放的端口

这里打开浏览器的80端口,进入练习

命令注入
Commands injection Example 1

后面加上 "|whoami" 成功

Commands injection Example 2

源码:这里/m多行匹配模式 这里第一行即127.0.0.1能匹配,用 %0a (换行符)输入相关命令

Commands injection Example 3

不能%0a绕过
只要不是ip型的 就会重定向

在BP可以看到代码还是执行了
但是如果正常操作 显示的内容 浏览器端是看不见的,但代码本身还是运行了
代码注入
Code injection example1


没有过滤任何内容
- " 用来闭合
- ;分割下一个命令
- // 在php中表示注释

Code injection example2
关键代码:

usort() 使用用户自定义的比较函数对数组进行排序。语法:usort(array,myfunction);
usort()经常与该功能create_function一起使用,以基于用户控制的信息动态生成"分类"功能。


Code injection example3
源代码:


源码中:参数base中是否匹配到pattern,有则替换成参数new
// /e修正符可以使preg_replace将replacement参数当作php代码执行 (php5.5以上就废弃了/e)

成功
Code injection example4
后端代码:

这里的assert函数和eval函数类似
- eval 参数是字符串
- assert 参数是表达式或者函数
尝试:
- 加单引号

- 再加.

- 再加单引号

- 将恶意代码加入


浙公网安备 33010602011771号