㈠ 請問如何用C語言編寫程序在命令提示符中輸入指令。
用程序的話不需要打開命令窗口,直接用system函數輸入命令就行了。
比如system("cls");
就可以清除程序命令窗口。
用法跟直接在cmd窗口輸入指令效果是一樣的,輸入會直接在終端顯示。
㈡ c語言從命令行讀入字元串
第一個錯誤就是你定義的FILE是一個指針,並沒有空間,是沒法接受字元串的輸入的,第二個錯誤是,假設你的指針有空間了,接受輸入的時候也不能用&符號
㈢ CVE-2020-15778 Openssh命令注入漏洞復現
漏洞介紹:
OpenSSH是用於使用SSH協議進行遠程登錄的一個開源實現。通過對交互的流量進行加密防止竊聽,連接劫持以及其他攻擊。OpenSSH由OpenBSD項目的一些開發人員開發, 並以BSD樣式的許可證提供,且已被集成到許多商業產品中。
2020年6月9日,研究人員Chinmay Pandya在Openssh中發現了一個漏洞,於7月18日公開。OpenSSH的8.3p1中的scp允許在scp.c遠程功能中注入命令,攻擊者可利用該漏洞執行任意命令。目前絕大多數linux系統受影響
漏洞環境:
漏洞利用條件:
scp命令:
1、先查看目標機器ssh版本:
2、利用scp命令,用kali對Ubuntu進行寫文件,復制文件:
Ubuntu上成功復制了文件並執行了創建文件的命令,確認漏洞存在:
既然如此,直接反彈shell豈不美哉
這個漏洞可能適用於遠程伺服器禁用了ssh登錄,但是允許使用scp傳文件,而且遠程伺服器允許使用反引號(`),其中有可能由以下幾種方式實現:
詳情參考:
iptables拒絕ssh訪問但不阻止scp和rsync
又水一篇文章~ 歐耶!
OpenSSH 命令注入漏洞(CVE-2020-15778)
OpenSSH命令注入漏洞復現(CVE-2020-15778
CVE-2020-15778 Openssh-SCP 命令注入漏洞復現報告
㈣ 常見WEB攻擊之命令注入
即 Command Injection。是指通過提交惡意構造的參數破壞命令語句結構,從而達到執行惡意命令的目的。
在Web應用中,有時候會用到一些命令執行的函數,如php中system、exec、shell_exec等,當對用戶輸入的命令沒有進行限制或者過濾不嚴導致用戶可以執行任意命令時,就會造成命令執行漏洞。
黑客將構造好的命令發送給web伺服器,伺服器根據拼接命令執行注入的命令,最後講結果顯示給黑客。
以DVWA為例,下面使用ping命令測試IP,正常輸入一個IP或者域名會返回一個正常的返回結果。
當輸入惡意構造的語句 www..com && netstat -an,會把後面的語句也給執行了:
執行結果:
PHP的常見命令執行函數:
system(),exec(),shell_exec(),passthru()
1、system()
system — 執行外部程序,並且顯示輸出
常規用法:
使用PHP執行:
php test1.php www..com
exec — 執行一個外部程序
3、shell_exec()
shell_exec — 通過 shell 環境執行命令,並且將完整的輸出以字元串的方式返回。
4、passthru()
passthru() 函數與 exec() 函數類似,執行外部程序並且顯示原始輸出。
Windows:
用^轉義<
如果加上單引號會寫不進去,如果加雙引號會把雙引號一起寫進去,所以要用^轉義<
Linux:
linux下需要用來轉義<,不過很多php都默認開啟gpc,可以先用16進制轉換一句話再用xxd命令把16進制還原.
<?php eval($_POST[pass]);>
轉換為16進制:
由於我用的是Linux,所以使用payload寫入一句話:
寫入成功:
1、採用白名單,或使用正則表達式進行過濾。
2、不要讓用戶可以直接控制eval()、system、exec、shell_exec等函數的參數。
3、在進入執行命令函數和方法前,對變數進行過濾,對敏感字元進行轉義。
㈤ c語言請問命令行怎樣輸入的
將命令行的目錄轉到你程序.exe文件的目錄(假設為xxx.exe),那麼你輸入xxx.exe 5 hello應該就得了,因為主函數main可以傳入一個int變數和一串字元,數字是要輸出的字元串的字元個數,後面就是你輸入的字元串。
不過你是初學嗎,初學馬上學這個好像有點早,不過也沒事。原理就類似於其他dos命令一樣,後面可以直接接參數,不用scanf的。
還有,更改目錄用cd命令
㈥ c/c++實現dll注入
#include<windows.h>
intDllInject(HANDLEhProcess,constchar*dllname){
unsignedlong(__stdcall*faddr)(void*);
intt;
size_tabc;
HMODULEhdll;
HANDLEhp,ht;
LPVOIDpaddr;
unsignedlongexitcode;
intdllnamelen;
hdll=GetMoleHandleA("kernel32.dll");
if(hdll==0)return0;
faddr=(unsignedlong(__stdcall*)(void*))GetProcAddress(hdll,"LoadLibraryA");
if(faddr==0)return0;
dllnamelen=strlen(dllname)+1;
paddr=VirtualAllocEx(hProcess,NULL,dllnamelen,MEM_COMMIT,PAGE_READWRITE);
if(paddr==0)return0;
WriteProcessMemory(hProcess,paddr,(void*)dllname,strlen(dllname)+1,(SIZE_T*)&abc);
ht=CreateRemoteThread(hProcess,NULL,0,faddr,paddr,0,NULL);
if(ht==0){
VirtualFreeEx(hProcess,paddr,dllnamelen,MEM_DECOMMIT);
return0;
}
WaitForSingleObject(ht,INFINITE);
GetExitCodeThread(ht,&exitcode);
CloseHandle(ht);
VirtualFreeEx(hProcess,paddr,dllnamelen,MEM_DECOMMIT);
return1;
}
intfun(char*exename,constchar*dllname){
STARTUPINFOAsi;
PROCESS_INFORMATIONpi;
if(exename==0)return0;
if(dllname==0)return0;
memset(&si,0,sizeof(si));
memset(&pi,0,sizeof(pi));
if(CreateProcessA(NULL,exename,NULL,NULL,0,CREATE_SUSPENDED,NULL,NULL,&si,&pi)==0)return0;
if(DllInject(pi.hProcess,dllname)==0)return0;
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return1;
}
啟動程序並注入DLL的代碼。