分类 技术文档 下的文章

漏洞文档说明


SQL注入漏洞


风险等级:高危
漏洞描述:
SQL注入漏洞产生的原因是网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验,即没有进行有效地特殊字符过滤,导致网站服务器存在安全风险,这就是SQL Injection,即SQL注入漏洞。

漏洞危害:
机密数据被窃取;
核心业务数据被篡改;
网页被篡改;
数据库所在服务器被攻击从而变为傀儡主机,导致局域网(内网)被入侵。
修复建议:

在网页代码中对用户输入的数据进行严格过滤;(代码层)
部署Web应用防火墙;(设备层)
对数据库操作进行监控。(数据库层)
代码层最佳防御sql漏洞方案:采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。

原因:采用了PreparedStatement,就会将sql语句:”select id, no from user where id=?” 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数,所以sql语句预编译可以防御sql注入。

其他防御方式:正则过滤



目录遍历漏洞


风险等级:中危

漏洞描述:
通过该漏洞可以获取系统文件及服务器的配置文件。利用服务器API、文件标准权限进行攻击。

漏洞危害:
黑客可获得服务器上的文件目录结构,从而下载敏感文件。

修复建议:
1.通过修改配置文件,去除中间件(如IIS、apache、tomcat)的文件目录索引功能
2.设置目录权限
3.在每个目录下创建一个空的index.html页面。

跨站脚本漏洞


即XSS漏洞,利用跨站脚本漏洞可以在网站中插入任意代码,它能够获取网站管理员或普通用户的cookie,隐蔽运行网页木马,甚至格式化浏览者的硬盘。

漏洞危害:
网络钓鱼,盗取管理员或用户帐号和隐私信息等;
劫持合法用户会话,利用管理员身份进行恶意操作,篡改页面内容、进一步渗透网站;
网页挂马、传播跨站脚本蠕虫等;
控制受害者机器向其他系统发起攻击。

修复建议:
设置httponly
httponly无法完全的防御xss漏洞,它只是规定了不能使用js去获取cookie的内容,因此它只能防御利用xss进行cookie劫持的问题。Httponly是在set-cookie时标记的,可对单独某个参数标记也可对全部参数标记。由于设置httponly的方法比较简单,使用也很灵活,并且对防御cookie劫持非常有用,因此已经渐渐成为一种默认的标准。

xss filter
Xss filter往往是一个文本文件,里面包含了允许被用户输入提交的字符(也有些是包含不允许用户提交的字符)。它检测的点在于用户输入的时候,xss filter分为白名单与黑名单,推荐使用白名单,但即使使用白名单还是无法完全杜绝xss问题,并且使用不当可能会带来很高的误报率。

编码转义
编码方式有很多,比如html编码、url编码、16进制编码、javascript编码等。 在处理用户输入时,除了用xss filter的方式过滤一些敏感字符外,还需要配合编码,将一些敏感字符通过编码的方式改变原来的样子,从而不能被浏览器当成js代码执行。

处理富文本
有些网页编辑器允许用户提交一些自定义的html代码,称之为”富文本”。想要在富文本处防御xss漏洞,最简单有效的方式就是控制用户能使用的标签,限制为只能使用a、div等安全的标签。

处理所有输出类型的xss漏洞
xss漏洞本质上是一种html注入,也就是将html代码注入到网页中。那么其防御的根本就是在将用户提交的代码显示到页面上时做好一系列的过滤与转义。

漏洞具体细节可参考:浅谈跨站脚本攻击与防御

未过滤HTML代码漏洞


由于页面未过滤HTML代码,攻击者可通过精心构造XSS代码(或绕过防火墙防护策略),实现跨站脚本攻击等。

可带来如下危害:

恶意用户可以使用JavaScript、VBScript、ActiveX、HTML语言甚至Flash利用应用的漏洞,从而获取其他用户信息;
攻击者能盗取会话cookie、获取账户、模拟其他用户身份,甚至可以修改网页呈现给其他用户的内容。
修复建议:

严格过滤用户输入的数据。
参考跨站脚本漏洞修复方案。

数据库运行出错


网站存在数据库运行出错,由于网页数据交换出错,攻击者可获取报错中的敏感信息。

可带来如下危害:

机密数据被窃取;
攻击者通过构造特殊URL地址,触发系统web应用程序报错,在回显内容中,获取网站敏感信息;
攻击者利用泄漏的敏感信息,获取网站服务器web路径,为进一步攻击提供帮助。
修复建议:

检查数据库缓存是否溢出,是否具有失效的配置管理、禁用一切不必要的功能;
对网站错误信息进行统一返回,模糊化处理。

Flash 安全配置缺陷漏洞


网站存在Flash 安全配置缺陷,该漏洞可导致跨域访问,让用户访问非法Flash文件。

allowScriptAccess:是否允许flash访问浏览器脚本。如果不对不信任的flash限制,默认会允许调用浏览器脚本,产生XSS漏洞。 always(默认值),总是允许;sameDomain,同域允许;never,不允许

allowNetworking:是否允许flash访问ActionScript中的网络API。如果不对不信任的flash限制,会带来flash弹窗、CSRF等问题。

all,允许所有功能,会带来flash弹窗危害;internal,可以向外发送请求/加载网页;none,无法进行任何网络相关动作(业务正常功能可能无法使用)

可带来如下危害:

网站的Flash配置文件crossdomain.xml配置不当,存在Flash跨域攻击安全隐患。
修复建议:

修改flash安全策略,做严格限制,比如限制到网站当前域;
找到相应目录下的crossdomain.xml文件,找到代码:cross-domain-policy allow-access-fromdomain=* cross-domain-policy改成:cross-domain-policy allow-access-from domain=改成你的网站地址 cross-domain-policy。

FCK编辑器泄露漏洞


漏洞描述
利用此漏洞攻击者可访问编辑器页面,上传图片。

漏洞危害
由于网站编辑器没有对管理员登录进行校验,导致任意用户访问编辑器;
利用编辑器漏洞查看网站全硬盘目录。
修复建议
对编辑器页面进行访问控制,禁止未授权访问,并升级fck编辑器版本。

FCKeditor任意文件上传漏洞


FCKeditor版本低于或等于2.4.3时网站存在任意文件上传漏洞,可以利用该漏洞上传任意文件。

可带来如下危害:

由于目标网站未做上传格式的限制,导致网站、数据库和服务器有被入侵的风险;
可能导致网站被攻击者控制,网站数据被窃取、网页被篡改等。
修复建议:

设置FCKeditor编辑器相关页面在未授权的前提下无法正常访问,和限制FCK上传文件的格式;
下载并更新至FCKeditor的最新版本。

URL Redirect漏洞


即URL重定向漏洞,通过将 URL 修改为指向恶意站点,攻击者可以成功发起网络钓鱼诈骗并窃取用户凭证。

可带来如下危害:

Web 应用程序执行指向外部站点的重定向;
攻击者可能会使用 Web 服务器攻击其他站点,这将增加匿名性。
修复建议:

在网页代码中需要对用户输入的数据进行严格过滤;(代码层)
部署Web应用防火墙。(设备层)

文件上传漏洞


网站存在任意文件上传漏洞,文件上传功能没有进行格式限制,容易被黑客利用上传恶意脚本文件。

可带来如下危害:

攻击者可通过此漏洞上传恶意脚本文件,对服务器的正常运行造成安全威胁;
攻击者可上传可执行的WebShell(如php、jsp、asp类型的木马病毒),或者利用目录跳转上传gif、html、config文件,覆盖原有的系统文件,到达获取系统权限的目的。
修复建议:

对上传文件格式进行严格校验及安全扫描,防止上传恶意脚本文件;
设置权限限制,禁止上传目录的执行权限;
严格限制可上传的文件类型;
严格限制上传的文件路径。
文件扩展名服务端白名单校验。
文件内容服务端校验。
上传文件重命名。
隐藏上传文件路径。
漏洞详细信息参考:文件上传漏洞(绕过姿势)

后台弱口令漏洞


网站管理后台用户名密码较为简单或为默认,易被黑客利用。

可带来如下危害:

攻击者利用弱口令登录网站管理后台,可任意增删文章等造成负面影响;
攻击者可进一步查看网站信息,获取服务器权限,导致局域网(内网)被入侵。
修复建议:

对管理后台进行访问控制,修改后台弱口令,加强口令强度并定期修改。
增加验证机制,防爆破机制,限制ip+cookie访问次数。

敏感信息泄漏


由于网站运维人员疏忽,存放敏感信息的文件被泄露或由于网站运行出错导致敏感信息泄露。

可带来如下危害:

攻击者可直接下载用户的相关信息,包括网站的绝对路径、用户的登录名、密码、真实姓名、身份证号、电话号码、邮箱、QQ号等;
攻击者通过构造特殊URL地址,触发系统web应用程序报错,在回显内容中,获取网站敏感信息;
攻击者利用泄漏的敏感信息,获取网站服务器web路径,为进一步攻击提供帮助。
修复建议:

对网站错误信息进行统一返回,模糊化处理;
对存放敏感信息的文件进行加密并妥善储存,避免泄漏敏感信息。

未加密登录请求漏洞


网站对用户登录认证信息未进行加密,敏感信息以明文形式进行传送,易在传输过程中被获取。

可带来如下危害:

易造成用户敏感信息泄露与篡改。
修复建议:

建议通过加密连接(如SSL)方式进行敏感信息的传送。

后台口令暴力破解


由于网站管理后台系统登录无验证码校验,可导致后台用户名密码被暴力破解。

