亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 我和expression的日與被日 經典分析

我和expression的日與被日 經典分析

熱門標簽:寧夏保險智能外呼系統哪家好 溫嶺代理外呼系統 激戰黃昏地圖標注說明 防城港市ai電銷機器人 不同的地圖標注 怎么更改地圖標注電話 臨滄移動外呼系統哪家有 隨州銷售外呼系統平臺 交行外呼系統有哪些
by jno
2007-11-29
http://www.ph4nt0m.org

當你第一次用expression方式來xss時,你肯定傻眼了,不停彈框,沒法關閉瀏覽器,最終你只能祭出任務管理器將進程結束。也許你其他TAB頁正有填到一半尚未提交的表單,你就這樣被expression給日了,心里非常郁悶,于是就要想辦法干它。

很多人第一反應就是cookie,沒錯這是個好辦法:
div style="width: expression(if(document.cookie.indexOf('xxxx')0){alert(1);document.cookie='xxxx=1;'+document.cookie;})">/div>
不過這樣寫有個問題,就是被攻擊者瀏覽器只能執行一次你的alert,cookie的作用域大于一次頁面執行,適合用來做跨頁面的標識,而不是僅僅用來控制一個頁面里的某段代碼的執行次數,而且你測試起來也挺麻煩,弄得不好就要清cookie。

循著這個思路很自然就會想到在頁面里設置標識,于是就有了第二種方法:
div style="width: expression(if(!window.xxx){alert(1);window.xxx=1;})">/div>
使用全局變量來做標識,使我的代碼在這個頁面級別只執行一次,這樣是一個比較完美的辦法,也是目前被使用的最多的辦法。

但是到這里總還覺得不爽,雖然我的alert只被執行了一次,但是判斷代碼還是在被不停的執行,我們還是在被它日,只不過感覺不出來而已了,我們的目標是日它,辦法就是執行完我們的代碼后刪除這條expression,翻閱MSDN你很快能找到合適的方法:

object.style.removeExpression(sPropertyName)

看起來很美,可是你把這個語句放進expression內部用它來刪除expression自身卻怎么也不能成功,該死的alert還是會一遍遍的彈出來。使用setTimeout延遲執行?失敗;使用execScript在全局執行?失敗;結合setTimeout和execScript在延遲在全局執行?還是失敗;在body尾部append一個外部script來執行?失敗;在body尾部append一個外部script并且setTimeout 延遲并且execScript全局執行?草,終于tmd成功了:
!------1.htm------>
html>
style>
body {
width: expression(eval(String.fromCharCode(0x61,0x6C,0x65,0x72,0x74,0x28,0x31,0x29,0x3B,0x69,0x66,0x28,0x64,0x6F,0x63,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x62,0x6F,0x64,0x79,0x29,0x7B,0x76,0x61,0x72,0x20,0x73,0x3D,0x64,0x6F,0x63,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x63,0x72,0x65,0x61,0x74,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x28,0x22,0x73,0x63,0x72,0x69,0x70,0x74,0x22,0x29,0x3B,0x64,0x6F,0x63,0x75,0x6D,0x65,0x6E,0x74,0x2E,0x62,0x6F,0x64,0x79,0x2E,0x61,0x70,0x70,0x65,0x6E,0x64,0x43,0x68,0x69,0x6C,0x64,0x28,0x73,0x29,0x3B,0x73,0x2E,0x73,0x72,0x63,0x3D,0x22,0x31,0x2E,0x6A,0x73,0x22,0x3B,0x7D)));
/*alert(1);if(document.body){var s=document.createElement("script");document.body.appendChild(s);s.src="1.js";}*/
}
/style>
body>
/body>
/html>
//--------1.js---------//
setTimeout(function(){execScript("document.body.style.removeExpression(\"width\")");}, 0);
可是還有那么一點不完美,就是無論怎么樣,最少也要執行兩次,不過我爽了,總算把這個expression給日了。當然如果你是個完美主義者,可以用這個方法結合if(!window.xxx)法。

