pdo - mysql 简单注入疑问
迷茫
迷茫 2017-04-17 15:28:49
0
3
732


mysql数据库表user结构如图,php版本5.4.31

$uid="1'; select * FROM user;";

直接用:

$result=mysql_query("select * from user where uid='$uid' ");

mysql_error()显示

`You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * FROM user;'' at line 1`

和用pdo查询:

$sql="select * from user where uid='$uid' ";
$res=$pdo->query($sql);

显示$res是空

请问大神我构造的mysql注入语句是不是有错...
我主要目的是想测试不同的mysql注入语句,pdo_mysql的防护性

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(3)
大家讲道理

$uid="1'; select * FROM user;";這種聲明其實和你的測試沒關係,反而造成困擾,你可以直接測試
mysql_query("select * from user where uid=1; select * from user")。我沒深入研究過這個東西,但是你的兩個測試是等價的,都會被注入。

最簡單的注入問題範例是 $username = "It's test",然後被執行的時候變成 "select * from user where username='It's test",引發語法錯誤。而PDO等透過預處理來防止此類問題,如$pdo->query("select * from user where username=?", array("It's test"));此時會適當轉意起到防注入作用,但是像你的例子中直接$pdo->query($sql)這種用法,防護機制此時根本不會產生任何效果的。

大意如此,自己理解吧。

最近工作很忙,大部分邀請都只好忽略了,偶爾回答幾個也沒時間說太多,只能說抱歉了。

迷茫

mysql_query時,拼接的SQL語句是,是不合法的

select * from user where uid='1'; select * FROM user;'

想辦法把單獨的'閉合,改成下面的程式碼就可以了:

$uid="1'; select * FROM user where uid='";

PDO會自動轉義,查詢的以下語句,所以為空。

select * from user where uid='1\'; select * FROM user;'
迷茫

自己發現問題了:

直接使用$uid= "888' or '2=2";

整個user表的內容都爆出來了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!