#知识点:
1、数据库堆叠注入
根据数据库类型决定是否支持多条语句执行
2、数据库二次注入
应用功能逻辑涉及上导致的先写入后组合的注入
3、数据库Dnslog注入
解决不回显(反向连接),SQL注入,命令执行,SSRF等
4、黑盒模式分析以上
二次注入:插入后调用显示操作符合
堆叠注入:判断注入后直接调多条执行
DNS注入:在注入上没太大利用价值,其他还行
本节课讲四个知识点,分别是堆叠注入、二次注入、dnslog注入、黑白盒分析。首先说一下堆叠注入,这个堆叠注入就是将一堆sql语句叠加在一起执行,使用分号结束上一个语句再叠加其他语句一起执行。(SQL语句;SQL语句)
根据数据库类型决定是否支持多条语句执行
支持堆叠数据库类型:MYSQL MSSQL Postgresql等
但是这个堆叠注入的触发条件比较苛刻,你在实际场景中遇到的会比较少,在ctf比赛中可能遇到的比较多一些。主要原因是,堆叠注入的利用看起来很厉害但是其可能会受到 API、数据库引擎或者权限的控制。只有当调用函数库函数支持执行多条语句执行的时候才可以利用。最直观的表现就是比如你想利用堆叠注入,这个语句在数据库中可以执行(比如navicat这个软件),但是放到我们正常看到的输入框中就不行了,也就是我们正常能看到的网页前端。
利用mysql_multi_query()函数就支持多条SQL语句同时执行,实际情况中如PHP的防SQL注入机制,其使用的数据库函数为 "mysqli_query()"函数。 所以说堆叠注入的使用条件比较有局限性。但是一旦可以被使用,造成的伤害则是非常巨大的。
接下来对于一道ctf题我们来做一下,在buuctf中直接搜“随便注”三个字就可以找到,打开靶机之后,这个是利用堆叠注入的考题,直接输入下面的payload就行了
这里由于select被过滤了,所以我们利用hex编码将数据转换成16进制,这里把(select flag from `1919810931114514`)转换为(
0x73656c656374202a2066726f6d20603139313938313039333131313435313460)才能正常注入得到flag。
第二个知识点,讲解二次注入,这个二次注入就是说先把恶意sql代码传到数据库里面,然后在刷新页面的同时就会执行它,我觉得它比较像那个储存型xss。
原理:用户向数据库里存入恶意的数据,在数据被插入到数据库之前,肯定会被数据库进行转义处理,但用户输入的数据的内容肯定是一点摸样也不会变的存进数据库里,而一般都默认为数据库里的信息都是安全的,查询的时候不会进行处理,所以当用户的恶意数据被web程序调用的时候就有可能出发SQL注入。
下面讲两个案例,第一个是ctf考题,第二个cms。
第一个考题,我们进去是login.php,可以通过暴力路径探测工具扫出来还有一个register.php。login.php是登录页面,register.php是注册页面。
左边的图是login,右边的是register。我们先进行注册再登录,登上去之后,点开个人主页,可以看到上面已经显示了名字,那他为啥会自动显示呢,并且我们在登录的时候会发现只让我们填了邮箱和密码,没让我们填名字,所以在主页显示的姓名可能是通过一个查询语句,条件是邮箱等于xiaopei@qq,com。密码是123456。就会得到username的值是xiaopei
这里直接用的脚本解题的,直接把url放进去即可出flag。
第二个案例就是cms了
首先安装好网站,源码在资源库中。首先站在黑盒的角度看根据功能点去试哪里存在注入点,这里直接说是做简历的第四步填学校的时候有注入点(这个网站好像就是做网站的),正常的情况是我们填学校的名字,这里我们制造payload,写上xiaopei ‘ , address=user()#。
这里我们需要前提知道地址那一栏的字段名是adress,猜不出来的话就gg。
从下图可以看到刚开始写上的地址是vawvawv,当我们输入payload保存之后可以看到,地址那一栏已经变成了用户名的值了。这是因为我们利用payload已经把原先vawvawv的值改成用户名了。当我们做简历的时候是用的insert插入语句,当我们点保存的时候是执行的update语句,相当于我们点了保存之后,那个值就已经被改了并且保存到了数据库中。然后当我们查看保存的简历的时候就把改之后的数据查了出来。相当于是三个动作同时完成了。当我们从白盒的角度去看时,直接通过代码追踪以及抓包看访问的时哪些文件即可找到相关漏洞。这里就不再演示了。
最后一个就是dnslog注入了,这个比较鸡肋,因为其出现的条件是需要具有文件读取的功能的,但如果说具有文件读取的功能的话,那就是高权限注入了,直接写入后门就行了。就用不着它了。但他也是肯定也是有用的,它常用于网站对于我们的一些不合法的请求操作没有回显或者过滤了敏感的回显内容。这个不是很重要,我不过多赘述,下面这个链接讲解的比较详细,我觉得比小迪讲的详细
(11条消息) 深度剖析DNSLog注入原理&本地实例测试_monster663的博客-CSDN博客