题目
链接地址:http://123.206.87.240:8002/web15/
分析
打开页面后:
分析页面的php代码
通过源码分析,
注入点在x-forwarded-for:client,proxy1,proxy2的client处。关于XFF移步博文
获取用户ip,并把ip插入到client_ip表中的ip列中
因为源码第一行,关闭了错误报告,所以没有回显。在此采取基于时间的盲注。
基于时间盲注的常用函数
sleep() //延迟函数
BENCHMARK(count,expr)函数 //将expr语句执行count次来达到延迟的目的
if(condition,true,false) //条件语句
If表达式:IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3
ascii() //转换成ascii码
substring(“string”,strart,length) //mid()也一样,取出字符串里的第几位开始,长度多少的字符
Mid函数:MID(column_name,start[,length])
选择合适函数绕过
本题中,源码里对ip这个注入点进行了“,”过滤,所以if表达式不再适用
在此采用 case when exp1 then sleep(5) else 1 end
来绕过对“,”的限制
因为exp1会用到substr来进行剪切,而substr(str,start,length)也存在“,”,于是采用substr (str) from start for length
来绕过对“,”的限制
与盲注相关数据库知识
information_schema 是mysql中的信息数据库。保存着关于mysql服务器所维护的所有其他数据库的信息
在infomation_schema中有几个很重要的表
SCHEMATA表
SCHEMATA表:提供了当前mysql实例中所有数据库的信息
SCHEMA_NAME记录着所有数据库名
TABLES表
tables表:提供了当前数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。
TABLE_SCHEMA中记录着数据库名,TABLE_NAME中记录该数据库的所有表名
是**show tables form schema_name
**的结果取之此表
COLUMNS表
columns表提供了表中列的信息,详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename
的结果取之此表
TABLE_SCHEMA记录数据库信息,
TABLE_NAME记录表信息,
COLUMN_NAME记录列信息
常用sql语句
select database(); 返回当前使用的数据库
concat(str1,str2)函数,将多个字符串连接成一个字符串。
select concat (col1,col2,...) as info from tables;
concat_ws()可以指定分隔符