将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密 *** 作,达到成功创建连接池的目的。Tomcat默认使用DBCP连接池(基于common-pool的一种连接池实现),可在http://jakarta.apache.org/commons/dbcp/下载commons-dbcp源码包commons-dbcp-1.4-src.zip,�¯.org.apache.commons.dbcp.BasicDataSourceFactory类修æ¹ï¼ææ°æ®åºå¯ç å段ï¼å å¯åçå¯æï¼ç¨è§£å¯ç¨åºè§£å¯ï¼è·å¾è§£å¯åçææå³å¯ã
å ·ä½å®ç°ï¼
1. ä¿®æ¹org.apache.commons.dbcp.BasicDataSourceFactoryç±»æ件
æ¾å°æ°æ®æºå¯ç 设置é¨å
value = properties.getProperty(PROP_PASSWORD)
if (value != null) {
dataSource.setPassword(value)
}
ä¿®æ¹ä¸ºï¼
value = properties.getProperty(PROP_PASSWORD)
if (value != null) {
dataSource.setPassword(Encode.decode(value))
}
å°é ç½®æ件ä¸çâå¯ç âï¼å å¯åçç»æï¼ååºï¼è°ç¨å 解å¯ç±»ä¸ç解å¯æ¹æ³Encode.decode(value)è¿è¡è§£å¯ã
2. å å¯ç±»Encode.java,æ¬ä¾ä¸ä½¿ç¨å å¯è§£å¯æ¨¡åæ¯è¾ç®ååªæ¯ç¨æ¥è¯´æé®é¢ï¼å¯æ为ææçåå è¿å¶ä¸²ã
public class Encode {
//ç¼ç -æ®éå符串转为åå è¿å¶å符串
public static String encode(String password){
String result = ââ
byte[] psd = password.getBytes()
for(int i=0i<psd.lengthi++){
result += Integer.toHexString(psd[i]&0xff)
}
return result
}
//解ç âåå è¿å¶å符串转为æ®éå符串
public static String decode(String password){
String result = ââ
password = password.toUpperCase()
int length = password.length() / 2
char[] hexChars = password.toCharArray()
byte[] d = new byte[length]
for (int i = 0i <lengthi++) {
int pos = i * 2
d[i] = (byte) (charToByte(hexChars[pos]) <<4 | charToByte(hexChars[pos + 1]))
}
result = new String(d)
return result
}
//å符转åè
public static byte charToByte(char c) {
return (byte) â0123456789ABCDEFâ.indexOf(c)
}
}
3. æ°æ®åºè¿æ¥æ± æ件ï¼çº¢è²åä½ä¸ºæ°æ®æºé ç½®ä¸å¯ç 设置ï¼æ¤æ¶å·²ç»æ¹ä¸ºå¯æå½¢å¼ã
<?xml version=â1.0â² encoding=âutf-8â²?>
<Context docBase=âreportmisâ path=â/reportmisâ privileged=âtrueâ workDir=âwork\Catalina\localhost\reportmisâ>
<Resource auth=âContainerâ name=âmis2datasourceâ type=âjavax.sql.DataSourceâ/>
<ResourceParams name=âmis2datasourceâ>
<parameter>
<name>password</name>
<value>696e65743231</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>wanfang</value>
</parameter>
</ResourceParams>
</Context>
4. å°ä¿®æ¹åçBasicDataSourceFactory.javaåæ°æ·»å çEncode.javaç¼è¯åçclassç±»æ件éæ°æå è¿commons-dbcp-1.4.jarï¼å°è¯¥å æ·è´è¿tomcatä¸çcommon/libç®å½ä¸ï¼éå¯tomcatãæ¤æ¶tomcatä¸é¨ç½²çåºç¨å¨è¿æ¥æ°æ®æºçæ¶åé½å¯ä»¥å¨ä¸æ´é²å¯ç ææçæ åµä¸è¿è¡è¿æ¥ã
1 是的,#是properties文件中的注释符号,如果密码中含有#,则properties文件无法正确识别密码。2 这是因为#会被解释为注释符号,导致密码被截断,无法正确链接数据库。
3 解决方法是在密码中使用转义符号将#进行转义,例如将#替换为\#即可正常链接数据库。
1.MySQL数据库密码破解
MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件读取权限后即可直接从数据库连接文件中读取,例如asp代码中的conn.asp数据库连接文件,在该文件中一般都包含有数据库类型,物理位置,用户名和密码等信息;而在MySQL中即使获取了某一个用户的数据库用户(root用户除外)的密码,也仅仅只能 *** 作某一个用户的数据库中的数据。
在实际攻防过程中,在获取Webshell的情况下,是可以直下载MySQL数据库中保留用户的user.MYD文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码那么就可以正大光明的 *** 作这些数据,虽然网上有很多修改MySQL数据库用户密码的方法,却不可取,因为修改用户密码的事情很容易被人发现!
1.1MYSQL加密方式
MYSQL数据库的认证密码有两种方式,MYSQL 4.1版本之前是MYSQL323加密,MYSQL 4.1和之后的版本都是MYSQLSHA1加密,MYSQL数据库中自带Old_Password(str)和Password(str)函数,它们均可以在MYSQL数据库里进行查询,前者是MYSQL323加密,后者是MYSQLSHA1方式加密。
(1)以MYSQL323方式加密
SELECTOld_Password(&#39bbs.antian365.com&#39)
查询结果MYSQL323= 10c886615b135b38
(2)以MYSQLSHA1方式加密
SELECTPassword(&#39bbs.antian365.com&#39)
查询结果MYSQLSHA1= *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2
执行结果如图1所示,MYSQL323加密中生成的是16位字符串,而在MYSQLSHA1中生存的是41位字符串,其中*是不加入实际的密码运算中,通过观察在很多用户中都携带了“*”,在实际破解过程中去掉“*”,也就是说MYSQLSHA1加密的密码的实际位数是40位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)