求大牛传授点人森经验。
1
jason19659 2016-07-06 09:59:24 +08:00 1
Sonar 常规代码分析?
|
2
al0ne 2016-07-06 10:38:24 +08:00 1
最近刚刚接触代码审计,买了本 seay 的那个代码审计的书也是没有头绪,我的方法就是查找一些 sql 关键字看看传入的时候有没有将参数进行一些处理,如参数绑定 /过滤 /转换等等 ,如果要是 xss 的话就看输出的时候有没有进行转义。其余的展示不太清楚。
|
3
MrZephyrus 2016-07-06 10:59:59 +08:00 2
先好好学 php 开发 自己都没写好 怎么审计呢
|
6
SlipStupig 2016-07-06 11:29:53 +08:00
@menc 大专毕业的阿里 P7
|
7
menc 2016-07-06 11:33:29 +08:00
@SlipStupig
当年 seay 博客还和我互换友链,他安全水平也许可以,代码水平确实只能说不专业。 |
10
shuimugan 2016-07-06 11:57:45 +08:00 4
不是专业的代码审计,不过也可以简单说下,下面这些方法是我刚毕业时进一个大公司后不到 1 星期挖到了多个 sql 注入与 xss 所用到的
1.先了解要审计的应用都有什么功能 2.再了解这个项目的一些编码规范,以及使用的框架,再简单看几个控制器或者什么鬼看看开发人员的大致编码习惯 3.去版本控制器里看下提交记录,根据最近提交的代码的质量,规范度来判断一下这个项目的近期动态 4.把项目搭起来,直接开扫描器扫,虽然当时扫描器扫不出什么漏洞,但起码对这个项目的安全性有一个大致的了解,而且很多扫描器对 ajax 操作是扫不了的,可以着重关注 记下来就开始找了 我是直接用 ide/编辑器全局搜代码的,基本上好点的框架都提供了一些获取请求参数的封装,那么直接使用$_GET,$_POST,$_COOKIE,$_REQUEST 的都要抓出来,用了框架还直接以$_GET,$_POST,$_COOKIE,$_REQUEST 获取数据的,都是比较 low 的行为,发生问题几率高很多 当然$_SERVER 以及$_SESSION 也要着重看下,主要看从外界获取了变量之后有没有进行防御过滤 当找完这些毫无封装的获取请求参数代码之后,就去找使用框架获取请求的代码了,项目当时用的是 CodeIgniter,那么很简单,看下文档,发现获取 get 和 post 参数的代码是 $this->input->post() $this->input->get() 而这 2 个函数第二个参数是可选的,过滤 xss 的,但是默认是 false,也就是不过滤...所以写个正则去找一下这些代码的第二个参数不填或者是 false 的,然后去追踪看后续有没有进行防御过滤,以此类推 还有很多开发人员直接拼写 sql 语句的时候,变量名一般都会写$sql 或者包含 sql 字样的,那么就去搜非框架核心区域包含 sql 字样的 php 代码,然后去回溯这些 sql 拼接的部分是不是用参数化查询,如果不是的话是不是用户可控的,有没有进行防御过滤 csrf 这类看下框架有没有开全局防御,然后看控制器对数据更改的功能代码是不是只接收 post 的请求或者 post 的参数,从这里入手去排查 至于任意文件上传下载都得先找到对应功能的代码,然后去看上传文件类型有无限制,下载有无判断用户权限,下载路径是否用户可控等,很多书都有说 我觉得与业务相关性高的比较麻烦,因为业务类型不同,很多复杂的业务前置就有一堆复杂的操作,所以比较繁琐,要黑盒白盒一起上,先无脑改参数看返回结果,再去代码里审计比较好 还有很多常见的 爆破类的:登录爆破,验证码爆破,重置密码爆破,改手机号爆破,各种爆破... 边界值:负数价格,负数商品数,真是什么都有 猥琐的:传参数给你一个数组 比如 yii2 框架的代码: $id = Yii::$app->request->get('id'); $articel = Article::findOne($id); 看样子很正常对不对,直接传 id=1'这样也发现不了注入 但是仔细看框架文档,findOne 函数是可以接数组的,提交 id[column1'] = 1 注入就出来了,真是巨坑 还有一些坑,比如危险函数的,也要去找,能执行系统命令的地方,要看是不是完全不能被用户控,被用户控制的参数有没有过滤 找一些 web shell 里常见的,比如 preg_replace 里正则放个 /e 就能执行代码,eval 就更不用说了... 找多几个 php 一句话木马就知道了,要多猥琐有多猥琐 比如我之前无聊时写着玩的一个 // 利用: // $_GET['x'] = 'eval($_GET["code"]);'; // $_GET['m'] = 'create_function'; // $_GET['code'] = 'echo 123;'; // $_GET['d'] = 'call_user_func_array' $_GET['d']($_GET['m'], '', $_GET['x'])(); 总的来说,对项目的架构熟悉程度越高,审计起来就越轻松 |
12
firebroo 2016-07-06 12:05:52 +08:00 1
审计案列上 wooyun 搜,很多经典的。
|
13
maskerTUI OP |
14
mikezhang0515 2016-07-06 12:18:22 +08:00
靠猜程序员的思路
|
15
MrZephyrus 2016-07-06 12:59:14 +08:00
@maskerTUI 慢慢来 别急于求成 别看着别人挖了好多洞就心急
|
16
jinhan13789991 2016-07-06 14:23:57 +08:00
看文件大小,每 kb500 块
|
18
tezuka 2019-10-20 18:28:49 +08:00 via Android
3 年过去了,好奇楼主现在代码审计水平怎么样了
|
19
maskerTUI OP @tezuka 哈哈,听网友的先学了 php 开发,后面再去搞代码审计,技术现在马马虎虎吧;工作内容也变了,3 年前问这问题的时候是在一个所谓的“信息安全国家队”的公司下面,从单纯的渗透人员扩展技能到代码审计,后面跳槽去了一家银行做了近两年,做的内容除了技术以外,还有一些安全体系的东西了;前两个月又跳槽来了现在这里,一个人负责公司里面所有的信息安全相关的工作了。
总的来说,代码审计水平提升的马马虎虎吧,技能方面还有吹牛功夫倒是挺厉害的(跟乙方销售打交道学的)。 |
20
cxy2244186975 2022-05-11 03:40:01 +08:00 via Android
五年多过去了、表哥学咋样了、seay 博客 好几年前 我也经常看👍👍👍
|
21
maskerTUI OP @cxy2244186975 还在做安全岗位,不过没做攻防方向了,现在主要做安全建设和安全合规。
|
22
cxy2244186975 2022-05-20 18:31:50 +08:00 via Android
@maskerTUI 挺好的
|