可带来如下危害:

攻击者可利用该漏洞无限次提交用户名密码,从而可以暴力破解后台用户名及密码;
暴力破解后登录其中一个帐号可进管理后台,攻击者登录网站后台任意增删文章等造成负面影响;
攻击者可进一步登陆后台查看网站信息、上传恶意脚本文件,获取服务器权限,导致局域网(内网)被入侵。
修复建议:

对该页面进行访问控制,禁止外网IP或非法IP访问后台页面,并增加验证码校验,加强帐号锁定机制。
增加ip+cookie配置方式限制访问频率。

跨站请求伪造


跨站请求伪造,即CSRF,攻击者通过伪造来自受信任用户的请求,达到增加、删除、篡改网站内容的目的。

可带来的危害:

攻击者冒充用户/管理员,伪造请求,进行篡改、转帐、改密码、发邮件等非法操作。
修复建议:

过滤用户输入,不允许发布含有站内操作URL的链接;
改良站内 API 的设计,关键操作使用验证码,只接受 POST 请求,GET请求应该只浏览而不改变服务器端资源;
对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field);
在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
服务端的防御:

1.验证HTTP Referer字段。

2.请求地址中添加token并验证(token不放在cookie中,放在http请求参数中,服务端对其进行验证)

3.将token加入http头属性中,避免了token出现在浏览器中,被泄露。

客户端防御:

为了配合服务端对token的验证,那么客户端也需要在访问时生成token,这是利用 js 来给 html 中的链接和表单请求地址附加 csrftoken 代码,其中已定义 token 为全局变量,其值可以从 session 中得到。

Unicode 编码转换漏洞
漏洞等级:中危

该漏洞由于Unicode在编码转换过程中会忽略某些字符,导致攻击者可插入该字符绕过安全设备的检测。

可带来如下危害:

黑客可通过插入特殊字符,可拆分攻击的关键词,绕过安全设备的检测。
修复建议:

修改中间件,过滤特殊字符。
部署Web应用防火墙

Possible .Net Error Message


漏洞等级:中危

网站存在.net报错信息,由于网站未配置统一错误返回页面,导致aspx出错并显示出错误信息。

可带来如下危害:

黑客可通过特殊的攻击向量,有可能泄漏如绝对路径、源代码、sql语句等敏感信息,恶意攻击者很有可能利用这些信息实施进一步的攻击。
修复建议:

关闭PHP错误回显,或修正代码。

发生内部错误


漏洞描述
500 Internal Server Error。

漏洞危害
攻击者向服务器提交精心构造的恶意数据后,有可能导致服务器出现内部错误、服务器宕机或数据库错乱。

修复建议
1.严格过滤用户输入的数据。

2.服务器错误统一模糊处理,或者跳转到首页/404页面。

SVN源代码泄漏


由于目标网站没有及时清除SVN服务器连接时的残留信息,导致存在此漏洞。

可带来如下危害:

攻击者可利用该漏洞下载网站的源代码,获得数据库的连接密码等敏感信息;
攻击者可通过源代码分析出新的系统漏洞,从而进一步入侵系统。
修复建议:

删除指定SVN生成的各种文件,如“/.svn/entries”等。

旁站攻击漏洞


多家网站在同一台服务器上,因一个网站存在致命高危漏洞,导致整台服务器被入侵。

可带来如下危害:

服务器上的所有网站均可被获得控制权限,攻击者可利用该漏洞登录网站后台任意增删文章等造成负面影响;
攻击者可通过旁站服务器漏洞进入网站内网对其他服务器进行进一步攻击。
修复建议:

修补同一台服务器上的其他网站漏洞;
建议每个网站单独服务器运行。

后台登录页面绕过


越权操作,可直接通过访问后台地址进行访问,绕过登陆限制。

可带来如下危害:

一旦入侵者发现后台url,便可进入后台页面,进行非法操作。
修复建议:

对后台所有url做好权限设置。
禁止外网访问后台地址。

CVS 信息泄漏


漏洞描述
由于目标网站没有及时清除CVS服务器连接时的残留信息,导致存在此漏洞。

漏洞测试
访问/cvs/等页面,若出现下图内容,则表示存在此漏洞。

@前面是用户名 后面是服务器地址

漏洞危害
攻击者可利用该漏洞下载网站的源代码,获得数据库的连接密码等敏感信息;
攻击者可通过源代码分析出新的系统漏洞,从而进一步入侵系统。
修复建议
删除指定CVS生成的各种文件,如“/CVS/Root”等。

Possible PHP Error Message


网站存在Possible PHP Error Message,由于网站未配置统一错误返回页面,导致PHP出错并显示出错误信息。

可带来如下危害:

黑客可通过特殊的攻击向量,有可能泄漏如绝对路径、源代码、sql语句等敏感信息,恶意攻击者很有可能利用这些信息实施进一步的攻击。
修复建议:

关闭PHP错误回显,或修正代码。

File Operation-Web.xml漏洞


攻击者可以通过文件内容泄漏漏洞(或文件包含漏洞)获取敏感文件的内容,或直接执行其指定的恶意脚本,进得Web服务器的控制权限。

可带来如下危害:

文件内容泄漏漏洞(或文件包含漏洞)允许攻击者读取服务器中的任意文件,或通过特殊的指令将脚本源码文件的内容合并至当前的文件中执行。
很多脚本语言允许通过特殊的指令(如PHP 通过require关键字)将其他脚本源码文件的内容合并至当前的文件中执行,如果这些特殊的指令在包含的文件路径中含有用户提交的数据,则恶意攻击者就有可能通过构造特殊的数据将WEB服务器限制访问的文件内容(如操作系统或某些重要应用的配置文件)包含进来并通过浏览器获取其内容,这种方式通常称为本地文件包含;如果应用程序的配置还允许包含远程的其他服务器上的文件,恶意攻击者就有可能构造特殊的脚本然后通过包含并予以执行,进而获取WEB应用的敏感数据或控制权。
修复建议:

如果可能,使用包含指令时显式指定包含的文件名称;
如果必须通过用户的输入指定包含的文件,则最好分析用户的输入,然后从文件白名单中显式地选择;
请对用户的输入进行严格的过滤,确保其包含的文件在预定的目录中或不能包含URL参数。

短文件名泄漏漏洞


漏洞等级
中危

漏洞描述
该漏洞由于Windows处理较长文件名时为方便使用较短的文件名代替,攻击者可利用该漏洞尝试获取网站服务器下的文件名。

漏洞危害
黑客可通过该漏洞尝试获取网站服务器下存放文件的文件名,达到获取更多信息来入侵服务器的目的。

修复建议
修改Windows配置,关闭短文件名功能。
部署Web应用防火墙,防止攻击者批量尝试。

OS注入漏洞


风险等级:高危

漏洞描述: 网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验,允许用户能够提交系统命令操作,会导致攻击者能控制整个服务器。

漏洞危害:

攻击者可以执行任意操作系统命令,进行恶意攻击;

修复建议:

1.禁止调用系统问题;
2.部署Web应用防火墙;
3.过滤用户输入;

SOAP注入漏洞


风险等级:高危 漏洞描述: 用户提交的数据直接插入到SOAP消息中,攻击者可以破坏消息的结构,从而实现SOAP注入。 漏洞危害: 攻击者可以改变应用程序的逻辑,修改数据。 修复建议: 在用户提交的数据被插入SOAP消息的实施边界进行过滤

XPATH注入漏洞


风险等级:高危 漏洞描述: 网站使用XPath访问数据,响应用户提交的输入。如果用户的输入未经过过滤就插入到XPath的查询中,攻击者就可以通过控制查询语句来破坏应用程序,或者获取未授权访问的数据。 漏洞危害: 攻击者可以改变应用程序的逻辑,修改数据。 修复建议: 1.在网页代码中对用户输入的数据进行严格过滤; 2.部署Web应用防火墙;

SMTP注入漏洞


风险等级:高危

漏洞描述:
在电子邮件功能中,攻击者可在会话中注入任意SMTP命令,完全控制应用程序的消息。

漏洞危害:
1)篡改用户的邮件内容

修复建议:

1)在客户端代码中对用户输入的数据进行严格过滤;
2)部署Web应用防火墙;

LDAP注入漏洞


风险等级:高危

漏洞描述:
LDAP是一种轻量级目录访问协议,可以用来保存信息。如果在查询语句中插入恶意代码,可以修改返回的结果

漏洞危害:
1)机密数据被窃取;

修复建议:
1)在查询中对用户输入的数据进行严格过滤;
2)部署Web应用防火墙;

命令执行漏洞


风险等级:高危

漏洞描述:

命令执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令的代码中,对恶意构造的语句,可被用来执行任意命令。

漏洞危害:

黑客可在服务器上执行任意命令,写入后门,从而入侵服务器,获取服务器的管理员权限,危害巨大。

修复建议:

严格过滤用户输入的数据,禁止执行系统命令

HTTP消息头注入漏洞


漏洞描述:
用户控制的数据以不安全的方式插入到应用程序返回的HTTP消息头中,如果攻击者能够在消息头中注入换行符,就能在响应中插入其他HTTP消息头,并在响应主体中写入任意内容。

漏洞检测:
通过修改参数来判断是否存在漏洞。比如国内某著名网站曾经出现过header注入漏洞,如下url:
http://www.YYYYYYYYY.com/YYYYWeb/jsp/website/agentInvoke.jsp?agentid=
X-foo: bar

抓包时发现:


漏洞危害:
利用HTTP消息头注入漏洞可以控制用户访问页面的返回结果,执行恶意代码。

