题目

链接地址: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()可以指定分隔符

group_concat() 会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

本文详述了如何进行SQL注入攻击,特别是基于时间的盲注。通过分析一个在线练习平台的题目,解释了如何识别注入点、绕过限制、利用information_schema表获取数据库信息,以及使用group_concat函数进行数据爆破。文章涵盖了注入的基本步骤,从爆库到爆字段内容,是理解SQL注入技巧的实用教程。
&spm=1001.2101.3001.5002&articleId=96715048&d=1&t=3&u=40ba4266b4e540efafaf194ab2a90819)
1478

被折叠的 条评论
为什么被折叠?



