DVWA之SQL注入代码审计
目錄
Low
Medium
High
Impossible
Low
前端包含了一個$html的變量,查看變量所在文件
如下,可見對傳入的參數未做任何的過濾
?所以存在字符串注入,輸入1'直接報錯
Medium
前端代碼如下
?$number_of_rows所在文件為medium.php中,select 標簽根據查詢的users表中的行數來決定下拉的數量
接著引用了$html變量,其所在位置也為medium.php
?可見這里也沒有做任何的過濾,只是相較于低級,這里的變量沒有引號包裹而已,即不為字符型輸入
?所以payload還是差不多,提交 and sleep(5)成功延時5秒
High
如下,需要我們點擊鏈接然后會彈窗,彈窗的窗口中有個form表單,可以進行數據的提交
觀察前端頁面如下
跟蹤popUp函數如下
window.open(URL,name,specs,replace)?用于打開一個新的瀏覽器窗口或查找一個已命名的窗口。
| URL | 可選。打開指定的頁面的URL。如果沒有指定URL,打開一個新的空白窗口 |
window.open將“session-input.php”所在頁面url進行打開,?繼續跟蹤“session-input.php”頁面。該頁面主頁的功能就是將'表單傳送的post['id']值賦值給session['id']
接著繼續查找session['id']所在地方,即high.php,將獲取的值直接賦值給id然后帶入到語句中進行查詢,也未進行任何的過濾。所以直接構造payload
輸入 1' and sleep(5) or '? 成功延時
high可以防止一般的sqlmap注入,因為sqlmap在注入過程中,無法在查詢提交頁面上獲取查詢的結果,沒有了反饋,也就沒辦法進一步注入。
Impossible
如下,代碼進行了雙重限制,首先判斷傳入的參數是否為純數字,如果不是則什么都不執行。接著采用了MySQL pdo預處理技術,劃清了代碼與數據的界限,有效防御SQL注入。
MySQL pdo預處理能防止sql注入的原因:
1、先看預處理的語法
$pdo->prepare('select * from biao1 where id=:id');
$pdo->execute([':id'=>4]);
2、語句一,服務器發送一條sql給mysql服務器,mysql服務器會解析這條sql。
語句二,服務器發送一條sql給mysql服務器,mysql服務器不會解析這條sql,只會把execute的參數當做純參數賦值給語句一。哪怕參數中有sql命令也不會被執行,從而實現防治sql注入。
即就算參數中存在sql語句它也不會執行,因為它將整個傳入的參數僅作為參數值而已,所以不會構成sql語句拼接。
總結
以上是生活随笔為你收集整理的DVWA之SQL注入代码审计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [USACO10DEC] Treasur
- 下一篇: java 反射 获取成员_java 反射