修复建议:
1.不要把用户控制的输入插入到应用程序返回的HTTP消息头中;
2.部署Web应用防火墙。
在设置HTTP响应头的代码中,过滤回车换行(%0d%0a、%0D%0A)字符。
不采用有漏洞版本的apache服务器,同时对参数做合法性校验以及长度限制,谨慎的根据用户所传入参数做http返回包的header设置。

验证机制缺陷漏洞


风险等级:中危

漏洞描述:
由于网站管理后台系统登录无验证码校验,可导致后台用户名密码被暴力破解。

漏洞危害:
1.攻击者可利用该漏洞无限次提交用户名密码,从而可以暴力破解后台用户名及密码;
2.暴力破解后登录其中一个帐号可进管理后台,攻击者登录网站后台任意增删文章等造成负面影响;
3.攻击者可进一步登陆后台查看网站信息、上传恶意脚本文件,获取服务器权限,导致局域网(内网)被入侵。

修复建议:
1.对该页面进行访问控制,禁止外网IP或非法IP访问后台页面,并增加验证码校验,加强帐号锁定机制。

文件包含漏洞


漏洞描述:
文件包含漏洞多数情况出现在PHP中,当然jsp中也存在,文件包含分为本地包含与远程包含。
漏洞危害:
1.绕过WAF上传木马文件
2.加载有害的远程内容,影响程序运行。

漏洞修复:
1.关闭allow_url_fopen
2.避免使用include参数
3.使用web检测文件内容

漏洞详细信息参考:文件包含漏洞(绕过姿势)

Elasticsearch未授权访问漏洞


漏洞描述
elasticsearch 是一款java编写的企业级搜索服务,启动此服务默认会开放9200端口,可被非法操作数据。

漏洞检测
检测:默认端口9200
相当于一个API,任何人访问这个地址,就可以调用api,进行数据的增删改操作。


漏洞危害
可被非法操作数据,对网站数据造成影响。

修复方案
1.关闭9200端口
2.防火墙上设置禁止外网访问此端口。

Git源代码泄露漏洞


漏洞描述
服务器将.git文件放在了web目录下,导致可以访问git文件内容,获取源代码。

漏洞验证
验证访问网站.git目录:


可以看到git目录可以被访问,即存在此漏洞。

漏洞危害
可以通过此漏洞,获取项目源代码。

漏洞修复
1.删除网站目录下的.git文件
2.中间件上设置.git目录访问权限,禁止访问
3.防火墙上设置禁止访问此目录

PHPInfo()信息泄漏漏洞


名称:PHPInfo()信息泄漏漏洞

描述:Web站点的某些测试页面可能会使用到PHP的phpinfo()函数,会输出服务器的关键信息。如下图所示:


检测方法:
http://[ip]/test.php
http://[ip]/phpinfo.php
看是否成功。
修复方案:删除该PHP文件。

crossdomain.xml配置不当漏洞


描述:网站根目录下的文件crossdomain.xml指明了远程flash是否可以加载当前网站的资源(图片、网页内容、flash等)。 如果配置不当,可能带来CSRF攻击。如下图所示:

检测方法: 访问http://[domain]/crossdomain.xml

修复方案:对于不需要外部加载资源的网站,crossdomain.xml中更改allow-access-from的domain属性为域名白名单。 修复大致样本参考如下(备注:示例中的app10000.qzoneapp.com,app10000.imgcache.qzoneapp.com请修改为自己指定的站点)

Nginx文件解析漏洞


漏洞等级:高危

漏洞描述
nginx文件解析漏洞产生的原因是网站中间键版本过低,可将任意文件当作php可执行文件来执行,可导致攻击者执行恶意代码来控制服务器。

漏洞危害
机密数据被窃取;
核心业务数据被篡改;
网页被篡改;
数据库所在服务器被攻击变为傀儡主机,导致局域网(内网)被入侵。

修复方案
升级中间件版本
部署Web应用防火墙
对数据库操作进行监控
修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
在Nginx配置文件中添加以下代码:

if( $fastcgi_script_name
~ ../.php
) {return 403;}
这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

漏洞详细信息参考:服务器解析漏洞

OPTIONS漏洞


漏洞描述
启用了不安全的http方法,Web服务器或应用程序服务器中间件是以不安全的方式配置 ,这些方法可能标识在服务器上启用了WebDAV,可能允许未授权的用户进行利用。此漏洞存在于IIS容器下,它扩展了HTTP协议,在GET/POST/HEAD等几个HTTP标准方法以外添加了一些新的方法,比如PUT/MOVE/COPY/DELETE方法,那么攻击者就可以通过PUT方法向服务器上传危险脚本。

漏洞测试
请求一个OPTIONS包,查看服务器所支持的HTTP方法。

OPTIONS / HTTP/1.1

Host:thief.one

漏洞危害
可能会在WEB服务器上上传、修改或删除WEB页面、脚本和文件,从而达到网页篡改,控制服务器的目的。

漏洞修复方案
如果服务器不需要支持WebDAV,请务必禁用此功能,或者禁止其不安全的HTTP请求方法。

Struts2远程命令执行漏洞


Struts2远程命令执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令的代码中,可被用来执行任意命令。

可带来如下危害:
攻击者可利用此漏洞直接执行操作系统命令获取WebShell,并且可通过该系统影响内网安全;
可被攻击者用来执行任意命令,写入后门等,进而完全控制服务器,造成严重后果。

修复建议:
将struts版本升级至最新版;
部署Web应用防火墙。

Tomcat远程部署漏洞


漏洞描述
这是JSP/PHP网站远程部署的一个工具,管理员只需要远程上传一个WAR格式的文件,便可以发布到网站,方便了开发人员部署代码的同时,也为黑客上传木马敞开了大门。

漏洞验证
通过访问:Http://localhost:8080/manager管理地址,尝试弱口令或默认口令,若能登陆成功,则存在此漏洞。

下图为登陆成功以后的页面:


漏洞危害
导致被上传木马文件,控制服务器

漏洞修复
1.删除此管理页面
2.防火墙设置外网禁止访问此页面,或设置上传文件类型
3.中间件设置此页面访问权限
4.修改默认账号密码
5.升级tomcat为最新版本

漏洞详细信息参考:浅谈中间件漏洞与防护

JBoss远程部署漏洞


漏洞描述
JBoss这是一个基于JavaEE的应用服务器,与tomcat类似的是jboss也有远程部署平台,但不需要登陆。

漏洞验证
尝试访问http://localhost:8080 因为一般管理后台为8080端口

漏洞危害
上传恶意木马文件,控制服务器

漏洞修复
1.开启jmx-console密码认证
2.删除jmx-console.war与web-console.war

漏洞详细信息参考:浅谈中间件漏洞与防护

WebLogic远程部署漏洞


漏洞描述
weblogic是一个基于JavaEE构架的中间件,安装完weblogic默认会监听7001端口,可以用来远程部署网站代码。

漏洞验证
默认后台地址:

http://localhost:7001/console/login/loginForm.jsp

漏洞危害
可上传恶意木马文件,控制服务器

漏洞修复
删除远程部署页面

漏洞详细信息参考:浅谈中间件漏洞与防护


Apache解析漏洞


漏洞描述
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php

漏洞检测
本地访问http://localhost/test.php.nmask
是否能被解析成php,若能则存在此漏洞。

漏洞危害
配置文件上传漏洞,可绕过waf/黑名单等限制,上传木马文件,控制服务器。

漏洞修复
1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

Order Allow,Deny
Deny from all

2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:

RewriteEngine On
RewriteRule .(php.|php3.) /index.php
RewriteRule .(pHp.|pHp3.) /index.php
RewriteRule .(phP.|phP3.) /index.php
RewriteRule .(Php.|Php3.) /index.php
RewriteRule .(PHp.|PHp3.) /index.php
RewriteRule .(PhP.|PhP3.) /index.php
RewriteRule .(pHP.|pHP3.) /index.php
RewriteRule .(PHP.|PHP3.) /index.php

漏洞详细信息参考:服务器解析漏洞

Apache slowloris漏洞


漏洞描述
由于apache漏洞引发的拒绝服务攻击,其原理是以极低的速度往服务器发送HTTP请求。apache等中间件默认会设置最大并发链接数,而这种攻击就是会持续保持连接,导致服务饱和不可用。slowloris有点类似基于HTTP协议的SYN flood攻击。

漏洞检测
slowhttptest工具

漏洞危害
导致服务不可用,拒绝服务

漏洞修复
1.升级apache为最新版本
2.针对ip+cookie,限制访问频率(由于cookie可以更改,ip可以使用代理,或者肉鸡,也不可靠)
3.关闭apache最大连接数等,合理配置中间件,缓解ddos攻击。

漏洞详细信息参考:浅谈ddos攻击与防御

IIS6.0远程命令执行漏洞(cve-2017-7269)


漏洞描述
当IIS6.0 开启了WebDav协议(开启PROPFIND协议)时存在此漏洞,缓冲区溢出导致远程命令执行。

漏洞检测
基于版本,windowsserver2003 R2+iis6.0+开启PROPFIND协议的服务器存在此漏洞。

漏洞危害
服务器可被远程命令执行

漏洞修复
1.关闭WebDAV服务
2.使用相关防护设备

漏洞详细信息参考:iis6.0远程命令执行漏洞(cve-2017-7269)

IIS短文件名暴力猜解漏洞(目录枚举漏洞)


漏洞描述
为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名,而生成的短文件名符合一定的规律,可以被暴力猜解。

