Web安全之SQL注入实战一、概述
按照百科解释,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。一般来说,我们浏览网页时,也没法直接去操作数据库,所以通常还是需要表单的提交来完成。表单提交时,如果前端和后端都没有对用户提交的字段进行某些过滤操作,或者是后端的某些查询逻辑不够严谨,同样会导致数据库内容的泄露,严重的会导致被扒裤(库)。本文以最最简单的一个SQL注入为例说明SQL注入的危害。
二、最最简单的SQL注入
最最简单的SQL注通常出现在登录位置,想象一下有个登录表单,需要输入用户名和密码:
那么后端数据库验证的逻辑可能就是:
如果验证通过,那么这个用户基本上就登录了。那么攻击者要想绕过这个登录可以想办法构造一个输入,绕过这个用户名密码的验证,登录进去。也就是说,只要想办法让上面的这句话永远返回true就可以了。比如: username= 1' or '1 password= 1' or '1
带进去后可能这条语句变成了:
那么这句话永远返回true,我们就可以绕过了。实际上这个数字不一定是1,任意为true的东西都是可以的。
注意,不同厂商的数据库、不同版本的数据库在处理输入字符、结束符等等会存在差异,灵活运用。
三、最最简单SQL注入实战
以上面形式实现SQL注入的网站还是存在很多的,特别是存在于一些小型的、较老的网站,因为一方面没人维护,另一方面数据库也比较老。本文选取另外一个SQL注入的实例来说明一下,SQL注入的危害。
这几天刚刚高考了,可能有些人过段时间就要查询自己是不是被录取了。下面有某个高校的“高考录取查询入口”。如下:
假如你在不知道别人名字和身份证号的前提下想查询一下某个人是不是被录取怎么办呢?我们来试试:
很遗憾,没查到。也许是名字错误,也许是身份证号码错误,算了不管了。拿出代码来绕过吧!我们分析,这个查询数据库的操作其实和上面是类似的,可以后端是如下语句:
我们构造查询字符串:
看看结果:
所有录取的人都被查出来了!!
这个漏洞出现的原因有很多,
前端没有对表单进行非法字符过滤、转义。
前端没有对表单的输入进行校验(最起码的身份证号长度都没校验)。
后端代码有漏洞。
实际上这个漏洞也是本人在16年4月发现的,今天写这篇文章上去看了看发现漏洞还存在。当时的查询条件比现在稍微复杂一点,当时的条件使用考生号查询,考生号的位数也必须一致。如下:
当时的前端程序是对报名号长度进行过校验的。尽管如此我们仍然很容易绕过(报名号加上了冗余数字99,使得长度合法了)。
实际上,现在很多的框架或者数据库,都能都对一些简单的SQL注入进行防御,所以这种SQL注入方法只是在某些场合能成功。
四、结论
SQL注入的危害是很严重的,被扒裤的危险是实实在在存在的,甚至拿到超级管理员权限也是很有可能的。还是那句话,前端是不可信的,前端是可以绕过的,不管前端做不做防御,后端都应该做足防御!SQL注入是一门很深的学问,同时也牵涉到各种知识,本文只是抛砖引玉(其实高深的也不会哈哈)。另外,手工进行渗透测试是很无聊很枯燥成功率很低的,如果想进行这方面的研究,可以尝试各种自动化渗透测试工具。
Web安全之弱口令实战一、概述
在安全领域有一个重要的分支叫弱口令,按照百科的解释,弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。 比如在一些管理后台,用户名和密码通常都设置为admin或admin123或其它易于猜解的字符,还有些人喜欢用自己的名字作为登录名,自己的生日或其它信息作为密码。这些都属于弱口令。
最最普遍出现弱口令的地方是某些提供默认密码或初始密码的系统里,这类系统在高校的图书馆系统、个人信息系统里最为常见。这类系统常常提供的登陆用户名为学生学号,初始密码同样为学号或者身份证后六位。系统常常会提示用户,第一次登陆进去之后一定要修改初始密码。但是也有很多用户并未去修改初始密码,这样常常会给黑客带来可乘之机。
二、如何挖掘弱口令
对于概述中所说的用户名和密码都为学号的弱口令,其实挖掘方法很简单,只需要知道这个学号的学生学号就可以了。如果攻击者就是该学校的学生,那么久不用费什么劲了。如果攻击者事前不知道该学校学生学号,那么如何弄学生学号呢?有一下几种办法:
找个该学校的人问问
从公开的各种获奖名单之类查询
从该学校公开资料查询
第二种和第三种都有一丁点web安全中另一分支---社会工程学的味道,就是需要搜集大量信息来提取有用信息,但第二种和第三种还是有点区别的,主要体现在:
第二种往往出现的场合是:该校的某次竞赛获、某活动、或某次考试安排被上传到了公开的互联网上,而这些文件恰好包含学生的学号、身份证号等信息。
第三种出现的场合是:大部分学校或者单位,他们的学号或者工号都有一定的规范,哪几位代表什么意思,比如,某个单位的学号构成如下:
ABCDEFGHLY
其中,前2位用来区分本科、学硕、专硕、博士,中4位用来表示入学年份,后四位代表编号
那么整个学校所有学生的学号就可以被猜解出来了。如果某系统存在上述用户名和密码都是学号的弱口令漏洞,那么就可以被利用了。
对于较复杂的弱口令漏洞,则可以利用弱口令字典来尝试,很多自动化渗透工具采用的就是弱口令字典来完成渗透的。
三、弱口令实战
本文以某高校的教务管理系统存在的一个简单的弱口令为例来讲解弱口令带来的危害。其它复杂的弱口令建议用弱口令字典去尝试。
在某高校的教务管理系统存在着如下登录入口:
我们猜测,该入口可能存在弱口令,并且用户名和初始密码都是学号,那么怎么获取学号呢?我们不是该校学生,也从互联网上没有搜集到相关信息,但是!!!我们在该校自己的网站上找到了一份“学号编制办法”。如下:
我们按照该学号编制办法可以枚举出所有可能的学生学号,然后可以逐个测试,看能否登录。这里我们随便挑选一个测试:
可以看到,成功的登入进去了,在这个系统里,登入进去后有很多信息,包括密码都是可以修改的,所以危害还是很大的。该漏洞理论上涉及及2006年至今所有未修改初始密码的学生信息,目前该网站已下线。
四、结论
弱口令没有什么复杂的技术知识,主要在于信息搜集,信息提取,信息猜解。弱口令的防范就是不要用简单易破解的密码,及时修改初始密码,经常更新密码。弱口令的漏洞的挖掘也是非常非常无聊的、成功率很低的,如果做这方面的研究,最好使用自动化渗透测试工具。
领取专属 10元无门槛券
私享最新 技术干货