攻机:172.16.90.107
靶机:172.16.90.109
直接看登陆界面源代码,并进行分析
$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值,收集来自 method=”get” 的表单中的值
在这里,将收集到的’usernm’变量赋值给了$username,将收集到的’passwd’变量赋值给了$password
mssql_connect()是一个用于PHP连接SQL Server数据库的函数
整个函数的返回值为布尔类型的变量,如果连接数据库成功,布尔类型的变量的值就为真,否则为假
这里将这个布尔类型的变量赋值给了$conn这个变量!
接下来,如果$conn的值为假,!$conn的值就为真,注意这里面!是“非”的意思
mssql_select_db()为选择数据库的函数,要想让这个函数返回值为真,前提是存在名称为users的数据库**才行
后面创建了一条SQL语句,值为GET形式参数username和password传送的值
然后对这个SQL语句进行了查询,是就输出,不是就报错
进行加固
如果在数据库中查询到了相应的结果,则mssql_fetch_object返回值不为空,否则为空
使用if语句判断mssql_fetch_object返回值,不为空执行下面语句,为空报错
在判断输入的密码是否与数据库中账户对应用户是否正确,正确跳到正确界面,否则报错
所以这里只对用户名进行了判断,还是可以输入正确账号,然后密码处进行注入
再次加固
对输入的数据进行了addslashes,添加反斜杠,让其成为“数据”
如果数据中包含&、 直接替换为\%和\,让其成为“数据”