漏洞检测
需要使用到通配符,在windows中,可以匹配n个字符,n可以为0。判断某站点是否存在IIS短文件名暴力破解漏洞,可以分别访问如下两个URL:
http://localhost/*~1****/a.aspx
http://localhost/l1j1e*~1****/a.aspx
这里我使用了4个星号,主要是为了程序自动化猜解,逐个猜解后缀名中的3个字符,实际上,一个星号与4个星号没有任何区别(上面已经提到,*号可以匹配空)。
如果访问第一个URL,返回404。而访问第二个URL,返回400。 则目标站点存在漏洞。

漏洞危害
猜解后台地址
猜解敏感文件,例如备份的rar、zip、.bak、.SQL文件等。
在某些情形下,甚至可以通过短文件名web直接下载对应的文件。比如下载备份SQL文件。

漏洞修复
升级.net framework

修改注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
修改NtfsDisable8dot3NameCreation为1。再新建文件夹,将原网站目录内容拷贝进入新建的文件夹,使用新建的文件夹作为网站目录。

java反序列化漏洞


漏洞描述
由于某些java容器(中间件)中的jar包存在反序列化漏洞,导致可被远程命令执行。影响容器有:jenkins,jboss,weblogic,websphere等。

漏洞检测
下载反序列化测试工具

漏洞危害
导致服务器被远程命令执行

漏洞修复
1.JBOSS
JBoss服务专有用户权限,没有登录权限,达到权限最小化,启用防火墙,防护防火墙策略设置,限定可以连接到JBoss的IP,安全验证配置,若是公开服务,需要在jmx-invoker-service.xml中开启权限验证,更新源代码,在JBoss源代码中打入最新的官方patch。
2.Weblogic
首先停止weblogic,在中间件modules目录下找到名为
com.bea.core.apache.commons.collections_x.x.x.jar文件
然后下载最新的commons-collections(bin包),用压缩包中的commons-collections-x.x.x.jar替换有漏洞的jar包

jar包下载地址:
http://commons.apache.org/proper/commons-collections/download_collections.cgi
注意:保持原jar包的名字,即名字不变换掉jar包
最后启动weblogic。

Apache 默认页面泄漏漏洞


漏洞描述:
Apache在安装后存在默认目录/icons/、/manual/

漏洞检测:
在浏览器里输入
http://IP/icons/,http://IP/manual/

如果能访问,则说明存在默认页面泄漏漏洞,如下图所示:


修复方案:
1.对于Apache2,注释掉Apache配置文件中的目录配置中的以下两行:
Alias /icons/ “/usr/share/apache2/icons/“ AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ “/usr/share/apache2/manual$1”
2.或者删除配置文件中的icons、manual两个目录。

DNS域传送漏洞


漏洞描述
网站DNS服务器配置不当,使得攻击者可获取DNS数据库的详细信息,导致所有域名DNS泄露,从而引起进一步的入侵。DNS主备之间的数据同步就会用到dns域传送,但如果配置不当,就会导致任何匿名用户都可以获取DNS服务器某一域的所有记录,将整个企业的基础业务以及网络架构对外暴露从而造成严重的信息泄露,甚至导致企业网络被渗透。

漏洞测试
如dns服务器IP:1.1.1.1 测试域名为wooyun.org,测试命令如下:


漏洞危害
可导致攻击者获取DNS服务器某一域的所有记录,将整个单位的基础业务以及网络架构对外暴露从而造成严重的信息泄露,甚至导致内部网络被渗透;
攻击者可快速的判定出某个特定zone的所有主机,收集域信息,选择攻击目标,找出未使用的IP地址,攻击者可以绕过基于网络的访问控制。
修复方案
严格限制允许区域传送的主机,例如一个主DNS服务器应该只允许它的从DNS服务器执行区域传送的功能;
在相应的zone、options中添加allow-transfer限制可以进行同步的服务器,有两种方式:限制IP、使用key认证。优先级为如果zone没有进行配置,则遵守options的设置。如果zone进行了配置,则遵守zone的设置。

SSH Services Port 22 Enabled


漏洞等级
中危

漏洞描述
22号端口是linux服务器默认的远程登录管理端口,开放该端口可导致攻击者暴力破解服务器口令,若存在弱口令可直接被攻击者入侵。

漏洞危害
黑客可能通过22端口试图连接远程控制;
如果主机的管理员密码过于简单,黑客就可以利用该漏洞,通过一些工具破解管理员密码,进而控制服务器。
漏洞修复方案
建议利用组策略等方法关闭22端口。
部署防火墙拦截内网端口。

NetBIOS Services Port 139 Enabled


漏洞描述
即139端口漏洞,可通过139端口访问IPC$服务。

漏洞危害
黑客可能通过139端口试图连接NetBIOS/SMB服务;
如果主机的管理员密码过于简单,黑客就可以利用该漏洞,通过一些工具破解管理员密码,进而控制服务器。
修复方案
建议利用组策略等方法关闭139端口;
部署防火墙拦截内网端口。

OpenSSL HeartBleed漏洞
漏洞描述
由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查。攻击者可以追踪OpenSSL所分配的64KB缓存、将超出必要范围的字节信息复制到缓存当中再返回缓存内容,这样一来受害者的内存内容就会以每次64KB的速度进行泄露。

请求包中的数据实际长度远远小于其标明的length长度,Server端根据其标明的length长度分配了堆,然后尝试将请求包中的数据都拷贝过来形成回应包,于是便从内存中的请求包数据处开始复制了length个长度的字节,已经远远超过了数据的实际长度,从而造成数据的泄露。通过这种方式,一般可以得到SSL使用的Server端的私钥,从而获得SSL会话密钥,以及用户的账号等信息,最多64KB的数据。

漏洞危害
攻击者可利用该漏洞直接读取服务器数据;
修复建议
升级OpenSSL到最新版本。
使用DEPENSSL_NO_HEARTBEATS参数重新编译低版本的OpenSSL以禁用Heartbleed模块。
删除OpenSSL组件。

docker remote API漏洞
漏洞描述
docker是一种开源的应用容器引擎,这个漏洞是利用docker对外开放的一个api接口,因为权限设置不当,导致可以远程命令执行。

漏洞测试
首先探测2375端口,如果开放,再构造http:localhost:2375/version请求,如果返回包带有json格式,说明存在该漏洞。

进一步测试,这里不再说明。

漏洞危害
通过此漏洞,可在docker命令执行,并且影响宿主机。

漏洞修复
1.关闭2375端口
2.在防火墙上配置禁止外网访问2375端口

openssl公钥密码过弱漏洞


漏洞描述
openssl协议使用的公钥太弱,导致被暴力猜解。

漏洞检测
使用:openssl s_client -connect 122.227.230.67:60008 —ssl3
其支持的版本探测:
-ssl2 - just use SSLv2
-ssl3 - just use SSLv3
-tls1_2 - just use TLSv1.2
-tls1_1 - just use TLSv1.1
-tls1 - just use TLSv1
-dtls1 - just use DTLSv1

检测原理:用openssl尝试去连接,如果返回
eer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
SSL handshake has read 1413 bytes and written 458 bytes
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-SHA
Session-ID: 58E72FA84E256939BC49FB68087AC9065E071C4BE557DBF99D40270E70D9F674
Session-ID-ctx:
Master-Key: EF828328DBDA5C9E5B187C483C1A526D1C052FBC16C6CBC8DB90544E0751FBD28F8A9D081101A6675A9DFC3AF33708BC
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1491546024
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
说明连接成功,里面包含一些信息,如果返回
140735260164176:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:
表示握手失败。

漏洞修复
升级openssl为最新版本,使用ssl3版本。

OpenSSL ASN.1编码器内存破坏漏洞


漏洞描述
OpenSSL中的ASN.1解析器在对数据解析时没有正确处理特定标签,当遇到V_ASN1_NEG_INTEGER和V_ASN1_NEG_ENUMERATED标签时,ASN.1解析器也会将其视作ASN1_ANY类型,从而解析其中的数据。当数据再次编码序列化时,可能造成数据越界写入,引起内存损坏。

受影响系统:
OpenSSL Project OpenSSL 1.0.2
OpenSSL Project OpenSSL 1.0.1

不受影响系统:
OpenSSL Project OpenSSL 1.0.2
OpenSSL Project OpenSSL 1.0.1

漏洞检测
基于openssl版本检测

漏洞修复
升级openssl版本

OpenSSL AES-NI CBC Padding Oracle MAC校验安全漏洞


漏洞描述
OpenSSL 1.0.2, 1.0.1版本未充分修补CVE-2013-0169(Lucky 13 padding attack)漏洞。可使中间人攻击者解密使用AES CBC模式加密的网络流量。此漏洞源于在CVE-2013-0169的修复中, 虽然通过对填充字段的检查,确保每次都读取相同字节并比较消息摘要和填充字节的数据, 但其没有检查是否有足够的空间容纳消息摘要和填充字节的数据。

受影响系统:
OpenSSL Project OpenSSL 1.0.2
OpenSSL Project OpenSSL 1.0.1

不受影响系统:
OpenSSL Project OpenSSL 1.0.2
OpenSSL Project OpenSSL 1.0.1

漏洞检测
基于openssl版本检测

漏洞修复
升级openssl版本


Samba远程代码执行漏洞(CVE-2017-7494)


漏洞描述
Samba是Linux和UNIX系统的SMB协议服务软件,可以实现与其他操作系统(如:微软Windows操作系统)进行文件系统、打印机和其他资源的共享。此次漏洞最早影响到7年前的版本,黑客可以利用漏洞进行远程代码执行。

