0x00.题目描述:
背景介绍
安全工程师"墨者"最近在练习搭建一个采购系统,为了安全起见,“墨者”对该系统做了部分防护措施,请你帮助他测试系统是否安全。
实训目标
1、掌握SQL注入原理;
2、了解手工注入的方法;
3、了解MySQL的数据结构;
4、了解SQL注入常用注释字符;
5、了解sql注入常用绕过姿势;
解题方向
手工进行SQL注入测试,获取管理密码登录。
0x01.解题思路:
靶场环境:
主界面
维护界面
经过测试,确定注入点在维护界面的URL链接的id参数中,判断字段,然后联合注入即可.
字段数为7
手工注入:
联合注入,来进行爆库:
首先是爆数据库名:
payload:/new_list.php?id=-1' union select 1,2,3,database(),5,6,7%23
接下来就是爆表名,列名以及字段了。
爆数据库表名
爆列名
爆字段名
选择status为1的MD5密码解密下,即可得到flag~
sqlmap注入:
貌似sqlmap爆不出表名,因为表名中含有特殊字符。
0x02.总结:
1.最后一步的爆字段,payload为:/new_list.php?id=-1' union select 1,2,3,(select group_concat(status,username,password) from `(@dmin9_td4b}`),5,6,7%23。
可以看到表名中用了两个反单引号,这是因为有时候数据库的表信息或者字段信息显示出来是key或者是其他的,但是语句没有写错,信息就是显示不出来,那么就在字段或者表的旁边加上反引号,因为MySQL中对有些字符或者保留字做了限制,当命名的时候有些字段存在这些关键字,那么查询的时候就要加上反引号。
2.本来以为将表名转换为十六进制也许可行,但是手工注入还是不行。