刚学几天php,然后看到了二次注入这个办法,我就想本地搭建测试下!然后过程如下:
首先附上代码:
[AppleScript] 纯文本查看 复制代码 <html>
<head>
<title>SQL注入</title>
</head>
<body>
<h1>二次注入!<h2>
<form action="" method="post">
用户名注册:<input type="text" name="user"><br>
密码注册:<input type="text" name="pass">
<input type="submit" name="submit" value="注册">
<br>sql插入数据语句如下:</br>
<?php
$user=$_POST["user"];
$pass=$_POST["pass"];
$conn=mysql_connect("localhost","root","root");
if(!$conn){
die("error!");
}
//if(isset($user1) && isset($pass1)){
$user=addslashes($user);
$pass=addslashes($pass);
mysql_select_db("test",$conn);
$sql="insert into test (test1,test2) values ('$user','$pass')";
$sql1=mysql_query($sql,$conn);
if($sql1){
echo $sql . "<br>";
} else {
"写入失败。";
}
/*} else {
echo "请输入账号密码注册!";
}*/
?>
</body>
</html>
[AppleScript] 纯文本查看 复制代码 <html>
<head>
<title>SQL注入</title>
</head>
<body>
<h1>二次注入!<h2>
<form action="" method="post">
账号查询:<input type="text" name="name">
<input type="submit" name="submit"><br>
<?php
header('Content-type: text/html; charset=utf-8');
$name=$_POST["name"];
$name=addslashes($name);
$conn=mysql_connect("localhost","root","root");
if(!$conn){
die("error!");
}
mysql_select_db("test",$conn);
$sql="select * from test where test1='{$name}'";
$sql1=mysql_query($sql,$conn) or die(mysql_error());
$rows=mysql_fetch_array($sql1);
$pass=$rows['test2'];
if($sql1){
//$pass=$rows['test2']
$sql2="select * from test where test2='$pass'";
$sql3=mysql_query($sql2) or die(mysql_error());
echo "<br>";
print_r($sql3);
var_dump($sql3);
echo "查询语句:" . $sql2;
} else {
"查询失败。";
}
?>
</body>
</html>
小菜刚学几天php,所以代码写的特别乱,还有很多地方写的多余。但是都是自己慢慢一步步写的,慢慢百度学习的,
并没有copy网上脚本或者修改的。所以代码太渣,还望大家谅解。
总结帮助不太了解的小伙伴理理思路:
1.首先通过账号密码注册向数据库写入单引号。由于存在转移,所以直接注入是不行的。但是我们的单引号会写入数据库中储存。
2.通过查询账号将我们刚才写入的带有单引号的数据select出来。(我写在密码中的,你也就可以这么理解,找回密码处,你输入账号,他就会将密码select出来给你)
这个时候,并没有对单引号进行过滤,所以就造成了引入单引号。造成了注入。
1.这里我首先写入了账号123456',密码123456的作为测试。很明显看到了单引号被转移了。所以不存在注入。
刚才的单引号存在数据库中的数据却没有转移,直接就是123456'。
然后我将类似的注入语句写入了进去,账号123,密码:1' and updatexml(1,concat(0x7e,(version())),0) or ' 类似的报错语句都可以。
然后我们在查询账号来输出密码。就看到了成功造成了注入。注意看mysql监控中的两条语句的内容和先后顺序。
然后和上面同样的道理写入查询版本的语句。
然后也出来了。二次注入就是先向数据库写入带单引号的注入语句,在来查询出来。
文章只为和大家分享科普文,大牛勿喷!同时问个php问题如下:
如果有学php的小伙伴,可以一起学习php。
|