漏洞影响版本:Samba 3.5.0到4.6.4/4.5.10/4.4.14的中间版本。
漏洞检测
基于samba版本的检测

漏洞危害
可导致安装了samba服务的服务器被远程命令执行

漏洞修复
1.打相关补丁
2.升级到Samba 4.6.4/4.5.10/4.4.14任意版本
3.在smb.conf的[global]板块中添加参数:nt pipe support = no 然后重启smbd服务。

漏洞详细信息参考:Samba远程代码执行漏洞(CVE-2017-7494)

Windows系统SMB远程命令执行漏洞


漏洞描述
windows系统如果开启了SMB协议,可以实现与其他机子进行文件系统、打印机和其他资源的共享,黑客可以利用漏洞进行远程代码执行。

漏洞检测
windows服务器开启了445端口,且没有打MS17-010补丁的即存在此漏洞

漏洞危害
可导致开启了SMB服务的服务器被远程命令执行

漏洞修复
1.关闭445端口,或者上防护设备限制特定ip访问。
2.打微软MS17-010补丁

漏洞详细信息参考:Windows系统SMB/RDP远程命令执行漏洞

ARP欺骗嗅探漏洞


漏洞描述
由于内网服务器没有进行mac于ip地址绑定,可进行arp嗅探,获取内网流量,从中得到一些管理密码。

漏洞危害
网站服务器未隔离,攻击者可截获所有网络数据包进行数据分析获取管理员密码。
修复方案
进行ARP绑定防止ARP欺骗被嗅探攻击。




Documente of Most Windows API


#2020.2.13 部署沙箱后自写规则 windows API参考

Windows API函数大全,从事软件开发的朋友可以参考下

1. API之网络函数 

WNetAddConnection 创建同一个网络资源的永久性连接 

WNetAddConnection2 创建同一个网络资源的连接 

WNetAddConnection3 创建同一个网络资源的连接 

WNetCancelConnection 结束一个网络连接 

WNetCancelConnection2 结束一个网络连接 

WNetCloseEnum 结束一次枚举操作 

WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 

WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 

WNetEnumResource 枚举网络资源 

WNetGetConnection 获取本地或已连接的一个资源的网络名称 

WNetGetLastError 获取网络错误的扩展错误信息 

WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 

WNetGetUser 获取一个网络资源用以连接的名字 

WNetOpenEnum 启动对网络资源进行枚举的过程 


2. API之消息函数 

BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 

GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 

GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 

PostMessage 将一条消息投递到指定窗口的消息队列 

PostThreadMessage 将一条消息投递给应用程序 

RegisterWindowMessage 获取分配给一个字串标识符的消息编号 

ReplyMessage 答复一个消息 

SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 

SendMessageCallback 将一条消息发给窗口 

SendMessageTimeout 向窗口发送一条消息 

SendNotifyMessage 向窗口发送一条消息 


3. API之文件处理函数 

CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 

CompareFileTime 对比两个文件的时间 

CopyFile 复制文件 

CreateDirectory 创建一个新目录 

CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 

CreateFileMapping 创建一个新的文件映射对象 

DeleteFile 删除指定文件 

DeviceIoControl 对设备执行指定的操作 

DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 

FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 

FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 

FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 

FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 

FindFirstFile 根据文件名查找文件 

FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 

FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 

FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 

GetBinaryType 判断文件是否可以执行 

GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 

GetCurrentDirectory 在一个缓冲区中装载当前目录 

GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 

GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 

GetDriveType 判断一个磁盘驱动器的类型 

GetExpandedName 取得一个压缩文件的全名 

GetFileAttributes 判断指定文件的属性 

GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 

GetFileSize 判断文件长度 

GetFileTime 取得指定文件的时间信息 

GetFileType 在给出文件句柄的前提下,判断文件类型 

GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 

GetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区 

GetFullPathName 获取指定文件的完整路径名 

GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 

GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 

GetOverlappedResult 判断一个重叠操作当前的状态 

GetPrivateProfileInt 为初始化文件(.ini文件)中指定的条目获取一个整数值 

GetPrivateProfileSection 获取指定小节(在.ini文件中)所有项名和值的一个列表 

GetPrivateProfileString 为初始化文件中指定的条目取得字串 

GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值 

GetProfileSection 获取指定小节(在win.ini文件中)所有项名和值的一个列表 

GetProfileString 为win.ini初始化文件中指定的条目取得字串 

GetShortPathName 获取指定文件的短路径名 

GetSystemDirectory 取得Windows系统目录(即System目录)的完整路径名 

GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用 

GetTempPath 获取为临时文件指定的路径 

GetVolumeInformation 获取与一个磁盘卷有关的信息 

GetWindowsDirectory 获取Windows目录的完整路径名 

hread 参考lread 

hwrite 参考lwrite函数 

lclose 关闭指定的文件 

lcreat 创建一个文件 

llseek 设置文件中进行读写的当前位置 

LockFile 锁定文件的某一部分,使其不与其他应用程序共享 

LockFileEx 与LockFile相似,只是它提供了更多的功能 

lopen 以二进制模式打开指定的文件 

lread 将文件中的数据读入内存缓冲区 

lwrite 将数据从内存缓冲区写入一个文件 

LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件 

LZCopy 复制一个文件 

LZInit 这个函数用于初始化内部缓冲区 

LZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压缩文件 

LZRead 将数据从文件读入内存缓冲区 

LZSeek 设置一个文件中进行读写的当前位置 

MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间 

MoveFile 移动文件 

OpenFile 这个函数能执行大量不同的文件操作 

OpenFileMapping 打开一个现成的文件映射对象 

QueryDosDevice 在Windows NT中,DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况 

ReadFile 从文件中读出数据 

ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调 

RegCloseKey 关闭系统注册表中的一个项(或键) 

RegConnectRegistry 访问远程系统的部分注册表 

RegCreateKey 在指定的项下创建或打开一个项 

RegCreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数 

RegDeleteKey 删除现有项下方一个指定的子项 

RegDeleteValue 删除指定项下方的一个值 

RegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx 

RegEnumKeyEx 枚举指定项下方的子项 

RegEnumValue 枚举指定项的值 

RegFlushKey 将对项和它的子项作出的改动实际写入磁盘 

RegGetKeySecurity 获取与一个注册表项有关的安全信息 

RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息 

RegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时,用这个函数提供一种通知机制 

RegOpenKey 打开一个现有的注册表项 

RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数 

RegQueryInfoKey 获取与一个项有关的信息 

RegQueryValue 取得指定项或子项的默认(未命名)值 

RegQueryValueEx 获取一个项的设置值 

RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息;并创建一个备份,在其中包含当前注册表信息 

RegRestoreKey 从一个磁盘文件恢复注册表信息 

RegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件 

RegSetKeySecurity 设置指定项的安全特性 

RegSetValue 设置指定项或子项的默认值 

RegSetValueEx 设置指定项的值 

RegUnLoadKey 卸载指定的项以及它的所有子项 

RemoveDirectory 删除指定目录 

SearchPath 查找指定文件 

SetCurrentDirectory 设置当前目录 

SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾 

SetFileAttributes 设置文件属性 

SetFilePointer 在一个文件中设置当前的读写位置 

SetFileTime 设置文件的创建、访问及上次修改时间 

SetHandleCount 这个函数不必在win32下使用;即使使用,也不会有任何效果 

SetVolumeLabel 设置一个磁盘的卷标(Label) 

SystemTimeToFileTime 根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构 

UnlockFile 解除对一个文件的锁定 

UnlockFileEx 解除对一个文件的锁定 

UnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射 

VerFindFile 用这个函数决定一个文件应安装到哪里 

VerInstallFile 用这个函数安装一个文件 

VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 

VerQueryValue 这个函数用于从版本资源中获取信息 

WriteFile 将数据写入一个文件 

WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调 

WritePrivateProfileSection 为一个初始化文件(.ini)中指定的小节设置所有项名和值 

WritePrivateProfileString 在初始化文件指定小节内设置一个字串 

WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值 

WriteProfileString 在Win.ini初始化文件指定小节内设置一个字串 


4. API之打印函数 

AbortDoc 取消一份文档的打印 

AbortPrinter 删除与一台打印机关联在一起的缓冲文件 

AddForm 为打印机的表单列表添加一个新表单 

AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 

AddMonitor 为系统添加一个打印机监视器 

AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口 

AddPrinter 在系统中添加一台新打印机 

AddPrinterConnection 连接指定的打印机 

AddPrinterDriver 为指定的系统添加一个打印驱动程序 

AddPrintProcessor 为指定的系统添加一个打印处理器 

AddPrintProvidor 为系统添加一个打印供应商 

AdvancedDocumentProperties 启动打印机文档设置对话框 

ClosePrinter 关闭一个打开的打印机对象 

ConfigurePort 针对指定的端口,启动一个端口配置对话框 

ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 

DeleteForm 从打印机可用表单列表中删除一个表单 

DeleteMonitor 删除指定的打印监视器 

DeletePort 启动"删除端口"对话框,允许用户从当前系统删除一个端口 

DeletePrinter 将指定的打印机标志为从系统中删除 

DeletePrinterConnection 删除与指定打印机的连接 

DeletePrinterDriver 从系统删除一个打印机驱动程序 

DeletePrintProcessor 从指定系统删除一个打印处理器 

DeletePrintProvidor 从系统中删除一个打印供应商 

DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 

DocumentProperties 打印机配置控制函数 

EndDocAPI 结束一个成功的打印作业 

