<
php代码审计实战
>
上一篇

phpyun漏洞披露
下一篇

Tp框架审计
php代码审计实战

一、把握大局

0x1:网站结构

0x2:入口文件

0x3:配置文件

0x4:过滤

二、审计方法

0x1:通读全文法

0x2:敏感函数参数回溯法(静态审计:seay误报率高)

0x3:定向功能分析法

常见漏洞:

程序初始化安装

站点信息泄漏

文件上传

文件管理

登陆认证

数据库备份

找回密码

验证码

总结:

把握大局–>定向功能–>敏感函数参数回溯

三、ini配置

0x1:全局变量register_globals=off

0x2:短标签 short_open_tag=On

标准:

</pre>

0x3:安全模式

safe_mode=off 5.3后废弃

ox4:禁用类/函数

disable_class=,disables_funactions=,

0x4:常见重要配置-上传文件及目录权限

用户目录访问目录限制:

open_basedir=.:/tmp/

例:查询目录

print_r(scandir(dirname(FILE)));

echo”\r\n”

print_r(scandir(dirname(FILE).”/../”));

0x5:错误信息

错误信息控制:display_error=On

设置错误报告级别:error_reporting=E_ALL(最高)

0x6:远程文件包含

打开远程文件allow_url_fopen、

file_get_contents()

远程文件包含allow_url_include

include()

四、常见危险函数及特殊函数

0x1:php代码执行函数

eval assert preg_replace

mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subiect[,int &$count])

/e 修正符使preg_replace()将replacement参数当作php代码

preg_replace(“/test/e”,$_GET[“h”],”just test”)

?h=phpinfo()会被执行

匿名函数

string create_function(string $args,string $code)创建匿名函数返回独一无二函数名

$newfunc=create_function(‘$v’,’return system($v);’)

$newfunc(‘whoami’)相当于system(‘whoami’)

回调函数

img

0x2:包含函数

require、include、require_once、include_once

//包含并任意文件读取

incelude($_GET[‘file’])

?file=php://filter/convert.base64-encode/resource=index.php

0x3:命令执行函数

exec()、passthru()、proc_open()、shell_exec()、popen()、system()

例:

//command execute //echo shell_exec(‘ping 127.0.0.1’) echo shell_exec(‘ping’ . $_GET[“v”]);

0x4:文件操作函数

copy、file_get_contens(将整个文件读入一个字符串)

file_put_contents–将一个字符串写入文件

file—把整个文件读入到一个数组中

fopen—打开文件或url

move_upload_file–将上传文件移动到新位置

unlink&delete–删除文件

例如:

file_put_contents(‘fpc.test’,file_get_contents(“http://www.baidu.com”)); unlink(‘fpc.test’)

0x5:特殊函数

phpinfo、软连接–读取文件内容

img

五、审计

0x1:敏感函数回溯

system;shell_exec

0x2:安装问题

install

$_GET[‘step’]跳过限制步骤

判断lock无exit

思路:

img

0x3:文件包含

代码:

img

函数:include()

后缀限制:利用伪协议绕过

利用:phar://path/file/xx.jpg/xx.php(zip打包后改jpg后缀)

包含时间戳命名的上传及绕过

img

头像上传后通过使用函数file_get_contents()读取文件显示。

ps:file_get_contents() //可能存在LFR SSRF(本地文件读取)

含时间戳命名的文件上传路径

时间戳 猜测 爆破:(将时间转换为时间戳)方法

上传+包含结合利用getshell

步骤如:

在上传文件以时间戳+文件名方式保存情况下利用以下方法

上传时firebug抓取上传信息:

img

利用以上函数:

将时间信息转化为时间戳

1538231868433

1538232062322

上传后真实文件名时间戳:

img

相差2秒,猜测29,30,31,。。。差不多五六次即可猜测成功

漏洞代码:

img

index.php?module=payload:phar://uploads/u_14703390033_v.png/v

修复:

img

0x4:任意文件读取

img

img

0x4:登陆验证码绕过

1)session不更新

2)绕过session

1538233613519

1538233849466

修复

img

添加判断条件cookie、验证码值不为空

Top
Foot