天天看點

appScan常見高危漏洞,走過的坑啊

appScan常見高危漏洞,走過的坑啊

一、SQL 盲注(SQL注入)

1、 過濾特殊字元

2、使用預編譯,不要拼接sql

3、對sql執行部分異常進行捕獲,不要抛出不同的異常,以免被推測有漏洞

4、可能appscan誤報

誤報解決:

(1)、把錯誤的頁面單獨反複測試

(2)、把AppScan掃描的線程數改成1(預設10)

二、存儲的跨站點腳本編制(xss漏洞)

1、對存儲的内容進行xss過濾。

2、删除存儲的腳本。

三、跨站腳本編制(xss漏洞)

1、通過fliter對參數進行過濾,過濾一般

package com.system.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class XssFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest)request);
        chain.doFilter(xssRequest, response);
    }

    @Override
    public void destroy() {
        
    }

}
           
package com.system.filter;


import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringEscapeUtils;
import org.owasp.validator.html.AntiSamy;
import org.owasp.validator.html.CleanResults;
import org.owasp.validator.html.Policy;
import org.owasp.validator.html.PolicyException;
import org.owasp.validator.html.ScanException;

import com.system.utils.StringUtils;

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
    //AntiSamy使用的政策檔案
    private static Policy policy = null;
    static {
        //指定政策檔案,政策檔案記得放在classpath下,檔案在jar包裡面可以複制,也可在網上下載下傳
        String antiSamyPath = XssHttpServletRequestWrapper.class.getClassLoader().getResource("antisamy-ebay.xml").getFile();
        //String antiSamyPath = "E:\\ecpliseSpace\\newsi\\eip-si\\eip-si-aop\\src\\main\\resources\\antisamy-ebay.xml";
        if(antiSamyPath.startsWith("file")){
            antiSamyPath = antiSamyPath.substring(6);
        }
        try {
            policy = Policy.getInstance(antiSamyPath);
        } catch (PolicyException e) {
            e.printStackTrace();
        }
    }
    public XssHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }
    /**
     * @desc Header為空直接傳回,不然進行XSS清洗
     *
     */
    @Override
    public String getHeader(String name) {
        String value = super.getHeader(name);
        if(StringUtils.isEmpty(value)){
            return value;
        }
        else{
            String newValue = cleanXSS(value);
            return newValue;
        }
    }
    /**
     * @desc Parameter為空直接傳回,不然進行XSS清洗
     */
    @Override
    public String getParameter(String name) {
        String value = super.getParameter(name);
        if(StringUtils.isEmpty(value)){
            return value;
        }
        else{
            value = cleanXSS(value);
            return value;
        }
    }
    /**
     * @desc 對使用者輸入的參數值進行XSS清洗
     *
     */
    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if (values != null) {
            int length = values.length;
            String[] escapseValues = new String[length];
            for (int i = 0; i < length; i++) {
                escapseValues[i] = cleanXSS(values[i]);
            }
            return escapseValues;
        }
        return super.getParameterValues(name);
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public Map<String,String[]> getParameterMap(){
        Map<String,String[]> request_map = super.getParameterMap();
        Iterator iterator = request_map.entrySet().iterator();
        System.out.println("request_map"+request_map.size());
        while(iterator.hasNext()){
            Map.Entry me = (Map.Entry)iterator.next();
            //System.out.println(me.getKey()+":");
            String[] values = (String[])me.getValue();
            for(int i = 0 ; i < values.length ; i++){
                System.out.println(values[i]);
                values[i] = cleanXSS(values[i]);
            }
        }
        return request_map;
    }
    /**
     * @desc AntiSamy清洗資料
     *
     */
    private String cleanXSS(String taintedHTML) {
        try{
            AntiSamy antiSamy = new AntiSamy();
            final CleanResults cr = antiSamy.scan(taintedHTML,policy);
            //AntiSamy會把“&nbsp;”轉換成亂碼,把雙引号轉換成"&quot;" 先将&nbsp;的亂碼替換為空,雙引号的亂碼替換為雙引号
            String str = StringEscapeUtils.unescapeHtml4(cr.getCleanHTML());
            str = str.replaceAll(antiSamy.scan("&nbsp;",policy).getCleanHTML(),"");
            str = str.replaceAll(antiSamy.scan("\"",policy).getCleanHTML(),"\"");
            /**下面是我根據appScan測試出來的特俗字元串,來進行單獨過濾的*/
            str = str.replaceAll("alert", "xsszh");
            str = str.replaceAll("onmouseover", "xsszh");
            str = str.replaceAll("onmouseover", "xsszh");
            str = str.replaceAll("eval", "xsszh");
            str = str.replaceAll(".source", "xsszh");
            str = str.replaceAll("window", "xsszh");
            str = str.replaceAll("font-family", "xsszh");
            str = str.replaceAll("expression", "xsszh");
            str = str.replaceAll("location", "xsszh");
            str = str.replaceAll("style", "xsszh");
            return str;
        }catch( ScanException e) {
            e.printStackTrace();
        }catch( PolicyException e) {
            e.printStackTrace();
        }
        return taintedHTML;
    }

}
           

(3)、配置web.xml

<filter>
        <filter-name>xssFilter</filter-name>
        <filter-class>com.ustcinfo.ishare.eip.basic.system.filter.XssFilter</filter-class>
    </filter>
     <filter-mapping>
      <filter-name>xssFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
           

appscan xss注入樣例:

(1)、οnmοuseοver=“alert(119)”

(2)、

(5)、+alert(19)+

(6)、“style=fontfamily:expression(eval(/ale/.source+/rt/.source+/(288)/.source))!(最變态的一種)

(7)、還有會把alert放在alert中間,如alalertert這種。

(8)、οnfοcus=x=’\x61\x6c\x65\x72\x74\x28\x31\x29’;new Function(x)()//

(9)、”+[window[‘location’]=’\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x2815\x29’]+"

四、已解密的登入請求

這個嘗試了很多辦法,如對密碼參數進行加密處理、改變密碼參數,不出現password,強制使用post請求,最後是在nginx配置https

五、查詢中的密碼參數

将參數名稱改成普通的,不要有密碼之類的字樣,https也沒有能規避這個漏洞。

六、其他連結型漏洞

可以根據連結提示,對響應連結進行攔截過濾即可

注:部分sql注入,nosql注入可能是在發送參數,背景報錯引起的,隻要在背景捕獲異常,不讓它抛出,appscan可能就不會推理這是個漏洞。

繼續閱讀