EndDocPrinter 在后台打印程序的级别指定一个文档的结束 

EndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页 

EndPagePrinter 指定一个页在打印作业中的结尾 

EnumForms 枚举一台打印机可用的表单 

EnumJobs 枚举打印队列中的作业 

EnumMonitors 枚举可用的打印监视器 

EnumPorts 枚举一个系统可用的端口 

EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 

EnumPrinters 枚举系统中安装的打印机 

EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 

EnumPrintProcessors 枚举系统中可用的打印处理器 

Escape 设备控制函数 

FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 

FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 

FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 

FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 

GetForm 取得与指定表单有关的信息 

GetJob 获取与指定作业有关的信息 

GetPrinter 取得与指定打印机有关的信息 

GetPrinterData 为打印机设置注册表配置信息 

GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 

GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 

GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 

OpenPrinter 打开指定的打印机,并获取打印机的句柄 

PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 

PrinterProperties 启动打印机属性对话框,以便对打印机进行配置 

ReadPrinter 从打印机读入数据 

ResetDC 重设一个设备场景 

ResetPrinter 改变指定打印机的默认数据类型及文档设置 

ScheduleJob 提交一个要打印的作业 

SetAbortProc 为Windows指定取消函数的地址 

SetForm 为指定的表单设置信息 

SetJob 对一个打印作业的状态进行控制 

SetPrinter 对一台打印机的状态进行控制 

SetPrinterData 设置打印机的注册表配置信息 

StartDoc 开始一个打印作业 

StartDocPrinter 在后台打印的级别启动一个新文档 

StartPage 打印一个新页前要先调用这个函数 

StartPagePrinter 在打印作业中指定一个新页的开始 

WritePrinter 将发送目录中的数据写入打印机 


5. API之文本和字体函数 

AddFontResource 在Windows系统中添加一种字体资源 

CreateFont 用指定的属性创建一种逻辑字体 

CreateFontIndirect 用指定的属性创建一种逻辑字体 

CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 

DrawText 将文本描绘到指定的矩形中 

DrawTextEx 与DrawText相似,只是加入了更多的功能 

EnumFontFamilies 列举指定设备可用的字体 

EnumFontFamiliesEx 列举指定设备可用的字体 

EnumFonts 列举指定设备可用的字体 

ExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数 

GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小 

GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小 

GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 

GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 

GetCharWidth 调查字体中一个或多个字符的宽度 

GetFontData 接收一种可缩放字体文件的数据 

GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息 

GetGlyphOutline 取得TureType字体中构成一个字符的曲线信息 

GetKerningPairs 取得指定字体的字距信息 

GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息 

GetRasterizerCaps 了解系统是否有能力支持可缩放的字体 

GetTabbedTextExtent 判断一个字串占据的范围,同时考虑制表站扩充的因素 

GetTextAlign 接收一个设备场景当前的文本对齐标志 

GetTextCharacterExtra 判断额外字符间距的当前值 

GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符 

GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息 

GetTextColor 判断当前字体颜色。通常也称为"前景色" 

GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 

GetTextExtentPoint 判断一个字串的大小(范围) 

GetTextFace 获取一种字体的字样名 

GetTextMetrics 获取与选入一种设备场景的物理字体有关的信息 

GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态 

PolyTextOut 描绘一系列字串 

RemoveFontResource 从Windows系统中删除一种字体资源 

SetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体 

SetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置 

SetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距 

SetTextColor 设置当前文本颜色。这种颜色也称为"前景色" 

SetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理 

TabbedTextOut 支持制表站的一个文本描绘函数 

TextOut 文本绘图函数 


6. API之菜单函数 

AppendMenu 在指定的菜单里添加一个菜单项 

CheckMenuItem 复选或撤消复选指定的菜单条目 

CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目 

CreateMenu 创建新菜单 

CreatePopupMenu 创建一个空的弹出式菜单 

DeleteMenu 删除指定的菜单条目 

DestroyMenu 删除指定的菜单 

DrawMenuBar 为指定的窗口重画菜单 

EnableMenuItem 允许或禁止指定的菜单条目 

GetMenu 取得窗口中一个菜单的句柄 

GetMenuCheckMarkDimensions 返回一个菜单复选符的大小 

GetMenuContextHelpId 取得一个菜单的帮助场景ID 

GetMenuDefaultItem 判断菜单中的哪个条目是默认条目 

GetMenuItemCount 返回菜单中条目(菜单项)的数量 

GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID 

GetMenuItemInfo 取得(接收)与一个菜单条目有关的特定信息 

GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息 

GetMenuState 取得与指定菜单条目状态有关的信息 

GetMenuString 取得指定菜单条目的字串 

GetSubMenu 取得一个弹出式菜单的句柄,它位于菜单中指定的位置 

GetSystemMenu 取得指定窗口的系统菜单的句柄 

HiliteMenuItem 控制顶级菜单条目的加亮显示状态 

InsertMenu 在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动 

InsertMenuItem 插入一个新菜单条目 

IsMenu 判断指定的句柄是否为一个菜单的句柄 

LoadMenu 从指定的模块或应用程序实例中载入一个菜单 

LoadMenuIndirect 载入一个菜单 

MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点 

ModifyMenu 改变菜单条目 

RemoveMenu 删除指定的菜单条目 

SetMenu 设置窗口菜单 

SetMenuContextHelpId 设置一个菜单的帮助场景ID 

SetMenuDefaultItem 将一个菜单条目设为默认条目 

SetMenuItemBitmaps 设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√) 

SetMenuItemInfo 为一个菜单条目设置指定的信息 

TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单 

TrackPopupMenuEx 与TrackPopupMenu相似,只是它提供了额外的功能 


7. API之位图、图标和光栅运算函数 

BitBlt 将一幅位图从一个设备场景复制到另一个 

CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 

CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作 

CreateBitmap 按照规定的格式创建一幅与设备有关位图 

CreateBitmapIndirect 创建一幅与设备有关位图 

CreateCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景兼容 

CreateCursor 创建一个鼠标指针 

CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 

CreateDIBSection 创建一个DIBSection 

CreateIcon 创建一个图标 

CreateIconIndirect 创建一个图标 

DestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源 

DestroyIcon 清除图标 

DrawIcon 在指定的位置画一个图标 

DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能 

ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之 

ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来 

GetBitmapBits 将来自位图的二进制位复制到一个缓冲区 

GetBitmapDimensionEx 取得一幅位图的宽度和高度 

GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息 

GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 

GetIconInfo 取得与图标有关的信息 

GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式 

LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 

LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 

LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 

LoadIcon 从指定的模块或应用程序实例中载入一个图标 

LoadImage 载入一个位图、图标或指针 

MaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理 

PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景 

PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理 

SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 

SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 

SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息 

SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 

SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备 

SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式 

StretchBlt 将一幅位图从一个设备场景复制到另一个 

StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 


8. API之绘图函数 

AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 

AngleArc 用一个连接弧画一条线 

Arc 画一个圆弧 

BeginPath 启动一个路径分支 

CancelDC 取消另一个线程里的长时间绘图操作 

Chord 画一个弦 

CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 

CloseFigure 描绘到一个路径时,关闭当前打开的图形 

CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄 

CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝) 

CopyMetaFile 制作指定(标准)图元文件的一个副本 

CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 

CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案) 

CreateEnhMetaFile 创建一个增强型的图元文件设备场景 

CreateHatchBrush 创建带有阴影图案的一个刷子 

CreateMetaFile 创建一个图元文件设备场景 

CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 

CreatePen 用指定的样式、宽度和颜色创建一个画笔 

CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 

CreateSolidBrush 用纯色创建一个刷子 

DeleteEnhMetaFile 删除指定的增强型图元文件 

DeleteMetaFile 删除指定的图元文件 

DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放 

DrawEdge 用指定的样式描绘一个矩形的边框 

DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序 

DrawFocusRect 画一个焦点矩形 

DrawFrameControl 描绘一个标准控件 

DrawState 为一幅图象或绘图操作应用各式各样的效果 

Ellipse 描绘一个椭圆,由指定的矩形围绕 

EndPath 停止定义一个路径 

EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录 

EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 

EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 

ExtCreatePen 创建一个扩展画笔(装饰或几何) 

ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域 

FillPath 关闭路径中任何打开的图形,并用当前刷子填充 

FillRect 用指定的刷子填充一个矩形 

FlattenPath 将一个路径中的所有曲线都转换成线段 

FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 

FrameRect 用指定的刷子围绕一个矩形画一个边框 

GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 

GdiFlush 执行任何未决的绘图操作 

GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中 

GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列 

GetArcDirection 画圆弧的时候,判断当前采用的绘图方向 

GetBkColor 取得指定设备场景当前的背景颜色 

GetBkMode 针对指定的设备场景,取得当前的背景填充模式 

GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 

GetCurrentObject 获得指定类型的当前选定对象 

GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置 

GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄 

GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 

GetEnhMetaFileDescription 返回对一个增强型图元文件的说明 

GetEnhMetaFileHeader 取得增强型图元文件的图元文件头 

GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 

GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄 

GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 

GetMiterLimit 取得设备场景的斜率限制(Miter)设置 

GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色 

GetObjectAPI 取得对指定对象进行说明的一个结构 

GetObjectType 判断由指定句柄引用的GDI对象的类型 

GetPath 取得对当前路径进行定义的一系列数据 

GetPixel 在指定的设备场景中取得一个像素的RGB值 

GetPolyFillMode 针对指定的设备场景,获得多边形填充模式 

