前言
主要是用来记录自己在平时学习到的关于sql注入的技巧和用法,因为有的题目找不到了,这里主要提供思路。持续更新中…..
select case when …
源码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
sql:
CREATE TABLE IF NOT EXISTS `client_ip` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=34 ;
CREATE TABLE IF NOT EXISTS `flag` (
`flag` varchar(32) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
INSERT INTO `flag` (`flag`) VALUES
('cdbf14c9551d5be5612f7bb5d2867853');
*/
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="root";
$pass="root";
$db="CTFmaster";
$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);
这里可以看到从X-Forwarded-For获取ip,是我们可控的,未经过滤,数据进入数据库,使用时间盲注,if(ascii(substr((),1,1)),sleep(5),1)这样的,会由于这段代码而被截断。1
2$ip_arr = explode(',', $ip);
return $ip_arr[0];
这里使用select case when 判断依据 then (判断为true,则执行此命令) else (判断为false,则执行此命令) end;