各位看官看到這里,可能已經嚴重懷疑我是被虐狂,這么多方法測試下來,我還不彈框框彈到崩潰?其實我并非浪得虛名,測之前早有準備,先厚者臉皮去幻影郵件列表跪求alert框框原理,沒想到大家非常熱情地給予幫助,最終zzzevazzz大俠最先找到實現API是MessageBoxIndirectW,從 win2k源代碼中覓得。然后又花上半日工夫草成一個hook MessageBoxIndirectW的小工具,可惜又遇到個小問題至今沒有解決,這個函數的參數是個MSGBOXPARAMS結構體:
typedef struct {
UINT cbSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpszText;
LPCTSTR lpszCaption;
DWORD dwStyle;
LPCTSTR lpszIcon;
DWORD_PTR dwContextHelpId;
MSGBOXCALLBACK lpfnMsgBoxCallback;
DWORD dwLanguageId;
} MSGBOXPARAMS, *PMSGBOXPARAMS;
我寫了個小程序測試發現只要把hwndOwner和dwStyle都置為0,這個對跨框就不是模態的,父窗口點關閉也可以關閉程序,我hook的目的也在于此,可是在IE里具體測試的時候,發現即使對話框不是模態的,我點關閉IE按鈕也沒法關閉IE窗口,所以這個方法只針對有TAB頁的IE7有意義,對話框非模態后,我可以切換到其他TAB頁去并關閉彈框的TAB頁,但是對于IE6來說不能點關閉就沒有意義,于是我干脆也不修改什么參數了,直接把這個函數返回掉了,代碼在最后附上。

至此,我和expression的恩怨總算可以告一段落,整個世界清靜了。
/*
* FileName: IEAlertPatch.c
* Version: 1.0
* Contact: luoluonet@yahoo.cn
* P.S: Thanks zzzEVAzzz, he found out the API that alert uses.
*/
#include Windows.h>
#include Tlhelp32.h>
#include Imagehlp.h>

#pragma comment(lib, "advapi32.lib")

//
// function prototype
//
DWORD WINAPI GetProcessIdByName(LPCTSTR lpProcessName);
__inline HookProc();
BOOL WINAPI HookAlert(DWORD pId);
LPVOID GetSC(LPVOID lpProc, DWORD* dwLen, DWORD dwReserved);

//
// start of winmain
//
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
DWORD pId;
OSVERSIONINFOEX osvi;
BOOL bRet;
TCHAR procName[] = TEXT("iexplore.exe");

ZeroMemory(osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

//
// Get system version
//
bRet = GetVersionEx((OSVERSIONINFO *)osvi);
if (! bRet)
{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
bRet = GetVersionEx((OSVERSIONINFO *)osvi);
if (! bRet)
goto FreeAndExit;
}

// Verify if it is NT system
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
pId = GetProcessIdByName(procName);
if (pId != 0)
HookAlert(pId);
}

FreeAndExit:
return 0;

}
//
// End of WinMain
//

//
// @Name: GetProcessIdByName
// @Author: luoluo
// @Time: 2005-04-17
// @Param: lpProcessName spacifies the ProcessName
// @Ret: if success, return the process id
// if failed, return 0
//
DWORD WINAPI GetProcessIdByName(LPCTSTR lpProcessName)
{
HANDLE hSnapshot;
DWORD dwRet = 0;
LPPROCESSENTRY32 pPe32;
BOOL bRet;

// Get all the processes in the snapshot
hSnapshot = CreateToolhelp32Snapshot(0x00000002, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
goto FreeAndExit;
}

pPe32 = (LPPROCESSENTRY32)malloc(sizeof(PROCESSENTRY32));
ZeroMemory(pPe32, sizeof(PROCESSENTRY32));
pPe32->dwSize = sizeof(PROCESSENTRY32);

// Get the first process
bRet = Process32First(hSnapshot, pPe32);
if (! bRet)
{
goto FreeAndExit;
}

if (stricmp(lpProcessName, pPe32->szExeFile) == 0)
{
dwRet = pPe32->th32ProcessID;
goto FreeAndExit;
}

// Travesal the left processes
while (TRUE)
{
bRet = Process32Next(hSnapshot, pPe32);
if (! bRet)
{
goto FreeAndExit;
}

if (stricmp(lpProcessName, pPe32->szExeFile) == 0)
{
dwRet = pPe32->th32ProcessID;
goto FreeAndExit;
}
}

FreeAndExit:
if (pPe32 != NULL) free(pPe32);
if (hSnapshot != NULL) CloseHandle(hSnapshot);

return dwRet;
}

