sql注入之靶场实操

Sql注入之靶场实操

1.首先用小皮打开靶场,演示操作用的是文章管理系统cms的源码

sql注入之靶场实操_第1张图片

2.可以用御剑扫描以下后台,但是因为我这边特殊原因,就假装我已经扫描了吧,得到了该网站的后台管理页面

3.因为我们是sql注入,通过注入的方式来获得他的账密,所以不去爆破他的弱口令。

4.我们随便点击两条新闻进行对比发现,他们除了url中【?id=33,?id=32】之外没有任何区别

sql注入之靶场实操_第2张图片

sql注入之靶场实操_第3张图片

所以由此可见,更改id参数网站会自动跳转页面

5.注入点判断

1.?id=35                 变换id参数+1/-1

2.?id=35’                 加单双引号判断是字符型还是数字型

sql注入之靶场实操_第4张图片

加了单引号后有明显报错,根据报错判断存在数字型注入(如果报错里面有数字,就是字符型,如果没有,就是数字型)

3.判断是否有布尔类型状态

sql注入之靶场实操_第5张图片

sql注入之靶场实操_第6张图片

and1=1(真)       and1=2(假)

两次页面相同,一般认为没有布尔类型状态,不同代表有布尔类型状态(页面是否正常与数据库是否报错是两个问题)

4.判断是否有延时注入

?id=35 and sleep(5)

            点开控制台,找到网络

sql注入之靶场实操_第7张图片

会发现后面的时间线是六秒钟,但是函数里是五秒,说明sleep()函数会对服务器响应造成影响

Ps:

1.如果页面+1/-1有变化,考虑联合注入

2.看看有没有报错,有报错就用报错注入,没有报错并没有回显就看是否有布尔状态

3.如果没有变化就考虑布尔类型状态

4.如果以上都没有,考虑延时注入

6.联合查询之判断列数

我们使用 order by 函数进行判断,因为我们要使用联合查询,并且在 ?id=35前面有一条select查询语句,要使用联合查询的话需要判断前面语句有多少列

这条语句的意思是按照第一个字段进行排序

sql注入之靶场实操_第8张图片

当我们输入20时,发现报错提示,没有20 列

我们继续验证发现他有十五个列

sql注入之靶场实操_第9张图片

我们使用union联合查询可以用数字把列数补齐

sql注入之靶场实操_第10张图片

点击执行发现页面正常,因为我们不知道表名,但是根据mysql数据库特性,select语句在执行过程中并不需要指定表名。

7.判断显示位

因为页面显示的是第一章表的内容,那我们可以考虑让第一张虚拟表的查询条件为假,显示第二条记录从而构造sql语句

sql注入之靶场实操_第11张图片

这里我用的是-33,也可以使用and 1=2,我们发现页面回显3,11两个数字,我们就可以把这两个数字用函数替换掉

sql注入之靶场实操_第12张图片

这样就已经可以证明存在sql注入漏洞了

但是我们想拿到后台管理员的账密

sql注入之靶场实操_第13张图片

我们把databases()换成hex(group_concat(table_name))就得到了十六进制,我们用bp去还原十六进制

sql注入之靶场实操_第14张图片

用bp解码之后就得到了所有的表名,管理员账密可能存在cms_users表中,接下来需要查询表中的字段

Ps:为了避免单引号的使用,因为如果是cms_users出现的话要使用单引号,所以把它转化成十六进制,同时前面要加上0X,证明是十六进制

执行后发现得到了十六进制的数字放到bp进行解码

sql注入之靶场实操_第15张图片

就得到了三个字段的内容,我们根据顺序查询username和password就可以

我们直接查表,用从concat函数,0x3a是冒号的十六进制

我们就得到了账号和加密后的密码

因为密码是用密文的形式保存在数据库中,观察密文得知是md5加密,我们可以用md5在线解密破解,md5解密加密来进行解密,可以忽略加密类型。

sql注入之靶场实操_第16张图片

得到了管理员账号和密码

admin

123456

sql注入之靶场实操_第17张图片

sql注入之靶场实操_第18张图片

成功登入网站后台

你可能感兴趣的:(sql,数据库)