又是一个美好的周末,今天为大家带来的是SQL注入的第三章。在正文开始前,我想向大家说下我在头条平台写文的初衷。首先是对黑客攻防感兴趣的各位开发者,解密黑客技术,由于之前没有写博文的经验,所以就我目前来写的看,层次简单,一点是说明黑客技术并非十分神秘,其次也是为大家有个由浅入深的过程,不过看到大家积极订阅,所以我就按自己的想法继续写了,多谢大家的支持,谢谢了。
正文:在之前提到的SQL注入,我们利用到SQL检测工具,对默认路径进行扫描。这种方法简单快捷(并添加语句判断),为我们完成了大量手动输入代码。如果要了解详细的内容,自然需要SQL语言,不过为了方便大家学习,在这里会讲到一些简单的语句。如果之前你有用到前面提到的工具,进行了SQL注入检测,你会发现注入点一般(有其他特殊情况)地址格式通常为http://xx.xx.xx/asp?id=xx,这也正是使用SQL数据库的一般特征。在前文,我提到过,数据库的作用就是为了查询使用数据,但数据并非杂乱无章的,为了快速查询,我们设置表列并添加了相应的参数(id),这就是为什么你通常看到的注入点格式都是这样的了。但是,这并非说明符合该格式就存在注入点,所以我们要提交代码测试,我们可以在网页后面分别加上这些代码:“ ' ” “and 1=1” "and 1=2"(也可以是“ ' and 1=1 ” ) 。单引号在SQL语言是条件转义的作用,如果在一个正常网页上提交转义,网页就会报错,我们此时可以查看关于数据库设置的一些相关信息。
之后我们可以进行具体判断,删除单引号,分别加入“and 1=1” "and 1=2"测试,在之前的文章中,我提到过SQL注入会利用到逻辑判断,所以我们通过对进行逻辑关系注入测试(这里and是逻辑关系“与”的意思)。之后会出现的结果是,1=1时候因为逻辑关系正确而正常显示网页(或有不同,但可以浏览网页),而1=2时候就会再次出错。
这时候我们就可以明确得出结论,该网页允许SQL注入(前提是没有防注入系统)。之后的步骤就和利用工具检测一样,我们要猜测对应的表名列名和对应的内容。
and 0<>(select count(*) from admin) ——判断是否存在admin这张表
and 0<(select count(*) from admin) and 1<(select count(*) from admin)——猜测账号数目
and 1=(select count(*) from admin where len(*)>0)——猜测字段名称
这里提交的代码(还有未写出代码,不一一列举,如果没有学过SQL语言,推荐使用百度),也是利用到了数学逻辑判断。比如猜解账号数目,利用“与”判断admin表中,首先是否有账号,所以我们提交一个大于0,来测试,如果网页正常显示,说明我们提交的逻辑关系正确,如果出现错误页面,说明admin表中没有账号(前提是有admin表),admin表判断方法也是这样,利用网页是否出错来测试(需要我们不断提交合适的数据,直到正确)。一般的表名:admin administrator guest pass password等等(这些都都是未设置变化表名,管理员自己是可以设置的,甚至是“mima”“zhanghao”类表名)。如果猜对字段,接下来我们还要对它的长度进行判断。举个例子(这里还是在admin表中判断):
and 1=(select count(*) from admin where len(*)>0)判断是否存在值
and 1=(select count(*) from admin where len(name)>8) 判断字段长度是否大于8
如果符合字段长度大于8,那么网页就会正常返回,否则网页就会出错(这里笔者推荐设置测试长度为8,因为一般管理员对账号设置意识淡薄,不会超过8位)。如果猜对了,我们就要猜解每一位对应的具体内容。只需提交下面的代码:
and 1=(select count(*) from admin where left(name,1)=a) 测试用户名第一位是否是a
代码判断方法,如上。如果正确我们可以将a换做ad……admin如果都符合,账户就出来了。这里我就不一一赘述了,大家可以百度,或者买SQL相关书籍来学习。看来还是工具注入方便,了解了如何SQL手工提交代码注入的原理,作为管理员的我们又如何防止注入呢?
1.永远不要相信用户提交代码,或者加上代码过滤机制,对单引号,空格等等输入过滤,造成SQL提交语句不完整,则无法注入。
2.永远不要直接使用免费的CMS系统,通过SQL检测工具,我们可以快速地对服务器搭建的网站默认的许多路径进行扫描,例如上传地址,数据库地址以及后台地址,我们应该对使用的CMS的地址进行个人修改,也不要直接利用拼音,标记地址。
3.不要把钥匙放在门外,对于大多数的网站,是不提供数据库下载的,这样可以保证用户不会得知数据库的内容,这点非常关键。
其实,预防SQL注入的方法很多,但关键层面也是对SQL代码的正确构造,这样才是根本上做到防患于未然。
当然,我们也有相应的绕过防注入的办法,如果感兴趣,大家可以自行百度,在这里不做过多赘述。如果对此感兴趣,我建议你可以系统学习SQL数据库的相应内容,包括之前章节提到的内容,都是SQL注入的基本,它十分简单,却能造成不小的损失(例如不做破坏,仅仅在数据库添加一个VIP账户,这种方法十分隐蔽,却会有不可挽回的损失)。如果你学习SQL数据库的相关知识,你会发现SQL注入也十分简单。黑客技术并非神秘难测,如果你愿意钻研,其实,不过是把魔术手法告诉了你而已。(如果有任何错误和问题请留言给我。)
本章节到此结束,下次我会开启新的一篇内容。目前我仍在整合上半年信息安全的相关知识和技术,希望不会令大家失望。最近有点忙,不过还是给大家带来了更新,希望大家喜欢。在最后推荐一个强大的注入工具“穿山甲”(Pangolin),使用方法和明小子 啊D大同小异,不过也有自己的优势,十分推荐,还有一点就是它是英文版的(深圳宇造诺赛科技有限公司(Nosec)旗下的网站安全测试产品之一),希望大家可以下载使用来熟悉,到后面会利用到更多英文软件。对了,造成后果笔者不负责(老调子了)。
谢谢订阅和支持,每周更新!