恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
这就是二次注入(不是注入两次),下面为你将演示在不知道对方密码的情况下实现sql注入恶意更改用户的密码!
首先我们得有一个用于Web渗透的SQL测试页面地址,这里我们以SQLlib进行测试,关注@小白嘿客,前往下方《从新手到Web白帽黑客》视频课程获取完整学习!
注册用户的地址是:
192.168.31.16/sql/Less-24/index.php
这里我们需要自己再创建一个用户密码修改php文件,用于直接访问数据库并修改用户密码的2.php;加入上方web专栏即可前往专栏资料库下载对应的2.php文件,然后放到win7靶机的下面路径位置!
代码如下:
大概的意思就是:接收用户的三个参数输入(要改密码的用户名,新密码,原始密码),这是一个只能修改已知用户名和已知密码的php文件。但是下面我们可以利用第一次注册的恶意用户名来躲避这个php文件没有过滤单引号导的机制来实现sql二次注入!
火狐访问:
192.168.31.16/sql/Less-24/index.php
然后点击右下角注册新用户!
这里我们注册一个正常的用户,假设这个用户是别人的,我们不知道密码!
用户名:yang
密码:111111
再次使用注册页面,注册一个新的用户:
用户名:yang' -- -
密码:222222
有空格,--代表注释后面,但是为了看得清楚,又使用一个空格和-,但是这个空格和-本身包括后面所有的语句都会被前面的--给注释掉!
此时前往win7靶机的phpmyadmin查看下:
已经注册在数据库里了!
既然注册,我们来访问2.php,修改yang' -- -这个恶意用户的密码,然后你就会发现我们要修改yang' -- -这个用户名的密码,没想到却将yang用户名的密码给修改了!
这样我们就能在不知道yang的密码下,就能登录yang用户了,从而造成数据泄露!
访问2.php需要指定用户名,新密码,旧密码!
火狐浏览:
192.168.31.16/sql/Less-24/2.php?username=yang' -- -&newpass=999999&cpass=222222
意思是:将已知用户名yang' -- -的原始密码222222改成新密码999999!真的会如愿以偿吗?
肯定不会的,先看下图:
你会发现:被执行sql更新密码的语句时,先要找到用户名'yang'-- -',但是由于用户名是恶意的yang'-- -,sql语句本身的前后单引号会形成前面'yang'的闭合!后面的都被-- -注释掉了!这样明摆着就是修改yang这个不是我们自己的用户密码了,现在你得到的用户名是yang,密码是999999,登陆肯定也是yang的所有资料!但自己创建的yang'-- -密码依然没有被修改,真是隔山打牛啊!
我们执行看看,显示成功!
不信?我们去数据库看看有没有修改成功!
发现yang的密码无形被我们修改成功999999了。
那我们来登录下yang的用户,登录成功!当然自己的yang'-- -还是能用原来的密码登陆的。
总结:二次注入重点是,第一次需要往数据库存入数据,这一步不是注入!但是存入的数据是恶意的。第二次我们来提取数据,比如我们修改这个恶意用户名,导致将他人的用户名密码修改了,这就是二次注入的一种实现方式!