**Sql注入**
在下初次写博客,如有纰漏,请指出,感谢!
正文如下:
sql注入原理:
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。(我们输入的语句拼接原来的语句后进入数据库)。
注入类型:
1.数字型注入:当输入的参数为整型时,则有可能存在数字型注入漏洞。
判断数字型漏洞的 SQL 注入点:① 先在输入框中输入一个单引号 ’ eg:SELECT * FROM table WHERE id=1’--------页面异常
② 在输入框中输入 and 1 = 1 eg:SELECT * FROM table WHERE id=1 and 1 = 1-------页面正常
③ 在数据库中输入 and 1 = 2 eg:SELECT * FROM table WHERE id=1 and 1 = 2-----页面异常
2.字符型注入:当输入参数为字符串时,则可能存在字符型注入漏洞。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符型一般需要使用单引号来闭合。
判断字符型漏洞的 SQL 注入点:① 还是先输入单引号 admin’ 来测试
eg:SELECT * FROM table WHERE username = ‘admin’’-----页面异常。
② 输入:admin’ and 1 = 1 –
Eg:SELECT * FROM table WHERE username = ‘admin’ and 1 = 1 – —页面显示正确。
③ 输入:admin’ and 1 = 2 –
Eg:SELECT * FROM table WHERE username = ‘admin’ and 1 = 2 – --页面错误
3.其他类注入:
POST注入:注入字段在 POST 数据中
Cookie注入:注入字段在 Cookie 数据中
报错注入:利用了数据库的某些机制注入
延时注入:使用数据库延时特性注入
搜索注入:注入处为搜索的地方
base64注入:注入字符串需要经过 base64 加密…
工具注入:使用sqlmap,穿山甲,萝卜头等注入工具。
Sqlmap常用参数:
-u #注入点
-g 谷歌搜索
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p “page,id”)
-D “” #指定数据库名
-T “” #指定表名
-C “” #指定字段
-s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log” 恢复:-s “xx.log” –resume)
–columns #列出字段
–current-user #获取当前用户名称
–current-db #获取当前数据库名称
–users #列数据库所有用户
–passwords #数据库用户所有密码
–privileges #查看用户权限(–privileges -U root)
-U #指定数据库用户
–dbs #列出所有数据库
–tables -D “” #列出指定数据库中的表
–columns -T “user” -D “mysql” #列出mysql数据库中的user表的所有字段
–dump-all #列出所有数据库所有表
–exclude-sysdbs #只列出用户自己新建的数据库和表
–dump -T “” -D “” -C “” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
–dump -T “” -D “” –start 2 –top 4 # 列出指定数据库的表的2-4字段的数据
–dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft -u 指定一个url连接,url中必须有?xx=xx 才行(最常用的参数)例:-u “www.abc.com/index.php?id=1”
接下来我使用sqlmap进行一下实操。
试验环境:东塔网络安全学院实战靶场----数字型注入。
而我们的工具sqlmap(在kali中)
将目标URL放入配合-U就可以得到所需信息,如图
从这张图中,我们得到了信息有 8-columns等
接着,我们使用-tables获得表,如图从图中,我们了解到,我们所找的key在dotaxueyuan下的key。
接着,我们使用-dump 来显现key的值,如图
这样,我们就得到我们所需的key值了。
sql手注的一般流程:
1.判断注入点
2.判断字段数
3.判断回显点
4.查询相关内容
常用的语句:
select * from ‘’
where id=97 and(同时满足) or(做选择) username=面包
order by(根据指定的列排序)
limit(选择你需要的行列)0,1
union select(合并两张表,且两表列数或字段数必须相同)eg:select * from test union select * from bigfish
防注入:
1.严格的数据类型:在程序中判断数据类型(用is_numeric(),ctype_digit()等函数判断)
2.特殊字符转义:mysql中使用“\”转义
3.使用预编译语句;
4.架构技术;
5.储存过程(sql语句集)。