首页 > 其他分享 >最新二次注入攻击和代码分析技术

最新二次注入攻击和代码分析技术

时间:2024-03-11 10:11:52浏览次数:23  
标签:username 二次 代码 页面 SQL test php id 注入

二次注入攻击

二次注入攻击的测试地址在本书第2章。

double1.php页面的功能是添加用户。

第一步,输入用户名test'和密码123456,如图4-45所示,单击“send”按钮提交。

 

图4-45  

 

页面返回链接/4.3/double2.php?id=4,是添加的新用户个人信息的页面,访问该链接,结果如图4-46所示。

 

 

 

图4-46  

 

从返回结果可以看出,服务器端返回了MySQL的错误(多了一个单引号引起的语法错误),这时回到第一步,在用户名处填写test' order by 1%23,提交后,获取一个新的id=5,当再次访问double2.php?id=5时,页面返回正常结果;再次尝试,在用户名处填写test' order by 10%23,提交后,获取一个新的id=6,当再访问double2.php?id=6时,页面返回错误信息(Unknown column '10' in 'order clause'),如图4-47所示。

 

 

 

图4-47   

 

这说明空白页面就是正常返回。不断尝试后,笔者判断数据库表中一共有4个字段。在用户名处填写-test' union select 1,2,3,4%23,提交后,获取一个新的id=7,再访问double2.php?id=7,发现页面返回了union select中的2和3字段,结果如图4-48所示。

 

 

 

图4-48

 

在2或3的位置,插入我们的语句,比如在用户名处填写-test' union select 1,user(), 3,4#,提交后,获得一个新的id=8,再访问double2.php?id=8,得到user()的结果,如图4-49所示,使用此方法就可以获取数据库中的数据。

  

 

图4-49

 

 



二次注入代码分析

二次注入中double1.php页面的代码如下所示,实现了简单的用户注册功能,程序先获取GET参数“username”和参数“password”,然后将“username”和“password”拼接到SQL语句中,最后使用insert语句将参数“username”和“password”插入数据库。由于参数“username”使用addslashes函数进行了转义(转义了单引号,导致单引号无法闭合),参数“password”进行了MD5哈希,所以此处不存在SQL注入漏洞。

<?php    $con=mysqli_connect("localhost","root","123456","test");    if (mysqli_connect_errno())    {        echo "连接失败: " . mysqli_connect_error();    }    $username = $_POST['username'];    $password = $_POST['password'];    $result = mysqli_query($con,"insert into users(`username`,`password`) values ('".addslashes($username)."','".md5($password)."')");    echo '<a href="/4.3/double2.php?id='. mysqli_insert_id($con) .'">用户信息</a>';?>

当访问username=test'&password=123456时,执行的SQL语句如下:

insert into users(`username`,`password`) values ('test\'', 'e10adc3949ba59abbe56e057f20f883e')

从图4-50所示的数据库中可以看出,插入的用户名是test'。

  

 

图4-50  

 

在二次注入中,double2.php中的代码如下: 

<?php$con=mysqli_connect("localhost","root","123456","test");if (mysqli_connect_errno()){echo "连接失败: " . mysqli_connect_error();}$id = intval($_GET['id']);$result = mysqli_query($con,"select * from users where `id`=". $id);$row = mysqli_fetch_array($result);$username = $row['username'];$result2 = mysqli_query($con,"select * from winfo where `username`='".$username."'");if($row2 = mysqli_fetch_array($result2)){echo $row2['username'] . " : " . $row2['address'];}else{echo mysqli_error($con);}?>

先将GET参数ID转成int类型(防止拼接到SQL语句时,存在SQL注入漏洞),然后到users表中获取ID对应的username,接着到winfo表中查询username对应的数据。

但是此处没有对$username进行转义,在第一步中注册的用户名是test',此时执行的SQL语句如下:

select * from winfo where `username`='test''

单引号被带入SQL语句中,由于多了一个单引号,所以页面会报错。

 

 

Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。

平台已开设Web安全零基础就业,Web高级安全攻防进阶,红队实战攻防特训,Java代码安全审计,恶意代码分析与免杀实战,CTF基础实战特训营,网络安全应急响应,安全工具开发,AI与网络安全等系统培训课程。实验室出版安全图书《Web安全攻防:渗透测试实战指南》、《内网安全攻防:渗透测试实战指南》、《Python安全攻防:渗透测试实战指南》、《Java代码审计:入门篇》等。

扫描客服微信 获取更多课件+学习资料

 

标签:username,二次,代码,页面,SQL,test,php,id,注入
From: https://www.cnblogs.com/ms08067/p/18065442

相关文章

  • Go语言精进之路读书笔记第49条——使用Delve调试Go代码
    49.1关于调试,你首先应该知道的几件事1.调试前,首先做好心理准备2.预防bug的发生,降低bug的发生概率(1)充分的代码检查(2)为调试版添加断言(3)充分的单元测试(4)代码同级评审3.bug的原因定位和修正(1)收集“现场数据”(2)定位问题所在(3)修正并验证49.2Go调试工......
  • 动态规划 代码随想录
    step:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组需要重做的题:343(整数拆分) 96(二叉搜索树的种类)简单题:509.斐波那契数   70.爬楼梯   746.使用最小花费爬楼梯注意用step一步步来,注意dp【0】是否有含义。 ......
  • 升级Win11专业工作站版密钥,无需代码一秒升级
    Windows11专业工作站版是Windows11的高级版本,专为满足对性能、可靠性和安全性有最高要求的专业工作站而设计。它具有Windows11专业版的所有功能,以及一些其他功能,例如:对四路CPU和6TB内存的支持支持ReFS文件系统支持远程直接内存访问(RDMA)支持非易失性内存......
  • TaxoRec部署与代码阅读
    部署环境Pytorch1.8.1Python3.7.3condacreate-npytorch-taxorecpython=3.7.3pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpletorch==1.8.1pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplegeoopt==0.2.0::根据geoot文档,geoot0.2.0以上版本安......
  • Ubuntu 22.04内核代码下载、编译、调试
    1下载Ubuntu Kernel参考《Kernel/Dev/KernelGitGuide-UbuntuWiki》,下载Ubuntu22.04代码:gitclonehttps://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy2修改、编译、安装UbuntuKernel参考《Kernel/BuildYourOwnKernel-UbuntuWiki》。......
  • 【性能测试】性能测试各知识第1篇:性能测试大纲【附代码文档】
    性能测试完整教程(附代码资料)主要内容讲述:性能测试大纲。。。。。。。。。。。。。。全套笔记资料代码移步:前往gitee仓库查看感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~性能测试大纲序号阶段概述01入门1.认识性能测试分类-(负载测试、压力测试、并发测试、......
  • NetCore 依赖注入
    .AddTransient<IFoo,Foo>()////ImplementationType根据类型.AddScoped<IBar>(_=>newBar())//ImplementationFactory通过工厂创建.AddSingleton<IBaz>(newBaz());//ImplementationInstance实现实例添加对象注册并注册不同作用域,并遍历注册到容器内。1Implementat......
  • 代码随想录 第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之
    leetcode:110.平衡二叉树-力扣(LeetCode)classSolution{publicbooleanisBalanced(TreeNoderoot){returngetblan(root)!=-1;}privateintgetblan(TreeNoderoot){//为空退出if(root==null)return0;//左节......
  • 【Django开发】0到1美多商城项目md教程第1篇:欢迎来到美多商城!【附代码文档】
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsg......
  • 【Python使用】python高级进阶知识md总结第2篇:HTTP 请求报文,HTTP响应报文【附代码文
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......