读《代码审计》的一些笔记

漏洞挖掘与防范(基础篇)

  • sql注入漏洞

原理:由于开发者在编写操作数据库代码时,直接将外部可控的参数拼接到SQL语句中,没有经过任何过滤就直接放入数据库引擎执行。

  • 挖掘经验

SQL注入经常出现在登陆页面,获取HTTP头,订单处理等地方,因为这些地方是业务想对复杂的,登陆页面的的注入现在来说大多是发生在HTTP头里面的client-ip和x-forward-for,一般用来记录登陆的ip地址,另外在订单系统里面,由于订单涉及购物车等多个交互,所以经常会发生二次注入。

  • 普通注入

直接通过注入union查询就可以查询数据库,普通注入有int型和string型,在string型注入中需要使用单或双引号闭合。

  • 编码注入

最常见的编码注入是MYSQL宽字节以及人类decode/rawurldecode函数导致的

当存在宽字节注入漏洞时,注入参数里带%df%27,即可把程序中过滤的\(%5c)吃掉,由于单引号被自动转义成\\’,前面的%df和转义字符\反斜杠(%5c)组成了%df%5c,成功的闭合了前面的单引号。
现在的web程序大多都会进行参数过滤,通常使用addslashes(),mysql_real_escape_string(),mysql_escape_string()函数或者开启GPC的方式来防止注入,通常就是给单引号,双引号,反斜杠和NULL加上反斜杠转义,当使用urldecode或者rawurldecode函数,则会导致二次解码生成单引号而引发注入。
  • xss漏洞

    - 反射型xss

    直接通过外部输入然后在浏览器输出触发的类型,一般通过扫描器黑盒直接发现,只需要将尖括号,单引号等提交到web服务器,检查返回的HTML页面里面有没有保留原来的特殊字符即可判断。

    - 存储型xss

    需要先把利用代码保存在比如数据库或文件中,web程序读取利用代码并输出在页面上时执行利用代码。

  • CSRF漏洞

    csrf主要用于越权操作,所有漏洞自然在有权限控制的地方,像管理后台,会员中心,论坛帖子以及交易管理等,一般在挖掘CSRF的时候抓包先看看有没有token,如果没有token的话,再直接请求这个页面,不带referer,如果返回的数据还是一样的话,那说明很有可能有CSRF漏洞了。