通过代码限制输入select,能防止sql注入了?有绕过方法吗?

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,这篇文章主要给大家介绍了关于SQL注入的实现以及防范的相关资料,需要的朋友可以参考下

SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。

我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句。如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统。

基于GET方式的SQL注入

通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠来探测URL中是否有注入点。

4、单引号、括号都不报错说明被接收的是字符串类型' "1"") LIMIT 0,1 ':多了一个双引号


  

  

3、利用union select 联合查询,获取字段名。(以上面查询到的users表为例)


  

4、利用union select 联合查询,获取字段值。(以上面查询到的users表为例)


  

如果是地址栏不能显示信息的POST形式则可以在对话框中输入注入语句


这里使用的方法和在地址栏中的输入一样,都是先报错前面的SQL语句再使用union select联合查询拿出表中数据

SQL 注入的防范方法

  • 对用户的输入进行过滤。如:对用户的输入进行校验,可以通过正则表达式、限制长度、对单引号和双"-"进行转换等。
  • 编写程序时不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 不要直接使用管理员权限的数据库连接,每个应用使用单独的且权限有限的数据库。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 程序的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

到此这篇关于SQL注入的实现以及防范的文章就介绍到这了,更多相关SQL注入实现及防范内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

}

白帽子挖洞—SQL注入篇

SQL注入,就是通过把SQL命令插入到Web提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

对于初学者而言,找漏洞最好是基于白盒审计进行,所谓白盒审计可以简单地理解为就是看着代码找漏洞,当然了,在web方面的代码审计可没想象的那么轻松,不会像C语言中很经典的溢出,先定义一个buffer,然后用一个gets()函数直接获取内容,这么简单的溢出,泥萌也太小瞧程序媛/猿了。在web方面的代码审计,感谢伟大的社会主义社会,我国大部分的网站都是php建的(画外音:php是世界是最好的语言,哈哈),所以大多数情况下我们都是审计php代码,php函数又那么多,相互之间互相调用,使得代码审计不容易,当然了,也不难,只要掌握了技巧,结合经验,就能找出漏洞所在。在0x04部分小表弟会给出一些自己的经验。

在正式挖洞前,我们先看看DVWA给出的四种级别的SQL注入的源代码。

DVWA 的代码分为四种安全级别:Low,Medium,High,Impossible。初学者可以通过比较四种级别的代码,接触到入门级别的代码审计的内容。

点击左下角view source可以看到源代码,方便进行代码审计

我们可以看到四种级别的代码分别如下所示:

Low级别的代码对来自客户端的参数id没有进行任何的检查与过滤,存在明显的SQL注入。

代码希望通过LIMIT 1来控制使得只输出一个查询结果

代码中限制返回的查询结果数量为一时,才会输出,防止了大量数据的泄露,同时采用了PDO技术,隔离了代码与数据,使得用户输入的数据不再被当作代码执行,采用这种方案,杜绝了SQL注入漏洞的发生

1.接下来的过程中会大量用到sqlmap,部分站点的漏洞将直接以sqlmap的形式给出。所以建议小伙伴先去熟悉下sqlmap。

2. 以下提交的漏洞均已被厂家修复,小伙伴们就不要想搞事情了

3.本文展现的漏洞在测试前已获授权,请小伙伴们勿非法测试

先来枚有web页面的漏洞:

扫目录时发现该url下存在某事件型漏洞

采用某位大神的中转脚本:

通过sqlmap神器成功挖到漏洞

总结:第一枚漏洞主要是采用某事件型漏洞结合sqlmap挖到的,难度相当于DVWA中的Medium级别

什么?没有数据看着不过瘾?你这是要搞事情啊大兄弟!好吧,再来一枚数据量大的

测试时没有截web的图,只有sqlmap,将就着看吧,看看

红色打码的部分是手机号或真实姓名或邮箱号,过于敏感就打码了,可以看到图中下面password就是密码编码加密后的字符串

拿到用户名和密码后我们可以登陆后台

红色打码部分为收货人姓名及手机号,有一条还包括收货地址

可以看到后台所有的功能我们都是可以使用的,就不继续了

总结:通过简单的sqlmap命令指定特定的表、数据库来“脱裤”,拿到后台登陆帐号密码,进而进行进一步的操作。此站点的代码强度相当于DVWA中的Medium级别.

代码审计方面可以使用法师尹毅(Seay)的源代码审计系统

DVWA方面的实际操作可以登陆合天网安实验室进行练习,连接如下:

SQL注入时的神器SQLMAP在合天网安实验室也有相应的课程,连接如下:

抓包改包看参数的神器burpsuite在合天网安实验也有相应课程,连接如下:

SQL注入漏洞挖掘的总体的思路:

1. SQL注入漏洞的判断,即寻找注入点

2. 判断后台数据库类型

3. 确定XP_CMDSHELL可执行情况;若当前连接数据的帐号具有SA权限(这是SQL系统中的最高权限),且master.dbo.xp_cmdshell扩展存储过程(调用此存储过程可以直接使用操作系统的shell)能够正确执行,则整个计算机可以通过几种方法完全控制,也就完成了整个注入过程,否则继续:

了解了思路,在实际挖洞的过程中,常常会碰到需要绕过的情形,针对这种情况,表弟给大家提供了常用的绕过方法

