马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目录
1.什么是二次注入?
2.二次注入过程
2.1探求注入点
2.2注册admin'#用户
2.3修改暗码
1.什么是二次注入?
当用户提交的恶意数据被存入数据库后,因为被过滤函数过滤掉了,所以无法生效,但应用程序在从数据库中拿出该用户名时没有对'和#进行转义,导致将暗码的检测注释了,虽然看似后端代码将我们输入的'进行了转义,但是当将输入的数据存储到数据库中时,会将'加上存储的(数据库存储数据的特征),如许就实现了二次注入,也叫做存储型SQL注入。
2.二次注入过程
登录页面
注册页面
修改暗码页面
2.1探求注入点
进行一些简单的测试,发现都无法乐成
检察后端代码发现,后端代码对我们输入的登任命户名和暗码进行了过滤,因此无法注入
- function sqllogin(){
-
- $username = mysql_real_escape_string($_POST["login_user"]); //过滤了单双引号
- $password = mysql_real_escape_string($_POST["login_password"]);//过滤了单双引号
- $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
- //$sql = "SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'";
- $res = mysql_query($sql) or die('You tried to be real smart, Try harder!!!! :( ');
- $row = mysql_fetch_row($res);
- //print_r($row) ;
- if ($row[1]) {
- return $row[1];
- } else {
- return 0;
- }
-
- }
复制代码 但是发现pass_change.php文件中,修改暗码时,当从数据库中找出所修改的用户的暗码时,没有对username进行过滤,导致出现二次注入点。
- if (isset($_POST['submit']))
- {
-
-
- # Validating the user input........
- $username= $_SESSION["username"];
- $curr_pass= mysql_real_escape_string($_POST['current_password']);
- $pass= mysql_real_escape_string($_POST['password']);
- $re_pass= mysql_real_escape_string($_POST['re_password']);
-
- if($pass==$re_pass)
- {
- $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
- $res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
- $row = mysql_affected_rows();
- echo '<font size="3" color="#FFFF00">';
- echo '<center>';
复制代码 我们是否可以先注册一个类似admin'#的用户,然后当对admin‘#用户进行修改暗码时来进行注入呢?话不多说,直接开干
2.2注册admin'#用户
发现可以注册,与我们假想的一样
然后进行登录
顺利登录,此时页面显示YOU ARE LOGGED IN AS admin'#
2.3修改暗码
根据pass_change.php文件的代码分析,current password可以随便填写,只要New Password便是Retype Password,程序就会进入if语句中,sql语句就会生效
- if (isset($_POST['submit']))
- {
-
-
- # Validating the user input........
- $username= $_SESSION["username"];
- $curr_pass= mysql_real_escape_string($_POST['current_password']);
- $pass= mysql_real_escape_string($_POST['password']);
- $re_pass= mysql_real_escape_string($_POST['re_password']);
-
- if($pass==$re_pass)
- {
- $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
- $res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
- $row = mysql_affected_rows();
- echo '<font size="3" color="#FFFF00">';
- echo '<center>';
复制代码 此时我们将修改的暗码进行提交后,admin'#进入sql语句中,上述sql语句就会变为
$sql = "UPDATE users SET PASSWORD='$pass' where username='$admin'#' and password='$curr_pass' ";
标红的地方就会被注释掉,就会乐成修改admin的暗码
此时我们利用admin用户进行登录,测试admin的暗码是否被修改
可以见到,我们确实用admin用户乐成登录,在这之前我们是不知道admin用户的暗码的
这就是sql二次注入,可以利用它来修改任意用户的暗码,所以危害是比较大的
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |