北京的冬天太冷,似诗的南方阳光正高照着大地,北京的冬天太冷我已无法承受,我选择在南方过冬。小白紧了紧衣服,赶脚南方比北方还冷,直想往被窝里一缩,美美地睡上一觉。 小白最近看到关于源码审计的文章涌现而出,心里觉得痒痒的。再加上对源码审计颇觉神秘高深,特想进行源码审计。挖到漏洞后也是可以作为一个谈资,顺便在朋友面前炫耀。小白越想越兴奋,不觉偷笑起来,幸好办公室没人注意,不然,还不让人误会他在想啥歪点子? 小白立马坐直,提高专注度,上网找了个小众的开源CMS,下载源码后当即在虚拟机上部署,部署成功后在浏览器打开cms系统。搞到这里后小白有点蒙圈了,接下来应该如何进行审计呢?小白冥思苦想了好久,找来一些有关审计的文章,再结合常见的WEB漏洞,决定审计源码是否能发现sql注入漏洞。 问题来了,在哪里会出现SQL注入漏洞呢? 根据小白以往的经验,SQL注入漏洞容易出现的地方主要是: ①一切能输入的地方。如带ID参数的URL、搜索框、注册、登录和留言板等地方。 ②与数据库有交互的地方。如新闻ID不一致页面不一致即为可能与数据库有交互。 等等…… 小白看下了,CMS系统,有搜索框输入的地方也有后台登录的地方。打算先尝试审计后台登录的地方,说不定存在万能密码或SQL注入呢。 小白查看了虚拟机里的后台路径,发现网站后台路径前四个字母是随机的,看来开发这套源码的同学还是具备一定的安全意识的。 1、通过对index.html文件进行阅读,发现index.html登录请求提交到XXXCMS_Top_include.php?CF=users&Class=login,该文件底部使用了checkuser()函数。 2、查找哪些文件存在checkuser()函数:
发现有两个文件存在该函数,分别是XXXCMS_Top_include.php和function.php。 3、进入function.php查看该函数具体内容: 发现该函数使用了htmlspecialchars,flags为空,默认值为ENT_COMPAT,仅编码双引号(http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp)。可以看到$sql变量中user_ps和user_qx参数都是使用了单引号,故此存在SQL注入。 4、可以判断该文件是专门用来检测用户是否登录,应该被其他文件包含使用,接着搜索哪些文件调用了XXXCMS_Top_include.php: 发现在26个文件中有27个匹配结果。 5、访问后台存在的脚本XXXCMS_Info.php
发现提示账号密码不正确重新登录! 6、构造Cookie验证结果:
7、成功绕过 点击打开后台首页: 再打开XXXCMS_Main.php试试: 8、小白尝试把SQL查询语句中的单引号换成双引号。
9、重新构造Cookie进入XXXCMS_Main.php页面:
发现提示账号密码不正确重新登录,可以证明对双引号(")进行了转义。 小白使用了Sqlmap进行SQL注入验证,发现、发现跑不出数据库,跑不出数据,跑不出~~~ 然后晚上来个人品大爆发,跑出来了,竟然跑出来了,就是盲注速度略蛋疼~~~
小白对自己竟然审计成功感觉很是高兴,于是接着这股高兴劲把审计的流程进行了总结并画出了一个审计流程图。 虽说耗时甚久,但小白觉得还是值得了,至少审计经验值提高了。又可以在朋友面前吹嘘自己技术得到了提高! 小白的故事未完待续~~~
|