GetROP2 针对指定的设备场景,取得当前的绘图模式 

GetStockObject 取得一个固有对象(Stock) 

GetSysColorBrush 为任何一种标准系统颜色取得一个刷子 

GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件 

InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形 

LineDDA 枚举指定线段中的所有点 

LineTo 用当前画笔画一条线,从当前位置连到一个指定的点 

MoveToEx 为指定的设备场景指定一个新的当前画笔位置 

PaintDesk 在指定的设备场景中描绘桌面墙纸图案 

PathToRegion 将当前选定的路径转换到一个区域里 

Pie 画一个饼图 

PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 

PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录 

PlayMetaFile 在指定的设备场景中回放一个图元文件 

PlayMetaFileRecord 回放来自图元文件的单条记录 

PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线 

PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成 

Polygon 描绘一个多边形 

Polyline 用当前画笔描绘一系列线段 

PolyPolygon 用当前选定画笔描绘两个或多个多边形 

PolyPolyline 用当前选定画笔描绘两个或多个多边形 

Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充 

RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充 

SelectClipPath 将设备场景当前的路径合并到剪切区域里 

SelectObject 为当前设备场景选择图形对象 

SetArcDirection 设置圆弧的描绘方向 

SetBkColor 为指定的设备场景设置背景颜色 

SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 

SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 

SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 

SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 

SetMiterLimit 设置设备场景当前的斜率限制 

SetPixel 在指定的设备场景中设置一个像素的RGB值 

SetPixelV 在指定的设备场景中设置一个像素的RGB值 

SetPolyFillMode 设置多边形的填充模式 

SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 

SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件 

StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域 

StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭 

UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数 

WidenPath 根据选定画笔的宽度,重新定义当前选定的路径 


9. API之设备场景函数 

CombineRgn 将两个区域组合为一个新区域 

CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 

CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 

CreateDC 为专门设备创建设备场景 

CreateEllipticRgn 创建一个椭圆 

CreateEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域 

CreateIC 为专用设备创建一个信息场景 

CreatePolygonRgn 创建一个由一系列点围成的区域 

CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 

CreateRectRgn 创建一个矩形区域 

CreateRectRgnIndirect 创建一个矩形区域 

CreateRoundRectRgn 创建一个圆角矩形 

DeleteDC 删除专用设备场景或信息场景,释放所有相关窗口资源 

DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标 

EqualRgn 确定两个区域是否相等 

ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图 

ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域 

ExtCreateRegion 根据世界转换修改区域 

ExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区 

FillRgn 用指定刷子填充指定区域 

FrameRgn 用指定刷子围绕指定区域画一个外框 

GetBoundsRect 获取指定设备场景的边界矩形 

GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形 

GetClipRgn 获取设备场景当前剪裁区 

GetDC 获取指定窗口的设备场景 

GetDCEx 为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项 

GetDCOrgEx 获取指定设备场景起点位置(以屏幕坐标表示) 

GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息 

GetGraphicsMode 确定是否允许增强图形模式(世界转换) 

GetMapMode 为特定设备场景调入映象模式 

GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区 

GetRgnBox 获取完全包含指定区域的最小矩形 

GetUpdateRgn 确定指定窗口的刷新区域。该区域当前无效,需要刷新 

GetViewportExtEx 获取设备场景视口(viewport)范围 

GetViewportOrgEx 获取设备场景视口起点 

GetWindowDC 获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 

GetWindowExtEx 获取指定设备场景的窗口范围 

GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点 

GetWindowRgn 获取窗口区域 

GetWorldTransform 如果有世界转换,为设备场景获取当前世界转换 

IntersectClipRect 为指定设备定义一个新的剪裁区 

InvalidateRgn 使窗口指定区域不活动,并将它加入窗口刷新区,使之可随后被重画 

InvertRgn 通过颠倒每个像素值反转设备场景指定区域 

LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标 

ModifyWorldTransform 根据指定的模式修改世界转换 

OffsetClipRgn 按指定量平移设备场景剪裁区 

OffsetRgn 按指定偏移量平移指定区域 

OffsetViewportOrgEx 平移设备场景视口区域 

OffsetWindowOrgEx 平移指定设备场景窗口起点 

PaintRgn 用当前刷子背景色填充指定区域 

PtInRegion 确定点是否在指定区域内 

PtVisible 确定指定点是否可见(即,点是否在设备场景剪裁区内) 

RectInRegion 确定矩形是否有部分在指定区域内 

RectVisible 确定指定矩形是否有部分可见(是否在设备场景剪裁区内) 

ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景 

RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景 

SaveDC 将指定设备场景状态保存到Windows设备场景堆栈 

ScaleViewportExtEx 缩放设备场景视口的范围 

ScaleWindowExtEx 缩放指定设备场景窗口范围 

ScrollDC 在窗口(由设备场景代表)中水平和(或)垂直滚动矩形 

SelectClipRgn 为指定设备场景选择新的剪裁区 

SetBoundsRect 设置指定设备场景的边界矩形 

SetGraphicsMode 允许或禁止增强图形模式,以提供某些支持(包括世界转换) 

SetMapMode 设置指定设备场景的映射模式 

SetRectRgn 设置区域为指定的矩形 

SetViewportExtEx 设置设备场景视口范围 

SetViewportOrgEx 设置设备场景视口起点 

SetWindowExtEx 设置指定设备场景窗口范围 

SetWindowOrgEx 设置指定设备场景窗口起点 

SetWindowRgn 设置窗口区域 

SetWorldTransform 设置世界转换 

ValidateRgn 激活窗口中指定区域,把它从刷新区移走 

WindowFromDC 取回与某一设备场景相关的窗口的句柄 


10. API之硬件与系统函数 

ActivateKeyboardLayout 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义 

Beep 用于生成简单的声音 

CharToOem 将一个字串从ANSI字符集转换到OEM字符集 

ClipCursor 将指针限制到指定区域 

ConvertDefaultLocale 将一个特殊的地方标识符转换成真实的地方ID 

CreateCaret 根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符 

DestroyCaret 清除(破坏)一个插入符 

EnumCalendarInfo 枚举在指定"地方"环境中可用的日历信息 

EnumDateFormats 列举指定的"当地"设置中可用的长、短日期格式 

EnumSystemCodePages 枚举系统中已安装或支持的代码页 

EnumSystemLocales 枚举系统已经安装或提供支持的"地方"设置 

EnumTimeFormats 枚举一个指定的地方适用的时间格式 

ExitWindowsEx 退出windows,并用特定的选项重新启动 

ExpandEnvironmentStrings 扩充环境字串 

FreeEnvironmentStrings 翻译指定的环境字串块 

GetACP 判断目前正在生效的ANSI代码页 

GetAsyncKeyState 判断函数调用时指定虚拟键的状态 

GetCaretBlinkTime 判断插入符光标的闪烁频率 

GetCaretPos 判断插入符的当前位置 

GetClipCursor 取得一个矩形,用于描述目前为鼠标指针规定的剪切区域 

GetCommandLine 获得指向当前命令行缓冲区的一个指针 

GetComputerName 取得这台计算机的名称 

GetCPInfo 取得与指定代码页有关的信息 

GetCurrencyFormat 针对指定的"地方"设置,根据货币格式格式化一个数字 

GetCursor 获取目前选择的鼠标指针的句柄 

GetCursorPos 获取鼠标指针的当前位置 

GetDateFormat 针对指定的"当地"格式,对一个系统日期进行格式化 

GetDoubleClickTime 判断连续两次鼠标单击之间会被处理成双击事件的间隔时间 

GetEnvironmentStrings 为包含了当前环境字串设置的一个内存块分配和返回一个句柄 

GetEnvironmentVariable 取得一个环境变量的值 

GetInputState 判断是否存在任何待决(等待处理)的鼠标或键盘事件 

GetKBCodePage 由GetOEMCP取代,两者功能完全相同 

GetKeyboardLayout 取得一个句柄,描述指定应用程序的键盘布局 

GetKeyboardLayoutList 获得系统适用的所有键盘布局的一个列表 

GetKeyboardLayoutName 取得当前活动键盘布局的名称 

GetKeyboardState 取得键盘上每个虚拟键当前的状态 

GetKeyboardType 了解与正在使用的键盘有关的信息 

GetKeyNameText 在给出扫描码的前提下,判断键名 

GetKeyState 针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态 

GetLastError 针对之前调用的api函数,用这个函数取得扩展错误信息 

GetLocaleInfo 取得与指定"地方"有关的信息 

GetLocalTime 取得本地日期和时间 

GetNumberFormat 针对指定的"地方",按特定的格式格式化一个数字 

GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码页 

GetQueueStatus 判断应用程序消息队列中待决(等待处理)的消息类型 

GetSysColor 判断指定windows显示对象的颜色 

GetSystemDefaultLangID 取得系统的默认语言ID 

GetSystemDefaultLCID 取得当前的默认系统"地方" 

GetSystemInfo 取得与底层硬件平台有关的信息 

GetSystemMetrics 返回与windows环境有关的信息 

GetSystemPowerStatus 获得与当前系统电源状态有关的信息 

GetSystemTime 取得当前系统时间,这个时间采用的是"协同世界时间"(即UTC,也叫做GMT)格式 

GetSystemTimeAdjustment 使内部系统时钟与一个外部的时钟信号源同步 

GetThreadLocale 取得当前线程的地方ID 

GetTickCount 用于获取自windows启动以来经历的时间长度(毫秒) 

GetTimeFormat 针对当前指定的"地方",按特定的格式格式化一个系统时间 

