婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 我和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的日與被日 經典分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久精品亚洲乱码伦伦中文| 精品一区二区国语对白| 精品国产sm最大网站免费看| 91精品国产一区二区| 欧美一二三区在线观看| 欧美一区二区三区在线看| 久久久久久久久伊人| 欧美成人精品高清在线播放| 日韩午夜三级在线| 欧美成人精品二区三区99精品| 日韩亚洲欧美综合| 精品国产99国产精品| 亚洲国产精品高清| 亚洲色大成网站www久久九九| 亚洲在线视频一区| 日韩中文字幕麻豆| 国产毛片精品视频| 91蜜桃在线观看| 欧美日韩在线观看一区二区 | 久久精品夜夜夜夜久久| 欧美mv和日韩mv国产网站| 亚洲国产经典视频| 亚洲视频每日更新| 美女mm1313爽爽久久久蜜臀| 国产精品99久久久久久宅男| 日本精品视频一区二区| 欧美精品欧美精品系列| 久久精品水蜜桃av综合天堂| 伊人色综合久久天天人手人婷| 五月婷婷激情综合| 波多野结衣中文字幕一区二区三区 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美电影在线免费观看| 久久久久99精品国产片| 亚洲一卡二卡三卡四卡无卡久久| 久久狠狠亚洲综合| 91亚洲精品久久久蜜桃网站| 欧美一卡在线观看| 亚洲精品国产无套在线观| 久久9热精品视频| 欧美亚洲国产一卡| 国产精品视频第一区| 日韩精品一卡二卡三卡四卡无卡| 成人福利在线看| 欧美成人精品福利| 亚洲va欧美va人人爽午夜| 成人亚洲一区二区一| 日韩免费电影一区| 香蕉乱码成人久久天堂爱免费| 国产91丝袜在线播放0| 6080亚洲精品一区二区| 一区二区三区影院| 91蜜桃传媒精品久久久一区二区| 欧美一二三四在线| 日韩高清一区在线| 欧美三级电影在线看| 一区视频在线播放| 成人综合婷婷国产精品久久蜜臀 | 国产盗摄女厕一区二区三区| 欧美卡1卡2卡| 午夜婷婷国产麻豆精品| 91猫先生在线| 国产精品久久久久久久久免费丝袜| 色老头久久综合| 国产精品久久久久久久久动漫| 激情综合网最新| 精品国产凹凸成av人导航| 美女www一区二区| 精品国产乱码久久久久久闺蜜 | 91蜜桃视频在线| 国产精品久久久久四虎| av成人老司机| 亚洲人成伊人成综合网小说| 成人av电影在线网| 国产精品蜜臀av| 波多野结衣一区二区三区| 国产精品久久三| 色欧美日韩亚洲| 亚洲一区二区三区视频在线播放 | 日韩精品电影一区亚洲| 欧美精品三级在线观看| 日韩成人免费电影| 2023国产精品自拍| 福利一区在线观看| 亚洲视频在线一区观看| 欧美性色黄大片| 美女视频免费一区| 亚洲国产精品二十页| 99riav一区二区三区| 亚洲自拍偷拍综合| 欧美一区二区三区爱爱| 国精产品一区一区三区mba视频| 国产欧美一区二区精品仙草咪| 成人免费观看视频| 亚洲综合丝袜美腿| 日韩欧美色综合| 国产成人鲁色资源国产91色综| 18欧美亚洲精品| 欧美精品乱人伦久久久久久| 久久www免费人成看片高清| 国产精品乱人伦中文| 欧美日韩国产大片| 国产综合久久久久久久久久久久| 国产精品国产三级国产普通话蜜臀| 一本大道久久精品懂色aⅴ| 视频一区二区三区在线| 国产区在线观看成人精品| 欧美中文字幕一二三区视频| 精品一区免费av| 亚洲欧洲一区二区在线播放| 日韩一级大片在线| 色呦呦网站一区| 国产激情一区二区三区四区| 亚洲高清一区二区三区| 国产精品免费人成网站| 日韩视频在线永久播放| 色综合色狠狠天天综合色| 蜜臀久久99精品久久久画质超高清 | 国产成人精品免费网站| 亚洲风情在线资源站| 久久精品人人爽人人爽| 欧美日韩免费视频| 91亚洲精品久久久蜜桃| 国产九色精品成人porny| 亚洲第一搞黄网站| 亚洲欧美日韩一区二区三区在线观看| 欧美xxxxxxxx| 国产精品美女一区二区三区| 精品国产成人在线影院 | 亚洲专区一二三| 国产精品欧美一区喷水| 日韩欧美一级片| 欧美精品亚洲一区二区在线播放| 色婷婷综合久久久久中文一区二区| 国产成人一区在线| 国产精品一区在线| 国产一区二区免费看| 美国十次综合导航| 青青草国产成人av片免费| 性做久久久久久| 亚洲成人tv网| 五月激情丁香一区二区三区| 亚洲激情中文1区| 亚洲欧美激情视频在线观看一区二区三区| 久久久精品日韩欧美| 久久久国际精品| 精品国产精品一区二区夜夜嗨| 欧美一区二区黄色| 日韩女优电影在线观看| 欧美va亚洲va香蕉在线| 精品91自产拍在线观看一区| 久久在线观看免费| 日韩欧美三级在线| 久久久久久久久99精品| 国产精品麻豆欧美日韩ww| 国产免费观看久久| 亚洲日本在线看| 一区二区三区四区视频精品免费| 一区二区三区**美女毛片| 亚洲成a人片在线不卡一二三区| 舔着乳尖日韩一区| 美美哒免费高清在线观看视频一区二区| 免费人成在线不卡| 国产精一区二区三区| av网站一区二区三区| 色久综合一二码| 日韩一级二级三级精品视频| 国产午夜精品在线观看| 亚洲精品免费电影| 男人的天堂亚洲一区| 国产精品一品视频| 色网站国产精品| 精品粉嫩aⅴ一区二区三区四区 | 欧美日韩一区二区三区四区 | 久久精品亚洲国产奇米99| 亚洲三级电影全部在线观看高清| 亚洲一区在线观看免费观看电影高清 | 色哟哟国产精品| 日韩一级欧美一级| 成人免费在线视频观看| 亚洲福利视频一区二区| 国产精品一区在线观看你懂的| 99久久777色| 欧美成人一区二区三区在线观看| 国产精品久久久久久福利一牛影视| 亚洲第一二三四区| 成人毛片在线观看| 这里只有精品视频在线观看| 国产精品色在线观看| 秋霞影院一区二区| 日本韩国精品在线| 欧美国产成人在线| 久久成人免费网站| 在线观看国产精品网站| 日本一区二区高清| 蜜桃传媒麻豆第一区在线观看| 一本一道综合狠狠老| 久久久国产精品麻豆| 日本大胆欧美人术艺术动态| 在线影视一区二区三区|