首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检索与查询中的表不同的表中的所有数据的SQL注入

检索与查询中的表不同的表中的所有数据的SQL注入
EN

Stack Overflow用户
提问于 2012-10-17 22:07:10
回答 4查看 12.1K关注 0票数 0

我有一个PHP系统,可以在windows XP上的虚拟服务器"Wamp“上运行。我正在尝试使用SQL注入技术来检测我系统中的漏洞。

我已经尝试了基本的注入方法,比如“‘OR 1=1”,我发现了几个问题。然而,我被以下问题卡住了:

我的系统中有下面这行代码:

代码语言:javascript
运行
复制
$sql2="SELECT * FROM $table1 WHERE question_id='$id'";

在这行代码之后,我执行查询并显示如下结果:

代码语言:javascript
运行
复制
$result2=mysql_query($sql2);

while($rows=mysql_fetch_array($result2)){
?>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td bgcolor="#F8F7F1"><strong>ID</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><?php echo $rows['a_id']; ?></td>
</tr>
<tr>
.......
.......

请注意,变量"$id“的值是作为_GET[]参数从上一页发送过来的。

我的问题是,我正在尝试注入从上一页发送的参数id=2?(2是一个例子)。下面是一个例子:

代码语言:javascript
运行
复制
http://localhost/PHPforum/view_topic.php?id=2

我正在寻找一种方法来注入变量"$id“的值,以便使它显示不同表(table2)的数据,而不是table1。我可以同时显示两个表,但我需要通过注入显示table2数据。

我怎么可能做到这一点?

再说一次,我没有试图攻击任何系统,这是我拥有的一个系统,我正在试图检测它的漏洞。

EN

回答 4

Stack Overflow用户

发布于 2012-10-18 02:12:57

仅从SQL注入漏洞的概念证明开始,您就需要首先确定注入发生的上下文。尽管在大多数情况下,注入是在WHERE子句中进行的,但也有其他可能的位置。

接下来,您将尝试确定所选的列数。因为这是MySQL,所以您可以使用ORDER BY x并指定要对结果进行排序的列号。所以从2' ORDER BY 1 --2' ORDER BY 2 --开始,直到其中一个失败。

然后,您可以将原始结果集与您使用UNION SELECT注入的另一个结果集连接起来,如下所示:

代码语言:javascript
运行
复制
' UNION SELECT 1, 2, 3, …, n --

这只是一个简单的测试,应该只显示注入的结果集。这些数字给出了哪些值反映在何处的提示。从这里开始,您可以从其他表、视图或其他数据源中选择任何其他值。对于哪些信息是有价值的,一个好的提示可以给你pentestmonkey’s

票数 2
EN

Stack Overflow用户

发布于 2012-10-17 22:13:02

通常的方法是使用UNION合并来自两个不同查询的结果。您可能需要花点时间才能获得正确的列数和字符集,以允许查询通过。

web上有几个很好的cheat sheets,可以作为攻击载体的参考。

您真的应该考虑使用允许您使用参数化查询(如准备好的语句)来查询数据库的库,而不是自己构建(和转义)查询。PDO和mysqli都可用于PHP,并将允许准备好的语句。

票数 1
EN

Stack Overflow用户

发布于 2012-10-17 22:18:30

这在技术上是可行的,但应用程序逻辑可能不会显示不同表的值:

代码语言:javascript
运行
复制
http://localhost/PHPforum/view_topic.php?id=2;select * from table2

如果您知道所有的表名和字段名,您可以这样做:

代码语言:javascript
运行
复制
http://localhost/PHPforum/view_topic.php?id=2;select table2id as table1id, table2value as table1value, .. from table2

您可能需要对分号和空格进行urlencode,这样它才能正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12936208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档