网络安全-Web应用安全3
Web应用安全
RCE
RCE概念
远程命令/代码执行
- 全称Remote Command/CodeExecute,远程命令/代码执行
- 通过构造特殊字符串,将数据提交至Web应用程序,并利用该方式执行外部程序或系统命令实施攻击
RCE的原理
- Web应用程序使用了一些可以执行系统命令或代码的函数,而且对用户提交的数据过滤不严格,导致黑客利用服务器可以执行命令或代码
eval()函数
语法
- eval(string $code):mixed
说明
- 将字符串作为PHP语句来执行
- 该字符串必须是合法的PHP代码,且以分号作为结束
1 |
|
assert()函数
语法
- assert(mixed $assertion, string $description =?):bool
说明
- 检查一个断言是否为 false
- 如果assertion 是字符串,它将会被assert()当做 PHP代码来执行
1 |
|
preg_replace()函数
- 语法
- preg_replace(mixed $pattern , mixed $replacement , mixed $subject [, int $limit=-1[,int &$count]]):mixed
- 说明
- 搜索subject中匹配pattern的部分,以replacement进行替换
- 5.5.版本后,传入”e”修饰符时,会产生一个E_DEPRECATED错误
- 7.0.0不再支持/e修饰符,请用 preg_replace_callback()代替
- 案例
1 |
|
exec()
语法
- exec(string $command, array &$output = ?, int &$return_var= ?):string
说明
- 执行command 参数所指定的命令
1 |
|
类似函数
- string exec(string $command [, array &$output [, int &$return_var ]])
- string shell_exec(string $cmd)
- string escapeshellcmd(string $command)
- void passthru(string $command [, int &$return_var ])
- 反引号
1 |
|
命令连接符
命令连接符
符号 | 说明 |
---|---|
cmd1 && cmd2 | 执行cmd1,执行成功后执行cmd2,否则不执行cmd2 |
cmd1 & cmd2 | 表示先执行cmd1,不管是否成功都执行cmd2 |
cmd1 || cmd2 | 表示先执行cmd1,执行失败后执行cmd2 |
cmd1 | cmd2 | 将cmd1的输出作为cmd2的输入,只打印cmd2执行的结果 |
RCE防御
- 尽量避免使用危险函数
- 对用户输入严格检查和过滤
PHP文件上传漏洞
文件上传
- 文件上传是Web应用的常见功能,允许用户上传图片、视频及其他文件类型文件
- 向用户提供的功能越多,Web应用受攻击的风险就越大
文件上传漏洞
上传文件时,如果未对上传的文件进行严格的验证和过滤,攻击者就可以上传恶意的脚本文件,例如: php、jsp、asp以及aspx等
恶意上传行为可能导致网站甚至整个服务器被控制恶意的脚本文件,又被称为WebShell
upload-labs,文件上传漏洞靶场
- php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场
- 下载地址: https://github.com/Tj1ngwe1/upload-labs
Pass-01前端限制与绕过
本pass在客户端使用js对不合法图片进行检查!
绕过方法
- 在浏览器的调试窗口修改表单的onsubmit事件
Pass-02 MIME限制与绕过
本pass在服务端对数据包的MIME进行检查!
MIME(Multipurpose Internet Mail Extensions)
- 多用途互联网邮件扩展类型
- 是一个互联网标准,扩展了电子邮件标准,可以支持更多的文件格式
常见的MIME类型
扩展名 | 类型/子类型 |
---|---|
doc | application/msword |
gif | image/gif |
html | text/html |
jpeg | image/jpeg |
jpg | image/jpeg |
application/pdf |
本pass在服务端对数据包的MIME进行检查!
- $_FILES[[‘upload_file’][‘type’]是从请求包的Content-Type中读取
绕过方法
- 通过代理burpsuite抓包修改文件的MIME类型将红色字体部分,换成image/jpeg
- 点击forward,将修改后的请求发送给服务器
Pass-03黑名单限制与绕过
本pass禁止上传.asp|.aspx|.php|.jsp后缀文件!
绕过方法
- 将文件后缀由php修改为phtml、phps、php3均可
- 另外需要修改Apache的配置文件,增加下列项
1 | AddType application/x-httpd-php .php .phtml .php3 .phps |
6、Pass-04黑名单限制与绕过
本pass禁止上传.php|.php5|.php4|.php3|.php2|.php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|.pHp1|.Html|.Htm|.pHtml|.jsp|.jspa |.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx |.jSpa |.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa .|asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.swfl|.swf 后缀文件!
绕过方法
- 没有过滤htaccess后缀,我们可以构建一个htaccess配置文件,让所有格式文件都解析为php。
- .htaccess语句
1 | SetHandler application/x-httpd-php |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nicopilot!