__inline __declspec(naked) HookProc()
{
__asm
{
leave
retn 4
/*
push esi
mov esi, [ebp+8h]
mov dword ptr [esi+4h], 0h // modify the hwnd
mov dword ptr [esi+14h], 0h // modify the type
pop esi
*/
_emit 90h
_emit 90h
_emit 90h
_emit 90h
}
}

LPVOID GetSC(LPVOID lpProc, DWORD* dwLen, DWORD dwReserved)
{
LPVOID lpProc1 = NULL;
LPVOID lpSC = NULL;

__asm
{
push ebx
mov ebx, lpProc
dec ebx
_loop:
inc ebx
cmp dword ptr [ebx], 90909090h
jne _loop
mov lpProc1, ebx
pop ebx
}

*dwLen = (DWORD)lpProc1 - (DWORD)lpProc;
lpSC = malloc(*dwLen + dwReserved);
memset(lpSC, 0, *dwLen + dwReserved);
memcpy(lpSC, lpProc, *dwLen);
*dwLen += dwReserved;

return lpSC;
}

BOOL WINAPI HookAlert(DWORD pId)
{
HMODULE hModule = NULL;
DWORD dwMessageBoxIndirectW = 0;
HANDLE hProcess;
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
BOOL bRet = FALSE;
BOOL bRetVal;
LPVOID lpCodeMemory;
MEMORY_BASIC_INFORMATION mbi;
SIZE_T szRet;
DWORD dwOldProtect;
DWORD dwJmpOffset = 0;
unsigned char szJmpCode[5] = {0};
unsigned char szOldCode[5] = {0};
LPVOID lpHookCode = NULL;
DWORD dwHookCodeLen = 0;

hModule = LoadLibrary("user32.dll");
dwMessageBoxIndirectW = (DWORD)GetProcAddress(hModule, "MessageBoxIndirectW");

lpHookCode = GetSC(HookProc, dwHookCodeLen, 10);
if (lpHookCode == NULL)
{
goto FreeAndExit;
}

// Open process token to ajust privileges
bRetVal = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken);

if (! bRetVal)
{
goto FreeAndExit;
}

// Get the LUID for debug privilege
bRetVal = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, tkp.Privileges[0].Luid);

if (! bRetVal)
{
goto FreeAndExit;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Adjust token privileges
bRetVal = AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(tkp), (PTOKEN_PRIVILEGES)NULL, 0);
if (! bRetVal)
{
goto FreeAndExit;
}

// Open remote process
hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION, FALSE, pId);
if (hProcess == NULL)
{
goto FreeAndExit;
}

// Read 5 byte from function to be hooked
bRetVal = ReadProcessMemory(hProcess, (LPCVOID)dwMessageBoxIndirectW, szOldCode, sizeof(szOldCode), NULL);
if (! bRetVal)
{
goto FreeAndExit;
}

