|
SELECT * FROM article WHERE articleid='$id' UNION SELECT * FROM user …… |
由于这个代码是有单引号包含着变量的,我们现在提交:
|
http://127.0.0.1/injection/show.php?id=1' union select 1,username,password from user/* |
按道理说,应该显示用户表的username、password两个字段的内容才对啊,怎么正常显示文章呢?如图:

其实,我们提交的articleid=1是article表里存在的,执行结果就是真了,自然返回前面SELECT的结果,当我们提交空的值或者提交一个不存在的值,就会蹦出我们想要的东西:
|
http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user/* |
如图:

现在就在字段相对应的地方显示出我们所要的内容。如果还不清楚思路以及具体的应用,后面还会讲到一些高级的技巧。
三、导出文件
这个是比较容易构造但又有一定限制的技术,我们经常可以看见以下的SQL语句:
|
select * from table into outfile 'c:/file.txt' |
但这样的语句,一般很少用在程序里,有谁会把自己的数据导出呢?除非是备份,但我也没有见过这种备份法。所以我们要自己构造,但必须有下面的前提条件:
必须导出到能访问的目录,这样才能下载。 能访问的目录必须要有可写的权限,否则导出会失败。 确保硬盘有足够的容量能容下导出的数据,这个很少见。 确保要已经存在相同的文件名,会导致导出失败,并提示:“File 'c:/file.txt' already exists”,这样可以防止数据库表和文件例如/etc/passwd被破坏。我们继续用上面的user.php和show.php两个文件举例,如果一个一个用户猜解实在是太慢了,如果对方的密码或者其他敏感信息很复杂,又不会写Exploit,要猜到什么时候啊?来点大范围的,直接导出全部数据好了。user.php文件的查询语句,我们按照into outfile的标准格式,注入成下面的语句就能导出我们需要的信息了:







