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直接换成*就好了
/???/??? /???/???/????/*  

那 =?><?=`/???/??? /???/???/????/*`;?>

为什么要用`而不是',浏览器会进行编码破坏掉了',而`可以作为'使用但是不会被编码

最新文章

  1. 技术英文单词贴--I
  2. fmt-重新格式化段落
  3. c语言作业
  4. 转:VS2010调试NUnit测试项目 (Running or debugging NUnit tests from Visual Studio without any extensions)
  5. PL/pgSQL学习笔记之十
  6. SCCM 2007 R2部署、操作详解系列之概念
  7. 淘宝 印风 UDF
  8. Spring Autowiring by Type
  9. vim 编辑器 打开GB2312、GBK文件乱码解决方法
  10. 原 Debian设置开机自动启动与关闭
  11. Java之循环输出等腰三角形
  12. 驱动: oops
  13. hdu 4704 同余定理+普通快速幂
  14. tp框架中的静态验证
  15. python通过getopt模块获取执行命令参数
  16. hackerrank DFS Edges
  17. backbond Model方法(set)
  18. 第十一章 IO流
  19. 《深入理解java虚拟机》第六章 类文件结构
  20. 【微信小程序】tabBar的显示问题

热门文章

  1. 平时对ES6的一些总结
  2. Android(java)学习笔记90:TextView 添加超链接(两种实现方式)
  3. Gym - 100676H Capital City(边强连通分量 + 树的直径)
  4. python request下载文件时,显示进度以及网速
  5. python剑指offer系列二叉树中和为某一值的路径
  6. 如何让图片相对于上层DIV始终保持水平、垂直都居中
  7. 【思维题 经典模型】cf632F. Magic Matrix
  8. python之斐波纳契数列
  9. thinkcmf5 iis+php重写配置
  10. JZOJ 4742. 单峰