安恒杯月赛 babypass getshell不用英文字母和数字
2024-08-27 15:01:43
BABYBYPASS
先贴代码:
①限制字符长度35个 ②不能使用英文字母和数字和 _ $
最后提示有个getFlag()函数,从这个函数入手。
我们的第一思路是直接eval执行getFlag函数,但是这里过滤了 _ $ 无法通过异或的方法构造变量,下一篇博客有这样的题目 所以最终这道题目思路是通过eval函数执行系统命令,查看index.php。
用到的知识点
①linux通配符 * ? ②php短标签<??> ③linux一切皆文件 ④apache默认存放网页路径
linux通配符
*代表任意个字符,?代表一个字符
php短标签
可以用<?='命令'?>。这样就不用写绕过了这部分的英文字母
一切皆文件
我们linux用到的命令例如ls,cat等命令都是文件,存放于/bin目录下面,也可以这样使用/bin/cat /bin/ls。
apache默认存放网页的路径
/var/www/html ,现在有很多一键安装的面板wdlinux和phpstudy等目录会改变。
一步一步分析
①现在假设代码是这样的(本地试了下)没有任何过滤
index.php
flag.php
这种情况我们直接
?code=?><?php getFlag()?>
或者
code=?><?php echo `/bin/cat /var/www/html/index.php` ?>(要查看源代码才能显示代码)
也可以用短标签试一下:
?code=?><?=getFlag()?> code=?><?=`/bin/cat /var/www/html/index.php`; ?>
细节:
为什么code=?>,为什么要先闭合呢?
eval里的参数不让直接传<? php,
说是得先离开php模式后进入那就 ?> <? php就可以了
②现在代码做了过滤,过滤了英文数字_$和长度,就是原来的题目。
因为执行的系统命令,我们可以用linux通配符
/bin/cat /var/www/html/index.php>变成 /???/??? /???/???/????/????????? 但这样会超过长度,所有最后的index.php直接换成*就好了 /???/??? /???/???/????/*
那 =?><?=`/???/??? /???/???/????/*`;?>
为什么要用`而不是',浏览器会进行编码破坏掉了',而`可以作为'使用但是不会被编码
最新文章
- 技术英文单词贴--I
- fmt-重新格式化段落
- c语言作业
- 转:VS2010调试NUnit测试项目 (Running or debugging NUnit tests from Visual Studio without any extensions)
- PL/pgSQL学习笔记之十
- SCCM 2007 R2部署、操作详解系列之概念
- 淘宝 印风 UDF
- Spring Autowiring by Type
- vim 编辑器 打开GB2312、GBK文件乱码解决方法
- 原 Debian设置开机自动启动与关闭
- Java之循环输出等腰三角形
- 驱动: oops
- hdu 4704 同余定理+普通快速幂
- tp框架中的静态验证
- python通过getopt模块获取执行命令参数
- hackerrank DFS Edges
- backbond Model方法(set)
- 第十一章 IO流
- 《深入理解java虚拟机》第六章 类文件结构
- 【微信小程序】tabBar的显示问题