会使用到引号的地方是在于最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句。

这个时候如果引号被过滤了,那么上面的where子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。

users的十六进制的字符串是。那么最后的sql语句就变为了:

在使用盲注的时候,需要使用到substr() ,mid() ,limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决。

# 等价于下面这条SQL语句

同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest来进行绕过了。

最常见的一个盲注的sql语句。

此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,等)函数返回输入参数(n1,n2,n3,等)的最大值

那么上面的这条sql语句可以使用greatest变为如下的子句:

1、解决SQL注入漏洞的关键是对所有来自用户输入的数据进行严格检查、对数据库配置使用最小权限原则所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

2、对进入数据库的特殊字符('"\<>&*;等)进行转义处理,或编码转换。严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。

3、数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过

以上仅为个人观点,欢迎小伙伴们提出意见讨论

}

为了应对校招,我有点心虚,所以花了几天时间整理了一些网安面试题--

希望对大家能有所帮助(比较基础的漏洞原理和防护绕过就先过滤了--大家应该都耳熟能详了):

未校验签名 解码后换内容再编码
禁用哈希 算法修改为none
操纵Key ID 原因是key ID 里的内容可能被作为参数进数据库或者查询 (SQL注入、目录遍历、命令注入)


14、鱼叉式攻击和水坑攻击?
鱼叉式钓鱼攻击一般通过电子邮件等电子通信方式进行,针对特定个人、组织或企业,窃取的资料信息更敏感更有价值。主要通过诱使点击恶意连接或者输入账号密码获取信息。
水坑攻击算是鱼叉攻击的延伸:
攻击者定期观察受害者或特定团体经常访问的网站,然后用恶意软件感染这些网站。
然后寻找这些网站的漏洞,并将恶意编程代码(通常以JavaScript或HTML形式)注入到网站上显示的广告或横幅上。
然后恶意代码会将受害者重定向到存在恶意软件或恶意广告的网络钓鱼网站上。
当受害者访问这些网站时,受害者的计算机就会自动下载包含恶意软件的脚本。
然后恶意软件会收集受害者的个人信息,并将其发送给攻击者操作的C&C服务器。
钓鱼WiFi、伪基站、钓鱼二维码、U盘钓鱼


15、中间件漏洞总结?
2、war后门文件部署
2、war后门文件部署
4、war后门文件部署
(七)其它中间件相关漏洞
1、FastCGI未授权访问、任意命令执行


16、XSS?(XSS的根源主要是代码层没有对输入输出做好过滤)
反射性XSS都是把恶意数据传入服务器,不过滤再回传浏览器造成的;
DOM型XSS主要是通过改变浏览器页面的DOM节点形成的,可能不会经过服务器(PHP_SELF)
存储型XSS主要是从数据库里取出来输出到浏览器时没有做实体化编码过滤。
XSS蠕虫的产生条件:(不一定需要存储型XSS)
一个是产生XSS点的页面不属于self页面
用户之间产生交互行为的页面
处理输出编码,js转译.实体化编码
黑白名单过滤(编码限制,标签限制,符号限制)
CSP内容安全策略(浏览器前端防护策略) 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。将同源同域发挥到极致。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。主要防止XSS漏洞,但是不能杜绝XSS。


17、中间人攻击(Burp抓包原理)?
中间人攻击是一个(缺乏)相互认证的攻击;由于客户端与服务器之间在SSL握手的过程中缺乏相互认证而造成的漏洞 (攻击方式SSLSniff、SSLStrip)
防御中间人攻击的方案通常基于以下几种技术:
技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限。


61、内网服务器,如何进行信息收集?
(1)手动,用一些小工具(批量看存活)
new user /domain查域、net view看共享、hosts文件内网ip域名映射、wifi记录和密码、浏览器中的密码、敏感文件、各类服务的配置文件中信息、历史命令、ssh私钥、FTP的连接信息、xshell等ssh连接工具的session文件,3389连接历史和被连接历史信息、某些内网api接口未授权访问
主机扫描、端口扫描、漏洞扫描、识别内网环境、密码爆破、抓密码


62、只有一个登录页面有哪些思路
注入、万能密码、爆破、JS里面的敏感信息(接口未授权访问)、密码找回、敏感目录,注册后尝试越权(或者进入系统后再看看)


63、token和referer做横向对比,谁安全等级高?
token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)
对referer的验证,从什么角度去做?如果做,怎么杜绝问题
针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?
重放、分析加密规则、结合信息泄露缓存日志替换越权


把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。
不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。
凯撒密码是栅栏密码的一种


65、一个互联网网站端口如何防护,发现入侵如何解决?
防火墙,waf,ips,ids,终端准入,网页防篡改,规范开发代码,关闭危险服务例如SMB,RDP,数据库端口不对互联网访问等,发现异常入侵可在防火墙封禁ip,或者是查看日志。

67、如何生成一个安全的随机数?
通过一些物理系统生成随机数,如电压的波动、磁盘磁头读/写时的寻道时间、空中电磁波的噪声等。

欢迎有需要的师傅们查阅,要是有什么不妥的地方欢迎留言。

这些是我整理的一部分,里还会包含一些基础漏洞原理和各种工具要点,而且排版也稍微好一点,大家有兴趣可以下载下来,打印看看

}

我要回帖

更多关于 sql注入攻击php 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信