SQL二次注入

打印 上一主题 下一主题

主题 1020|帖子 1020|积分 3060

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
1.什么是二次注入?
2.二次注入过程
2.1探求注入点 
2.2注册admin'#用户
2.3修改暗码


1.什么是二次注入?

当用户提交的恶意数据被存入数据库后,因为被过滤函数过滤掉了,所以无法生效,但应用程序在从数据库中拿出该用户名时没有对'和#进行转义,导致将暗码的检测注释了,虽然看似后端代码将我们输入的'进行了转义,但是当将输入的数据存储到数据库中时,会将'加上存储的(数据库存储数据的特征),如许就实现了二次注入,也叫做存储型SQL注入。
2.二次注入过程

登录页面

注册页面 
 修改暗码页面

2.1探求注入点 



进行一些简单的测试,发现都无法乐成 
检察后端代码发现,后端代码对我们输入的登任命户名和暗码进行了过滤,因此无法注入
  1. function sqllogin(){
  2.    $username = mysql_real_escape_string($_POST["login_user"]);  //过滤了单双引号
  3.    $password = mysql_real_escape_string($_POST["login_password"]);//过滤了单双引号
  4.    $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
  5. //$sql = "SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'";
  6.    $res = mysql_query($sql) or die('You tried to be real smart, Try harder!!!! :( ');
  7.    $row = mysql_fetch_row($res);
  8.         //print_r($row) ;
  9.    if ($row[1]) {
  10.                         return $row[1];
  11.    } else {
  12.                       return 0;
  13.    }
  14. }
复制代码
但是发现pass_change.php文件中,修改暗码时,当从数据库中找出所修改的用户的暗码时,没有对username进行过滤,导致出现二次注入点。
  1. if (isset($_POST['submit']))
  2. {
  3.        
  4.        
  5.         # Validating the user input........
  6.         $username= $_SESSION["username"];
  7.         $curr_pass= mysql_real_escape_string($_POST['current_password']);
  8.         $pass= mysql_real_escape_string($_POST['password']);
  9.         $re_pass= mysql_real_escape_string($_POST['re_password']);
  10.        
  11.         if($pass==$re_pass)
  12.         {       
  13.                 $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
  14.                 $res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
  15.                 $row = mysql_affected_rows();
  16.                 echo '<font size="3" color="#FFFF00">';
  17.                 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语句就会生效
  1. if (isset($_POST['submit']))
  2. {
  3.        
  4.        
  5.         # Validating the user input........
  6.         $username= $_SESSION["username"];
  7.         $curr_pass= mysql_real_escape_string($_POST['current_password']);
  8.         $pass= mysql_real_escape_string($_POST['password']);
  9.         $re_pass= mysql_real_escape_string($_POST['re_password']);
  10.        
  11.         if($pass==$re_pass)
  12.         {       
  13.                 $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
  14.                 $res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
  15.                 $row = mysql_affected_rows();
  16.                 echo '<font size="3" color="#FFFF00">';
  17.                 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表