链接:https://pan.baidu.com/s/1j2AzW9_dzqDz6i91eARfEw
提取码:8zel
seay源码审计
daochu.php 疑似SQL注入漏洞
在seay审计后的第一条,提示sql漏洞,跟进查看源码,当检测没有传参all时,会执行sql语句且无任何过滤 将括号进行闭合,执行语句id=1) or if(1,sleep(3),1)%23 ,发现进行了拦截 明明在执行语句中没有过滤却进行了拦截,于是全文搜索了下输入内容存在危险字符,安全起见,已被本站拦截 ,看看是在那个地方做了过滤 在360webscan.php中发现该语句在webscan_page方法中 全文搜索在何处调用了该方法,发现只有webscan_StopAttack中调用 继续搜索何处使用该方法,发现在360webscan.php下方有一条if判断语句,在判断条件中有个webscan_white 方法 跟进看一下,这里会对该方法的第一个参数和$_SERVER['SCRIPT_NAME'] 进行一个匹配,如果匹配成功,就会返回false,而返回false的话上边的if语句就不会执行,从而就不会执行webscan_StopAttack() 方法,就不会对我们输入的内容进行检测 这里记录下$_SERVER['SCRIPT_NAME'] 及其他参数的一些用法 例:
http://127.0.0.1/example/index.php/dir/test
$_SERVER['PHP_SELF'] 得到:/dir/test
//无论访问的URL地址是否有index.php,它都会自动的返回 index.php.但是如果在文件名后面再加斜线的话,就会把后面所有的内容都返回
$_SERVER['SCRIPT_NAME'] 得到:/example/index.php
//返回当前的文件名
$_SERVER['REQUEST_URI'] 得到:/example/index.php/dir/test
知道这个之后,就去查看一下if语句中调用的$webscan_white_directory 变量,在webscan_Cache.php发现该变量 变量没有任何的值且不可控,就无法绕过正则检测了,此利用点就无法使用了 此后上网搜索了一下360webscan 的漏洞,发现在早期的文件里,$webscan_white_directory 变量是有值的即:
//后台白名单,后台操作将不会拦截,添加"|"隔开白名单目录下面默认是网址带 admin /dede/ 放行
$webscan_white_directory='admin|\/dede\/|\/install\/';
该语句经过$_SERVER['SCRIPT_NAME'] 后,会得到当前文件的路径,如果其中有admin 或/dede/等字眼即会绕过正则检测,返回false,从而使webscan_StopAttack方法无法执行 知道这个后,我把$webscan_white_directory 附上了如下的值 并且在我传参的路径中本身就存在/admin,因此就实现该sql注入
http://127.0.0.2/fish/admin/daochu.php?id=1) or if(1,sleep(3),1) %23
执行后出现sleep延迟 参考文章: 360webscan防注入脚本全面绕过 | 离别歌 (leavesongs.com)
member.php 存在SQL注入
seay审计中提示pass.php可能存在sql注入 跟进后查看,发现比何处$name 处会经过daddslashes函数转义处理,绕过这个函数有四种方法:
- SQL语句中传参无单引号闭合
- 宽字节注入
- 使用iconv().mb_convert_encodeing()函数导致的宽字节注入
- 编码解码导致的URL绕过
参考:php代码审计之绕过addslashes()函数的几种情况_getcode大魔王_新浪博客 (sina.com.cn) 很明显这四种方式都行不通,在此后方还有个$udata 变量,跟进看一下,在member.php中找到,很明显将$udata 的值转为我们想要的值有些难,但后边的$admin_user 是完全可控的 前边有islogin和admin_user的判断,所以传参islogin任意值,并将admin_user传参1' or if(1,sleep(3),1) # base64编码后的值,出现延时注入
2018.php 疑似存在XFF注入
seay审计发现X-Forwarded-For漏洞 跟进查看是定义了一个方法 explode 仔细查看后发现该方法中用explode函数绕过了时间盲注的逗号“,“ ip2long 并且在下方有个ip2long函数,会将ipv4的地址转为整型,若我们输入的不是ip地址,例如sql语句等则会返回false
所以该利用点行不通
|