零基础黑客教程,黑客圈新闻,安全面试经验
尽在 # 掌控安全EDU #
本文作者
掌控安全学院七期-1班-天象独行
欢迎在社区 — 安全技术交流区投稿
1
前言
首先感谢手电筒的建议,建议我从Bluecms来开始学习代码审计。感谢桑桑格,风哥的问题解答。
文章主要是写下我自己在代码审计的时候所思所想。当然并不是太过严谨,也有可能存在错误。这里主要是写出了审计SQL,XSS,CSRF,文件包含漏洞的思路。
当然,还有比如变量覆盖,代码执行,逻辑漏洞,会话认证等等。以后有时间会整理。这里的思路是我自己的。当然也有大神有更好的想法。今后我还需要加油。
文章使用审计软件seay源代码审计,Bluecms 版本v1.6 sp1
最后,希望每个学习的小伙伴都能劈风斩浪。
2
常用代码审计思路
3、通过对应输入点位置的代码,追踪数据流,主要关注是否存在过滤代码。
4、判断出错函数是否被其他文件调用。大可能概率其他包含的文件也是存在的。
2
Sql注入漏洞审计
2.1、SQL注入总结
正常情况,sql注入的位置经常出现在登陆页面,订单处理等。注意x-forward-for以及client-ip也会经常出现。因为该值是主动获取的。并不需要用户输入,所以经常性的不会进行过滤。在订单系统里面多个订单与购物车的交互,导致复杂性提升,容易出现二次注入。值得注意。
2.2、BlueCms sql注入审计举例
首先查看用户登录位置,查看表单代码,发现数据传送给user.php文件。那么我们尝试在源码以及web前端当中分析该文件。
查看源代码user.php文件,通读全文我们了解到变量act的作用,代码根据cat参数不同的值来执行不同的SQL语句。所以,我们通过seay源代码审计系统来打开代码文件并且搜索“do_login”,来查看参数值为“do_login”时,执行什么样的sql语句。(注意:个人习惯我喜欢用nodepad++来查看,部分截图是使用nodepad++打开,不影响阅读)
由代码可以发现输入参数符合上面一系列if语句的判定之后会执行一个select语句。利用这个getone函数以及login函数来执行。很明显这是自定义函数。我们定位一下该函数来查看一下该函数是如何定义的。发现该getone函数是mysql.class.php文件当中类class自定义的一个成员函数。Login函数是文件user.fun.php当中定义的函数。下面我们来分析一下该函数:
A;getone函数调用了一个query函数来执行,并且将结果赋值给变量$query,且通过函数mysql_fetch_array函数处理赋值到变量$row,最后返回变量$row。
注释:mysql_fetch_array在结果集中取得一行作为数字数组或关联数组。MYSQL_ASSOC表示关联数组。
我这里注册了一个账号abc123/abc123
3
XSS漏洞审计
3.1、XSS跨站脚本攻击总结
注意:浏览器的容错,编码等特性
3.2、XSS漏洞举例
这里我打算举个存储XSS例子。首先我们思考一个问题,存储XSS是将代码存入数据库当中。那么在PHP代码当中存入输入所使用的sql语句是什么呢?没错insert into 。那是不是存在存储XSS必要条件是存在该语句呢。好的,现在我们搜索一下。
大家是不是很奇怪,红框为什么不包含下面的文件。嗯,各位仔细看看,那特么特么需要管理员权限才能进去的。我要是有管理员权限,我会折腾这个???
好的,我们依旧选中user.php文件,打开并且定位到insert位置。
现在语句位置我们已经清楚了。现在我们查看赋值变量是否存在过滤。或者我们可以先登录界面看看什么样的变量是我可控的。即输入点。奇怪的是变量act=do_reg的时候不能打开界面,我们发现参数等于reg的时候可以开。
很快我发现了一个很尴尬的问题,格式不对。回头查看源码,发现报错信息。并且当变量uid等于-4的时候,会出现这样的报错。找了半天发现没有找到。估摸着是前端验证。抓包输入吧。
注意:这里我们需要考虑一个问题,即输出点的位置是否在属性内。
抓包并且成功注入。(做完忘记截图了,各位自己想象吧)
查看数据库当中确实已经存储:
登陆账号弹框:
代码执行位置:
3
CSRF漏洞审计
4.1;CSRF漏洞总结
简单说CSRF就是攻击者通过手段来利用被攻击者来执行被攻击者具备权限的操作行为。在针对这些CSRF漏洞通过token就可以很好的防护。那么对于我们代码审计来说。是不是重点关注存不存在token就可以很好的判定是否存在CSRF漏洞了呢?完美!!!
这里有必要说明一下token的认证方式:
1;前端传账号密码给后端。
2;后端验证成功之后将账号密码作处理加密生成token,并返回给前端。
3;前端收到token之后会存储。
4;以后每次前端请求资源,需要验证token,验证成功则返回请求资源。
4.2;CSRF漏洞举例
有点难受啊,代码水平的不足让我没有办法例举出典型CSRF。有点小失望。话说回来,针对该漏洞的审计我更喜欢黑盒。绝大多数会登陆几个页面,看看有没有token,或者,删除referer信息。看看访问是否存在问题。如果不存在那么大多数情况可以确定存在CSRF漏洞的。至于白盒。我没有太多的心得。基本就是看看有没有设定token的代码。
哎,我在考虑怎么来更好的说明这个呢。看了一圈Blucecm好像没有这个token,这样没有办法更好的说明。下面是我打的一串设定token的代码。看看这个,做到心中丘壑,这样更好的为方便以后审计。
注释:这里的警告是因为我使用了php5.2版本,调整为7.3就没有问题了。
5
文件操作漏洞审计
5.1;文件操作漏洞总结
这里我将文件包含,上传文件,文件读取,文件删除,修改什么的等漏洞都统一称呼文件操作漏洞吧。下面我们来聊聊这些操作文件的漏洞。
文件包含漏洞:在正常的编写网页当中一些代码,类,对象定义之后会需要重复的使用。这个时候就需要用到一些包含的函数,比如include,include_once,require,require_once。可以在代码运行的时候调用其它文件当中已经定义好的文件,类。本来是没有问题的。但是,如果文件包含位置的内容是可控的呢?那么味道就改变了。一旦可控就可以去控制包含一些恶意代码的文件。也就形成了漏洞。
5.2;文件包含漏洞举例
上面说了一些废话,这里关于文件操作的漏洞,我选择用一个文件包含漏洞来举例。首先我们回顾一下文件包含漏洞的形成。可控的变量?是的。还有其他的吗?答案是有的,函数include以及类似功能的函数对吧。那么我们先通过工具来全文搜索一下。来找到一个相对可能性比较大的目标。俗称“踩点”
抓包,添加传参:
注意:这里我看看传参的位置:
include 'include/payment/'.$_POST['pay']."/index.php";
注意:因为这里我用的截断是在PHP版本5.2上面测试的。如果有验证不成功的。考虑一下php版本问题。
黑客教程~ 课件 靶场 ~ 限!时!免费!送!
长按识别二维码,即可限时免费报名课程。
点击在看~好文大家给一起看!👇
原文始发于微信公众号(掌控安全EDU):常见代码审计思路总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论