GetTimeZoneInformation 取得与系统时区设置有关的信息 

GetUserDefaultLangID 为当前用户取得默认语言ID 

GetUserDefaultLCID 取得当前用户的默认"地方"设置 

GetUserName 取得当前用户的名字 

GetVersion 判断当前运行的Windows和DOS版本 

GetVersionEx 取得与平台和操作系统有关的版本信息 

HideCaret 在指定的窗口隐藏插入符(光标) 

IsValidCodePage 判断一个代码页是否有效 

IsValidLocale 判断地方标识符是否有效 

keybd_event 这个函数模拟了键盘行动 

LoadKeyboardLayout 载入一个键盘布局 

MapVirtualKey 根据指定的映射类型,执行不同的扫描码和字符转换 

MapVirtualKeyEx 根据指定的映射类型,执行不同的扫描码和字符转换 

MessageBeep 播放一个系统声音。系统声音的分配方案是在控制面板里决定的 

mouse_event 模拟一次鼠标事件 

OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态 

OemToChar 将OEM字符集的一个字串转换到ANSI字符集 

SetCaretBlinkTime 指定插入符(光标)的闪烁频率 

SetCaretPos 指定插入符的位置 

SetComputerName 设置新的计算机名 

SetCursor 将指定的鼠标指针设为当前指针 

SetCursorPos 设置指针的位置 

SetDoubleClickTime 设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间 

SetEnvironmentVariable 将一个环境变量设为指定的值 

SetKeyboardState 设置每个虚拟键当前在键盘上的状态 

SetLocaleInfo 改变用户"地方"设置信息 

SetLocalTime 设置当前地方时间 

SetSysColors 设置指定窗口显示对象的颜色 

SetSystemCursor 改变任何一个标准系统指针 

SetSystemTime 设置当前系统时间 

SetSystemTimeAdjustment 定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步 

SetThreadLocale 为当前线程设置地方 

SetTimeZoneInformation 设置系统时区信息 

ShowCaret 在指定的窗口里显示插入符(光标) 

ShowCursor 控制鼠标指针的可视性 

SwapMouseButton 决定是否互换鼠标左右键的功能 

SystemParametersInfo 获取和设置数量众多的windows系统参数 

SystemTimeToTzSpecificLocalTime 将系统时间转换成地方时间 

ToAscii 根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符 

ToUnicode 根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符 

UnloadKeyboardLayout 卸载指定的键盘布局 

VkKeyScan 针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态 


11. API之进程和线程函数 

CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 

CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 

ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接 

CreateEvent 创建一个事件对象 

CreateMailslot 创建一个邮路。返回的句柄由邮路服务器使用(收件人) 

CreateMutex 创建一个互斥体(MUTEX) 

CreateNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用 

CreatePipe 创建一个匿名管道 

CreateProcess 创建一个新进程(比如执行一个程序) 

CreateSemaphore 创建一个新的信号机 

CreateWaitableTimer 创建一个可等待的计时器对象 

DisconnectNamedPipe 断开一个客户与一个命名管道的连接 

DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄 

ExitProcess 中止一个进程 

FindCloseChangeNotification 关闭一个改动通知对象 

FindExecutable 查找与一个指定文件关联在一起的程序的文件名 

FindFirstChangeNotification 创建一个文件通知对象。该对象用于监视文件系统发生的变化 

FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化 

FreeLibrary 释放指定的动态链接库 

GetCurrentProcess 获取当前进程的一个伪句柄 

GetCurrentProcessId 获取当前进程一个唯一的标识符 

GetCurrentThread 获取当前线程的一个伪句柄 

GetCurrentThreadId 获取当前线程一个唯一的线程标识符 

GetExitCodeProces 获取一个已中断进程的退出代码 

GetExitCodeThread 获取一个已中止线程的退出代码 

GetHandleInformation 获取与一个系统对象句柄有关的信息 

GetMailslotInfo 获取与一个邮路有关的信息 

GetModuleFileName 获取一个已装载模板的完整路径名称 

GetModuleHandle 获取一个应用程序或动态链接库的模块句柄 

GetPriorityClass 获取特定进程的优先级别 

GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况 

GetProcessTimes 获取与一个进程的经过时间有关的信息 

GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存 

GetSartupInfo 获取一个进程的启动信息 

GetThreadPriority 获取特定线程的优先级别 

GetTheardTimes 获取与一个线程的经过时间有关的信息 

GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符 

LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间 

LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间 

LoadModule 载入一个Windows应用程序,并在指定的环境中运行 

MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。如返回条件已经满足,则立即返回 

SetPriorityClass 设置一个进程的优先级别 

SetProcessShutdownParameters 在系统关闭期间,为指定进程设置他相对于其它程序的关闭顺序 

SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量 

SetThreadPriority 设定线程的优先级别 

ShellExecute 查找与指定文件关联在一起的程序的文件名 

TerminateProcess 结束一个进程 

WinExec 运行指定的程序 


12. API之控件与消息函数 

AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 

AnyPopup 判断屏幕上是否存在任何弹出式窗口 

ArrangeIconicWindows 排列一个父窗口的最小化子窗口 

AttachThreadInput 连接线程输入函数 

BeginDeferWindowPos 启动构建一系列新窗口位置的过程 

BringWindowToTop 将指定的窗口带至窗口列表顶部 

CascadeWindows 以层叠方式排列窗口 

ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄 

ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标 

CloseWindow 最小化指定的窗口 

CopyRect 矩形内容复制 

DeferWindowPos 该函数为特定的窗口指定一个新窗口位置 

DestroyWindow 清除指定的窗口以及它的所有子窗口 

DrawAnimatedRects 描绘一系列动态矩形 

EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入 

EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 

EnumChildWindows 为指定的父窗口枚举子窗口 

EnumThreadWindows 枚举与指定任务相关的窗口 

EnumWindows 枚举窗口列表中的所有父窗口 

EqualRect 判断两个矩形结构是否相同 

FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口 

FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口 

FlashWindow 闪烁显示指定窗口 

GetActiveWindow 获得活动窗口的句柄 

GetCapture 获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收) 

GetClassInfo 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息 

GetClassLong 取得窗口类的一个Long变量条目 

GetClassName 为指定的窗口取得类名 

GetClassWord 为窗口类取得一个整数变量 

GetClientRect 返回指定窗口客户区矩形的大小 

GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄 

GetFocus 获得拥有输入焦点的窗口的句柄 

GetForegroundWindow 获得前台窗口的句柄 

GetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄 

GetParent 判断指定窗口的父窗口 

GetTopWindow 搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄 

GetUpdateRect 获得一个矩形,它描叙了指定窗口中需要更新的那一部分 

GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系 

GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID 

GetWindowLong 从指定窗口的结构中取得信息 

GetWindowPlacement 获得指定窗口的状态及位置信息 

GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 

GetWindowText 取得一个窗体的标题(caption)文字,或者一个控件的内容 

GetWindowTextLength 调查窗口标题文字或控件内容的长短 

GetWindowWord 获得指定窗口结构的信息 

InflateRect 增大或减小一个矩形的大小 

IntersectRect 这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集 

InvalidateRect 屏蔽一个窗口客户区的全部或部分区域 

IsChild 判断一个窗口是否为另一窗口的子或隶属窗口 

IsIconic 判断窗口是否已最小化 

IsRectEmpty 判断一个矩形是否为空 

IsWindow 判断一个窗口句柄是否有效 

IsWindowEnabled 判断窗口是否处于活动状态 

IsWindowUnicode 判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字 

IsWindowVisible 判断窗口是否可见 

IsZoomed 判断窗口是否最大化 

LockWindowUpdate 锁定指定窗口,禁止它更新 

MapWindowPoints 将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统 

MoveWindow 改变指定窗口的位置和大小 

OffsetRect 通过应用一个指定的偏移,从而让矩形移动起来 

OpenIcon 恢复一个最小化的程序,并将其激活 

PtInRect 判断指定的点是否位于矩形内部 

RedrawWindow 重画全部或部分窗口 

ReleaseCapture 为当前的应用程序释放鼠标捕获 

ScreenToClient 判断屏幕上一个指定点的客户区坐标 

ScrollWindow 滚动窗口客户区的全部或一部分 

ScrollWindowEx 根据附加的选项,滚动窗口客户区的全部或部分 

SetActiveWindow 激活指定的窗口 

SetCapture 将鼠标捕获设置到指定的窗口 

SetClassLong 为窗口类设置一个Long变量条目 

SetClassWord 为窗口类设置一个条目 

SetFocusAPI 将输入焦点设到指定的窗口。如有必要,会激活窗口 

SetForegroundWindow 将窗口设为系统的前台窗口 

SetParent 指定一个窗口的新父 

SetRect 设置指定矩形的内容 

SetRectEmpty 将矩形设为一个空矩形 

SetWindowContextHelpId 为指定的窗口设置帮助场景(上下文)ID 

SetWindowLong 在窗口结构中为指定的窗口设置信息 

SetWindowPlacement 设置窗口状态和位置信息 

SetWindowPos 为窗口指定一个新位置和状态 

SetWindowText 设置窗口的标题文字或控件的内容 

SetWindowWord 在窗口结构中为指定的窗口设置信息 

ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口 

ShowWindow 控制窗口的可见性 

ShowWindowAsync 与ShowWindow相似 

SubtractRect 装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果 

TileWindows 以平铺顺序排列窗口 

UnionRect 装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果 

UpdateWindow 强制立即更新窗口 

ValidateRect 校验窗口的全部或部分客户区 

WindowFromPoint 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口