博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二次注入原理及防御
阅读量:4638 次
发布时间:2019-06-09

本文共 967 字,大约阅读时间需要 3 分钟。

原理:

二次注入需要具备的两个条件:

(1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)

(2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户

举例:

(1)在sqli_libs的第24关,其页面如下所示:

 

 

(2)当我们点击Forgot your password?时,出现提示:

 

 (3)因此可以尝试在注册页面进行二次注入,首先,我们注册一个账号,名为:admin'#   ,密码为:123456

 

(4)注册成功,尝试登录admin‘#  ,然后可以查看一下phpmyadmin内存储情况

 

 

 

 

 

(5)而这时的admin原密码是admin,并且两个账号都存储在数据库内的。当我们重新修改admin'#的密码的时候,这里修改为:12345678;可以发现二次注入的威力所在。admin的密码被修改为了:12345678;而admin'#用户的密码并没有发生变化。

 

 

(6)代码审计,尝试分析源码,出现问题的页面很显然是注册页面,与密码修改重置的页面。

注册用户时:

          仅对特殊字符进行了转义,判断输入两次密码是否一致,然后将用户键入,将数据插入至数据库。

          $sql = "insert into users ( username, password) values(\"$username\", \"$pass\")"

这里直接插入了数据

 

修改密码时:

$username= $_SESSION["username"];//直接取出了数据库的数据

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";//对该用户的密码进行更新

$sql = "UPDATE users SET PASSWORD='12345678' where username='admin‘#

 执行成功!

 

防御:

(1)对外部提交数据谨慎

(2)从数据库取数据时,不能轻易相信查询出的数据,要做到同样的转义或是甄别

转载于:https://www.cnblogs.com/cute-puli/p/11145758.html

你可能感兴趣的文章
java-Date-DateFormat-Calendar
查看>>
封装CLLocationManager定位获取经纬度
查看>>
我的第一篇博客-(Eclipse中或Myeclipse中如果不小心删除了包那可怎么办?)
查看>>
对easyui datagrid组件的一个小改进
查看>>
类似以下三图竞争关系的IT企业
查看>>
Qt5启动画面
查看>>
清明节
查看>>
谈谈一些有趣的CSS题目(七)-- 消失的边界线问题
查看>>
ubuntu如何安装svn客户端?
查看>>
arcgis for javascript (3.17)
查看>>
【MySQL】Win7下修改MySQL5.5默认编码格式
查看>>
AI之路,第二篇:python数学知识2
查看>>
windows10关闭更新,windowsUpdate禁用无效 windows无限重启 一分钟无限重启 win10无法连接到SENS服务...
查看>>
[LeetCode] Alien Dictionary
查看>>
[LintCode] 空格替换
查看>>
JSSDK微信支付封装的支付类方法,代码比较齐全,适合收藏
查看>>
Java线程及Jvm监控工具
查看>>
Blutooth MESH
查看>>
PHP用curl发送get post put delete patch请求
查看>>
[BZOJ 1053] 反素数
查看>>