php代码审计知识整理【4】

代码审计

===================================================================================================

*   sql注入

    **  变量未过滤导致

        *** http://www.test404.com/post-811.html

        -   $_SERVER变量未过滤,请求头中X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCEPT_LANGUAGE

        -   传入的参数未强制转为int

        -   数组只过滤了value未过滤key,但key也会代入到sql中

        -   $_FILES变量未过滤( http://www.test404.com/post-815.html )

    **  过滤函数的误用

        *** http://www.test404.com/post-809.html

            -   str_replace将单引号去掉了,结果转义符反斜杠留下了,导致在sql语句中将真正的单引号转义了

            -   在带入sql语句前,stripslashes将转义符去掉了

            -   多余的urldecode,导致单引号的“二次编码”%2527可以绕过单引号过滤 ( http://www.test404.com/post-808.html )

    **  二次注入

        -   单引号被转义后入库或入文件,再次以该字段为查询条件时触发

    

    **  宽字节注入

        -   gpc或addslash添加了转义符%5c

*   命令注入

    -   popen

    -   proc_open

    -   exec

    -   system

    -   passthru

    -   反引号

*   代码注入

    **  pgrep_replace

    **  eval

    **  assert

    **  双引号

        -   php -r ‘$a = "${${eval(phpinfo())}}";‘

        -   php -r ‘$a = "${@eval(phpinfo())}";‘

        -   php -r ‘$a = ${@eval("phpinfo();")};

        -   php -r ‘$a = ${${eval("phpinfo();")}};‘

*   xss反射

    **  直接回显    $_SERVER[‘HTTP_REFFER‘]

    **  $_SERVER[‘PHP_SELF‘]

    **  $_SERVER[‘HTTP_URI‘]

    **  $_SERVER[‘USER_AGENT‘]

*   xss存储

    **  留言板未使用 htmlspecialchars 过滤

*   CSRF

    利用了网站对用户的信任

    **  敏感表单未加token验证

    **  防御

        -   不要采用get方式提交

        -   添加令牌验证

        -   验证请求来源,http_reffer,但可被绕过

        -   在http头部添加自定义属性来验证

*   文件包含

    **  本地包含,受gpc影响

        -   技巧  %00截断

    **  远程包含,需要php.ini中 allow_url_include 与 allow_url_fopen 开启

        -   技巧:追加 ? # 等字符

    **  伪协议

        -   php://input,并post提交<?php phpinfo();?>, 需要allow_url_inlcude开启且php>5.2.0

        -   php://filter/read=convert.base64-encode/resource=based64-php-code.txt, 无需什么条件

*   动态函数执行与匿名函数执行

    **  动态函数:函数名以参数形式传进来,直接跟括号得到调用。

    **  匿名函数:类似lambda函数,但函数体在在定义时引入了外部字符串变量,使得可以注入恶意代码。

*   反序列化漏洞

    **  构造的序列化字符串在反序列化后会覆盖类的成员变量。结合其他代码执行漏洞,得到利用。

*   变量覆盖漏洞

    **  如果自动注册全局变量默认开启,地址栏提交的参数会被定义成变量。

        -   变量未初始化时,会被覆盖,可导致修改module之类的变量,导致文件包含漏洞;

    **  动态定义变量

        -   http://www.test404.com/post-815.html

        -   使用双美元符$$,动态定义变量时。

        -   危险函数extract,会从字典中动态提取键值对来定义变量

    

*   文件管理漏洞

    **  危险函数copy、unlink,存在时间竞争漏洞。

        -   http://www.test404.com/post-875.html

        -   上传头像-->生成临时文件(tmp.php)-->不断请求tmp.php(在上层目录生成shell.php文件)-->删除当前目录下tmp.php等非jpg文件,但留下了上层目录下的shell.php文件-->成功!

*   上传漏洞

    **  危险函数:比如getimagesize,如果文件头部以GIF89a开头,那么该文件就被判断为图片文件。

        -   参见  http://www.test404.com/post-875.html

    **  未授权引用:比如直接访问上传接口

*   验证码漏洞

    **  抓包构造sid,发送空验证码,可绕过条件判断

        -   不通过页面访问时,没生成验证码,弱类型比较时NULL==‘‘为真

    **  第一次通过页面刷新获取验证码,后续抓包反复提交该验证码

        -   无论验证码是否输入正确与否,后台都应该重新生成验证码

* php中的奇怪现象

    **  弱类型比较时存在绕过判断条件的漏洞

    *** 传递的参数为数组时,函数一般返回为NULL。

        -   ?goods[]=92%004&goods[]=967&goods[]=993

            $_GET: array(1) { ["goods"]=> array(3) { [0]=> string(4) "924" [1]=> string(3) "967" [2]=> string(3) "993" } }

            $_GET["goods"]: array(3) { [0]=> string(4) "924" [1]=> string(3) "967" [2]=> string(3) "993" }

            ereg(‘123‘‘456‘): bool(false)

            ereg("^[0-9a-zA-Z]+$", $_GET["goods"]): NULL

            ereg("^[0-9a-zA-Z]+$", $_GET["goods"])!==False: bool(true)

            ereg("^[0-9a-zA-Z]+$", $_GET["goods"])!=False: bool(false)

            $_GET["goods"]>9999999: bool(true)

            strcmp($_GET["goods"], "123123"): NULL

            strcmp($_GET["goods"], "123123")==0: bool(true)

        

    *** 弱类型的比较

        -   var_dump("1e8">999): bool(true)

        -   var_dump("1e8">"999"): bool(true)

        -   var_dump("1e8asdfasdf">999): bool(true)

        -   var_dump("1e8asasdf">"999"): bool(false)

        -   var_dump("0e8"==0): bool(true)

        -   var_dump("0e8"=="0"): bool(true)

        -   var_dump(true=="asfasdfsfsadf"): bool(true)

时间: 2024-10-16 22:52:02

php代码审计知识整理【4】的相关文章

Web网站服务及知识整理(二)

Web网站服务及知识整理(二)

Java基础知识整理(一)

概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以便于自己的学习.作为个.NET程序猿也可以学习Java ,毕竟技多不压身,学习多也要精通. 开发工具 eclipse ,开发java类似.NET 需要装JDK类似.NET Framework. Java开发工具eclipse设置 1.设置字体:window设置: 2.设置快捷键:window--ke

Linux动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序, 动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执 行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以 整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. //elfhash.h #include <stdio.h> unsign

数据库知识整理

关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数据的安全性 1.2基本概念: 对于任何数据库来说,表之间的关联关系存在三种基本的关系类型:一对一,一对多,多对多仅此三种. 目前流行的关系型数据库服务器管理系统有:微软-MS SQL Server.甲骨文-Oracle.IBM-DB2.开源的MySql和PostgreSQL等.(在面试中有被问到过)

DIV+CSS网页布局常用的一些基础知识整理

CSS命名规范一.文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: 二.常用类/ID命名规范页 眉:header内 容:content容 器:container页 脚:footer 版 权:copyright 导 航:menu主导航:mainMenu子导航:subMenu 标 志:logo标 语:banner标 题:title侧边栏:sidebar 图 标:Icon注 释:note

WIFI基本知识整理

WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总结和整理,便于后续的学习.因为无线网络中涉及术语很多,并且许多协议都是用英文描述,所以有些地方翻译出来会有歧义,这种情况就直接英文来描述了. 主要内容: 一.基本概述 二.实践基础 三.一些原理 四.补充 五.其它 一.基本概述 ============================ 1.有线和无线网络 目前有线网络中最著名的是以太网(Ethenet),但是无线网络WLAN是一个很有前景的发展领域,虽然可能不会

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网络上传输的数据量. TCP协议 TCP是因特网中的传输层协议,使用三次握手协议建立连接.当主动方发出SYN连接请求后,等待对方回答SYN+ACK ,并最终对对方的 SYN 执行 ACK 确认.这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议. 连接建立 TC

Linux进程管理知识整理

Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) TASK_INTERRUPTIBLE(可中断等待状态) TASK_UNINTERRUPTIBLE(不可中断等待状态) TASK_STOPPED(进程被其它进程设置为暂停状态) TASK_TRACED(进程被调试器设置为暂停状态) TASK_DEAD(退出状态) 进程由于所需资源得不到满足,从而进入

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,