// Allocate memory from remote process
lpCodeMemory = VirtualAllocEx(hProcess, NULL, dwHookCodeLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (lpCodeMemory == NULL)
{
goto FreeAndExit;
}

// Query the page information
ZeroMemory(mbi, sizeof(MEMORY_BASIC_INFORMATION));
szRet = VirtualQueryEx(hProcess, lpCodeMemory, mbi, sizeof(MEMORY_BASIC_INFORMATION));
if (szRet == 0)
{
goto FreeAndExit;
}

// Modify the page protection for write
bRetVal = VirtualProtectEx(hProcess, mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, mbi.Protect);
if (! bRetVal)
{
goto FreeAndExit;
}

// the function has been hooked
if (szOldCode[0] == ((unsigned char)'\xE9'))
{
dwJmpOffset = (*((int*)(szOldCode + 1))) + dwMessageBoxIndirectW + 5 - ((DWORD)lpCodeMemory) - dwHookCodeLen + 5;
memcpy(szOldCode + 1, (LPVOID)(dwJmpOffset), 4);
}

// debugger present and breakpoint here
if (szOldCode[0] == '\xCC')
{
goto FreeAndExit;
}

// copy the start code of funciton hooked to the end of hook code
memcpy((LPVOID)(((DWORD)lpHookCode) + dwHookCodeLen - 10), szOldCode, sizeof(szOldCode));

// code jmp back to function hooked
memset((LPVOID)(((DWORD)lpHookCode) + dwHookCodeLen - 5), '\xE9', 1);
dwJmpOffset = dwMessageBoxIndirectW - ((DWORD)lpCodeMemory) - dwHookCodeLen + 5;
memcpy((LPVOID)(((DWORD)lpHookCode) + dwHookCodeLen - 4), (LPVOID)(dwJmpOffset), 4);

// Write my code to remote process memory
bRetVal = WriteProcessMemory(hProcess, lpCodeMemory, lpHookCode, dwHookCodeLen, 0);
if (! bRetVal)
{
VirtualFreeEx(hProcess, lpCodeMemory, dwHookCodeLen, MEM_RELEASE);
goto FreeAndExit;
}

// Modify the page protection to protect
bRetVal = VirtualProtectEx(hProcess, mbi.BaseAddress, mbi.RegionSize, mbi.Protect, dwOldProtect);
if (! bRetVal)
{
goto FreeAndExit;
}

// hook code
szJmpCode[0] = '\xE9'; // jmp
dwJmpOffset = ((DWORD)lpCodeMemory) - dwMessageBoxIndirectW - 5;
memcpy(szJmpCode + 1, (LPVOID)(dwJmpOffset), 4);

// Query the page information
ZeroMemory(mbi, sizeof(MEMORY_BASIC_INFORMATION));
szRet = VirtualQueryEx(hProcess, (LPVOID)dwMessageBoxIndirectW, mbi, sizeof(MEMORY_BASIC_INFORMATION));
if (szRet == 0)
{
goto FreeAndExit;
}

// Modify the page protection for write
bRetVal = VirtualProtectEx(hProcess, mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, mbi.Protect);
if (! bRetVal)
{
goto FreeAndExit;
}

// Write hook code to the functon to be hooked
bRetVal = WriteProcessMemory(hProcess, (LPVOID)dwMessageBoxIndirectW, szJmpCode, sizeof(szJmpCode), 0);
if (! bRetVal)
{
goto FreeAndExit;
}

// Modify the page protection to protect
bRetVal = VirtualProtectEx(hProcess, mbi.BaseAddress, mbi.RegionSize, mbi.Protect, dwOldProtect);
if (! bRetVal)
{
goto FreeAndExit;
}

FreeAndExit:
if (hProcess != NULL)
{
CloseHandle(hProcess);
}
if (hToken != NULL)
{
CloseHandle(hToken);
}
if (lpHookCode != NULL)
{
free(lpHookCode);
lpHookCode = NULL;
}

return bRet;

標簽:哈密 青海 無錫 河源 沈陽 紅河 忻州 阜陽

巨人網絡通訊聲明:本文標題《我和expression的日與被日 經典分析》,本文關鍵詞  我和,expression,的,日,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《我和expression的日與被日 經典分析》相關的同類信息!
  • 本頁收集關于我和expression的日與被日 經典分析的相關信息資訊供網民參考!
  • 推薦文章
    天堂网中文在线| 国产精品1024永久免费视频| 九九九国产| 日韩专区一区| 亚洲第一视频在线播放| 欧美激情一区二区三区视频| 一级毛片看真人在线视频| 国产91精品一区| 精品国产一级毛片| 精品国产一区二区三区久久久狼| 午夜精品国产自在现线拍| 午夜久久网| 日韩免费片| 国产原创中文字幕| 午夜精品国产自在现线拍| 天天色色网| 日韩专区一区| 97视频免费在线观看| 可以免费看污视频的网站| 九九干| 日韩在线观看视频网站| 日韩中文字幕一区| 久久国产影院| 精品国产一区二区三区精东影业| 国产精品123| a级毛片免费全部播放| 日本特黄一级| 四虎影视久久久| 国产伦精品一区二区三区无广告 | 亚洲第一视频在线播放| 久久成人综合网| 欧美大片毛片aaa免费看| 欧美国产日韩久久久| 欧美激情一区二区三区视频| 美女免费毛片| 日日爽天天| 国产原创中文字幕| 欧美激情一区二区三区在线播放| 你懂的国产精品| 成人av在线播放| 一 级 黄 中国色 片| 国产成人啪精品视频免费软件| 九九九国产| 精品国产香蕉在线播出| 亚洲www美色| 免费的黄色小视频| 中文字幕一区二区三区 精品| 国产成人啪精品视频免费软件| 日韩中文字幕一区二区不卡| 国产a一级| 成人a级高清视频在线观看| 精品久久久久久中文字幕一区| 中文字幕一区二区三区 精品| 国产综合成人观看在线| 日韩在线观看视频黄| 韩国毛片基地| 天天色色网| 99热视热频这里只有精品| 国产精品免费精品自在线观看| 欧美日本免费| 黄视频网站在线免费观看| 国产高清视频免费观看| 国产成a人片在线观看视频| 精品国产香蕉在线播出| 国产麻豆精品免费密入口| 午夜久久网| 99久久网站| 亚洲精品久久玖玖玖玖| 国产欧美精品午夜在线播放| 日日爽天天| 亚洲第一视频在线播放| 国产一区二区精品| 欧美一级视频免费| 国产网站免费观看| 国产精品自拍亚洲| 色综合久久久久综合体桃花网| 欧美电影免费看大全| 国产不卡高清| 日韩中文字幕在线观看视频| 青青青草影院| 精品国产一区二区三区精东影业| 欧美电影免费看大全| 日本特黄特黄aaaaa大片| 国产亚洲免费观看| 国产亚洲精品aaa大片| 亚洲精品久久玖玖玖玖| 日本伦理网站| 91麻豆精品国产自产在线| 日本免费看视频| 欧美激情一区二区三区在线播放| 日韩免费片| 日本特黄一级| 麻豆网站在线看| 色综合久久天天综合观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 中文字幕一区二区三区 精品| 免费一级片在线观看| 日韩中文字幕一区二区不卡| 国产一级强片在线观看| 欧美激情在线精品video| 国产精品123| 国产原创中文字幕| 色综合久久天天综合观看| 国产a一级| 韩国三级香港三级日本三级la | 美国一区二区三区| 九九干| 可以在线看黄的网站| 四虎久久影院| 精品在线观看一区| 日韩综合| 久久99爰这里有精品国产| 九九精品影院| 久久精品人人做人人爽97| 日韩在线观看视频网站| 欧美一区二区三区性| 久久精品成人一区二区三区| 91麻豆tv| 国产国产人免费视频成69堂| 久久99爰这里有精品国产| 91麻豆高清国产在线播放| 久久久成人影院| 成人免费观看的视频黄页| 国产高清在线精品一区二区| 精品视频在线看 | 免费的黄色小视频| 九九精品影院| 99热视热频这里只有精品| 色综合久久天天综合绕观看| 黄色免费三级| 欧美激情在线精品video| 国产视频一区二区在线播放| 欧美大片a一级毛片视频| 91麻豆tv| 国产高清在线精品一区二区| 一本高清在线| 亚洲第一页色| 日日夜夜婷婷| 精品视频在线观看免费| 久久国产精品自由自在| 九九免费精品视频| 亚洲第一视频在线播放| 日本伦理网站| 99久久精品国产免费| 韩国毛片免费大片| 青青久久网| 欧美α片无限看在线观看免费| 91麻豆高清国产在线播放| 成人影视在线观看| 国产91精品一区| 国产成a人片在线观看视频| 亚洲第一视频在线播放| 91麻豆tv| 国产视频久久久| 国产欧美精品午夜在线播放| 国产91精品一区| 国产一区二区精品久久91| 香蕉视频久久| 国产一区二区精品久久| 91麻豆精品国产综合久久久| 99久久精品国产国产毛片| 国产91素人搭讪系列天堂| 日本特黄一级| 午夜激情视频在线观看| 久久99爰这里有精品国产| 一级片片| 成人高清视频免费观看| 可以在线看黄的网站| 日本特黄特黄aaaaa大片| 日本免费看视频| 亚洲第一视频在线播放| 香蕉视频久久| 深夜做爰性大片中文| 日韩av成人| 日韩免费片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产极品精频在线观看| 精品久久久久久中文| 精品国产一区二区三区久久久狼| 国产亚洲精品aaa大片| 黄视频网站免费观看| 四虎影视久久久| 国产麻豆精品视频| 国产a视频| 精品国产亚洲人成在线| 精品视频免费观看| 天天做人人爱夜夜爽2020毛片| 欧美激情一区二区三区视频高清| 国产福利免费观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久精品成人一区二区三区| 欧美另类videosbestsex久久| 成人a级高清视频在线观看| 欧美α片无限看在线观看免费| 国产精品自拍在线| 精品视频免费在线| 美女免费毛片| 国产a视频| 久久精品道一区二区三区| 国产不卡高清|