代码审计学习(二)


代码审计学习(二)

SQL注入

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

普通注入

  • 参数处利用select、union等构造sql注入语句。主要分为int型string型注入
string型注入中需要用单或双引号闭合
  • 关键函数
    select、mysql_connect、mysql_query、mysql_fetch_now
    update 、insert、 delete等

编码注入

1. 宽字节注入

  • 漏洞产生原因:
    ```
  1. set character_set_client = ‘gbk’
  2. SET NAMES ‘gbk’
    ```
  • 漏洞利用:当注入参数里带入%df%27,即可把过滤的(\)%5c吃掉

%df%5c -> 運

  • 合理使用mysql_real_escape_string可解决这个漏洞
  • 关键函数:
    SET NAMES
    character_set_clint=gbk
    mysql_set_charset('gbk')

2. 二次urldecode注入

  • 漏洞原因:当提交参数到web服务器时,会先自动解码一次。若程序里使用了urldecode或者rawurldecode函数来解码参数,则会出现二次注入漏洞

  • 漏洞利用:参数里带入%2527

%2527 二次解码后-> ‘

  • 关键函数:
urldecode
rawurldecode

防范

1. magic_quotes_gpc/runtime魔术引导

2. 过滤函数和类

addslashes()
mysql_escape_string() / mysql_real_escape_string()
intval()

3. PDO prepare 预编译


XSS漏洞

  • 通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序

反射型XSS

  • 定义:直接通过外部输入然后在浏览器输出端触发
在白盒审计中,只需要寻找带有参数的输出函数
然后根据输出函数内容回溯输入参数,观察是否有过滤

储存型XSS

  • 定义:需要先把利用代码保存在比如数据库或者文件中,当WEB程序读取利用代码并输出在页面上时执行利用代码
同样要寻找为过滤的输入与输出点

漏洞防范

1. 特殊字符HTML实体转码

  • 一般的XSS漏洞都是因为没过滤特殊字符,导致可以通过注入单引号以及尖括号等字符利用漏洞
  • 常见特殊字符:
    ```
  1. 单引号(‘)
  2. 双引号(“)
  3. 尖括号(< >)
  4. 反斜杠()
  5. 冒号(:)
  6. and(&)
  7. #
    建议在输出和二次调用时进行如HTML实体一类的转码
    

2. 标签事件属性黑名单

用黑名单过滤
用正则匹配白名单

CSRF漏洞

  • 定义:跨站请求伪造。劫持其他用户去进行一些危险请求
白盒审计中,看核心文件中有没有验证token和referer相关的代码

漏洞防范:

1. token/referer验证

2. 验证码验证


文章作者: Doublenine
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Doublenine !
 上一篇
C语言学习笔记 C语言学习笔记
C语言学习笔记 [TOC] 数据类型1.基本类型 整数型:int、short int、long int、long long int short int ≤ int ≤ long int≤ long long int 浮点型:float、
2020-05-05 Doublenine
下一篇 
代码审计学习(一) 代码审计学习(一)
代码审计学习(一)PHP核心配置首先需了解 PHP_INI_* 常量的定义 常量 含义 PHP_INI_USER 可在用户的php脚本或者windows注册表中设置 PHP_INI_PERDIR 可在php.ini .h
  目录