str_replace導致的注入問題匯總
- 2019 年 10 月 3 日
- 筆記
研究了下replace的注入安全問題。
一般sql注入的過濾方式就是引用addslashes函數進行過濾。
他會把注入的單引號轉換成’,把雙引號轉換成”,反斜杠會轉換成\等
寫一段php程式碼:
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <?php $x=$_GET['x']; $id=str_replace(addslashes($_GET['y']),'',addslashes($x)); echo "過濾後:".addslashes($x)."<br/>"; echo "replace替換繞過:".$id."<br/>"; $conn = mysql_connect('127.0.0.1','root','root');//連接mysql資料庫 mysql_select_db('test',$conn);//選擇$conn連接請求下的test資料庫名 $sql = "select * from user1 where id='$id'";//定義sql語句並組合變數id $result = mysql_query($sql);//執行sql語句並返回給變數result while($row = mysql_fetch_array($result)){//遍曆數組數據並顯示 echo "ID".$row['id']."</br>"; echo "用戶名".$row['name']."</br>"; } mysql_close($conn);//關閉資料庫連接 echo "<hr>"; echo "當前語句:"; echo $sql; ?> </body> </html>
發現是引用了addslashes函數的:
一個單引號或者雙引號直接被轉義,字元串注入到這裡基本上gg了。沒戲了。
addslashes的問題:
addslashes會把%00轉換成
addslashes會把單引號(‘)轉換成’
因為使用了str_replace函數,會替換那麼輸入%00′ 就被addslashes函數自動添加 ’,然後我們匹配0,就變成了\’再次轉換成’,單引號成功逃逸。
<?php echo str_replace("0",""," '") ?>