• 【Web】入门题(二)


     

     (一)PHP代码审计

    1、题目信息:

    描  述: WarmUp,PHP代码审计

    2、解题思路:

    打开靶机链接以后,是一张图片。查看源代码:

     看到源码页面,就知道是代码审计了,按照代码逻辑解题 

     3、解题过程:

     1 <?php
     2     highlight_file(__FILE__);
     3     class emmm
     4     {
     5         public static function checkFile(&$page)
     6         {
     7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
     8             if (! isset($page) || !is_string($page)) {
     9                 echo "you can't see it";
    10                 return false;
    11             }
    12 
    13             if (in_array($page, $whitelist)) {
    14                 return true;
    15             }
    16 
    17             $_page = mb_substr(
    18                 $page,
    19                 0,
    20                 mb_strpos($page . '?', '?')
    21             );
    22             if (in_array($_page, $whitelist)) {
    23                 return true;
    24             }
    25 
    26             $_page = urldecode($page);
    27             $_page = mb_substr(
    28                 $_page,
    29                 0,
    30                 mb_strpos($_page . '?', '?')
    31             );
    32             if (in_array($_page, $whitelist)) {
    33                 return true;
    34             }
    35             echo "you can't see it";
    36             return false;
    37         }
    38     }
    39 
    40     if (! empty($_REQUEST['file'])
    41         && is_string($_REQUEST['file'])
    42         && emmm::checkFile($_REQUEST['file'])
    43     ) {
    44         include $_REQUEST['file'];
    45         exit;
    46     } else {
    47         echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    48     }  
    49 ?>

    查看代码,首先判断请求是否存在file字符串参数,然后将file参数放入emmm checkFile函数中进行判断。

    当checkFile函数返回true后,通过include函数来加载file参数中的页面。

    那么思路就比较明确了,file参数必须是在白名单内的:source或hint。那先试下hint:

     看来flag在ffffllllaaaagggg这个文件中。

    又知道include是目录包含,那么只要绕过白名单检测并进行目录跳转就可以了:

    checkFile函数$_page取file参数第一个问号之前的字段检查文件名是否在白名单内于是构造file参数为hint.php?/../../../../../ffffllllaaaagggg

    hint.php?/被当作目录,之后上跳目录就好了

     4、思路总结

    include可以跨目录包含文件

    (二)SQL注入

    题目:

    SQL注入

    解题:

    启动靶机,是一个Web登录页面

    简单输入单引号试下:

    看报错是MariaDB直接没有做任何过滤,那么简单了,用通用的恒等式再加上mariaDB的注释符组合一下:

    成功登录

     (三)HaveFun——代码审计

    打开靶机,发现是一个动态页面:

    看下源码:

     代码很简单,传入一个cat的参数,并且让值等于dog就可以了,试一下:

    (四)php代码审计

    题目:

    ACTF 2020 新生赛 include 1

    解题:

    打开靶机,点击tips,发现跳转到新的页面,url中include存在文件包含漏洞:

    但是只有一个flag.php,没有任何提示。

    猜测可能是被注释掉了。

    因为文件包含读取的是文件,而不是文件源码,内容里面是php代码的话就会执行。

    尝试使用php伪协议来过滤读取,使其中的php代码失效

    php://filter/read=convert.base64-encode/resource=xxx.php

    得到一串base64字符串,解码得出flag:

    (五)【强网杯 2019】随便注1

    题目:

    简单试了下,输入单引号出现报错,可以看出来是字符串注入,那么单引号闭合后输入恒等式:

    一共三行数据,这里试了下union联合查询查其他字段,发现有waf过滤了select等关键字

    尝试了注释、大小写等绕过均无效。

    那就先尝试查一下其他内容:

    查看数据库和表:

    6个数据库,两张表,看下第一个表:

    两个字段,其中有flag。再查了第二个表就能得出words表的data列中就是实际表单查询的用户名和id

    将表1919810931114514名字改为words,flag列名字改为id,那么就能得到flag的内容了 

    修改表名(将表名user改为users)
    alter table user rename to users;
    
    修改列名(将字段名username改为name)
    alter table users change uesrname name varchar(30);

    最终语句构造如下:

    '; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

     然后使用1' or 1=1#即可查询出flag

     
  • 相关阅读:
    chrome 浏览器设置useragent为微信浏览器
    js 16进制颜色和RGBA颜色互转
    json parse 大数精度丢失
    taro 小程序react 搜索高亮关键字
    sourcetree 配置 openssh
    一次性卸载npm本地包(node_modules)依赖
    微信小程序订阅消息开发总结
    微信小程序请求设置权限
    taro
    浅谈JS之AJAX
  • 原文地址:https://www.cnblogs.com/Shepherdzhao/p/15660648.html
Copyright © 2020-2023  润新知