凭理解代码理解万物吗?

万物皆可蛋糕,切开的瞬间看呆了

来源:劳动观察 作者:马思华 发布时间: 17:26

摘要: 万物皆可蛋糕,切开的瞬间看呆了。

劳动观察新闻,未经授权不得转载

四位新疆老人赶毛驴车的快乐,网友...

情侣因房贷压力大入住毛坯房,“房...

警惕!新增本土确诊128例,在1...

学习记录代码审计的一些思路

首先要知道,程序的根本是什么

我们代码审计就怼这两个东西,要让其变成可利用的漏洞,关键在于

  • 变量到达有利用价值的函数(危险函数)

一般来说,漏洞的利用效果取决于最终函数的功能

一般拿到一个cms后的操作:

  • 如果是之前没有审计过的,就先通读一遍代码,再通过写思维导图(就是写目录注释),看目录和对应功能的文件给一一列举一下出来(就是写代码注释),摸清楚大体的框架
  • 如果是之前就审计过的,直接上工具走一遍危险函数

接下来就是审计了,有两条线:

(1)按照具体功能审计

就是对应我们通读代码的时候标志好的

比如说,upload对应的是上传功能,那我们首选就应该开工找上传

比如有函数名 move_uploaded_file() ,接着看调用这个函数的代码是否存在为限制上传格式或者可以绕过

  • 未过滤或本地过滤:服务器端未过滤,直接上传PHP格式的文件即可利用

  • 扩展名可绕过:不被允许的文件格式.php,但是我们可以上传文件名为/evil-code.txt?”这里“?”实现了“伪截断”:),好象这个看上去不是那么舒服那么我们简单写个代码fuzz一下:

    4096。对于php.ini里设置远程文件关闭的时候就可以利用上面的技巧包含本地文件了。(此漏洞由cloie#ph4nt0m.org最先发现])

    对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应用程序对于提交注册的username和数据库里已有的username对比是不是已经有重复数据,然而我们可以通过“数据截断”等来饶过这些判断,数据库在处理时候产生截断导致插入重复数据。

    这个漏洞又是大牛Stefan Esser发现的,这个是由于mysql的sql_mode设置为default的时候,即没有开启STRICT_ALL_TABLES选项时,MySQL对于插入超长的值只会提示warning,而不是error(如果是error就插入不成功),这样可能会导致一些截断问题。测试如下:

    很多的web应用程序没有考虑到这些问题,只是在数据存储前简单查询数据是否包含相同数据,如下代码:

(3)文件操作里的特殊字符

文件操作里有很多特殊的字符,发挥特别的作用,很多web应用程序没有注意处理这些字符而导致安全问题。比如很多人都知道的windows系统文件名对“空格”和“.”等的忽视,这个主要体现在上传文件或者写文件上,导致直接写webshell。另外对于windows系统对“…\”进行系统转跳等等。

下面还给大家介绍一个非常有意思的问题:


很多人看出来了上面的代码的问题,程序首先禁止使用“.php”后缀。但是下面居然接了个str_replace替换$webdbwww_url为空,那么我们提交“.p$webdbwww_urlhp”就可以饶过了。那么上面的代码杂fix呢?有人给出了如下代码:

str_replace提到前面了,很完美的解决了str_replace代码的安全问题,但是问题不是那么简单,上面的代码在某些系统上一样可以突破。接下来我们先看看下面的代码:

  • 审计策略:文读取件操作函数

主要是学习各位大佬的代码审计思路,后面自己尝试审计

我要回帖

更多关于 代码编程 的文章

 

随机推荐