我被赋予了制作易受攻击的php应用程序的任务,这是我的登录页面代码。问题是我不能让它变得脆弱。当我尝试使用登录字段进行SQL注入时没有任何反应。
如何让它容易受到SQLi攻击or '1'='1'
或类似攻击?
checklogin.php
require "config.php";
$tbl_name="members";
mysql_connect("$servername", "$dbusername", "$dbpassword")or die("Spajanje bezuspješno");
mysql_select_db("$dbname")or die("Selektrianje baze bezuspješno");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
header("location:addnews.php");
}
else {
header("location:login_failed.php");
}
的config.php
$servername='localhost';
$dbusername='root';
$dbpassword='qwe123';
$dbname='ferida';
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function connecttodb($servername,$dbname,$dbusername,$dbpassword)
{
global $link;
$link=mysql_connect ("$servername","$dbusername","$dbpassword");
if(!$link){die("Ne mogu se spojiti na MySQL");}
mysql_select_db("$dbname",$link) or die ("Ne mogu otvoriti bazu podataka".mysql_error());
}
数据库
CREATE TABLE IF NOT EXISTS `members` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`username` varchar(65) NOT NULL,
`password` varchar(65) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4*/ ;
INSERT INTO `members` (`id`, `username`, `password`) VALUES
(1, 'admin', 'P@ssw0rd'),
(2, 'r00t', '1qa2ws'),
(3, 'editor', 'q1w2e3r4');
答案 0 :(得分:4)
它实际上容易受到SQL注入攻击。我怀疑问题可能出在您为用户名和密码输入的值。
您需要确保SQL注入代码创建的SQL语句有效,并返回恰好一行以满足$count==1
检查。
一种方法是输入用户名admin'#
。这将关闭用户名字符串并启动注释,这会导致您输入的任何密码被忽略。因此,您无需提供密码即可登录。
使用1=1
类型的注入也无法正常工作,因为它们通常会返回数据库中的所有行,但$count==1
检查失败。可行的变体是用户名admin
和密码1' or username='admin
。
答案 1 :(得分:1)
'or '1'='1
这将转换来自
的sql语句SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'
到
SELECT * FROM $tbl_name WHERE username='root' and password='' or '1' = '1'
请注意,您必须填写密码周围的引号。您还可以使用sql comment --
或#
忽略任何后续命令
了解这些事情的好工具是DVWA
答案 2 :(得分:0)
您是否正在使用其他服务器进行测试,而不是以后运行的代码?检查设置。 magic_quotes_gpc
是打开还是你的服务器而不是另一个(如果你有PHP< 5.4.0)?