PUSH EAX ; EAX=00004CDC
PUSH 00B09770 ; ASCII "id = %d"
PUSH 1036
PUSH 0
CALL 005E8440
ADD ESP,8 ;这是我看不懂的地方 上面4个push 这里却是8
-------------------下面是子程序代码-----------------------------
MOV EAX,DWORD PTR SS:[ESP+4] ; EAX=00000000
CMP EAX,2 ; 比较
JA SHORT 005E8461 ; 未跳转
MOV ECX,DWORD PTR DS:[D174B8] ; ecx=0
CMP ECX,2 ; 比较
JA SHORT 005E8461 ; 未跳转
LEA ECX,DWORD PTR DS:[ECX+EAX*2] ; ECX=00000000
ADD ECX,EAX ; ECX=00000000
MOV EAX,DWORD PTR DS:[ECX*4+C98DB4] ; EAX=1036
RETN
我知道8对应2个参数 无论上面哪2个push进行组合 注入后都没效果
然后我就3个参数组合 8改为0C 4个参数组个8改为10 都无效果
如果不改,参数多了直接异常 客户端就崩溃了
还望大神进来指点一二
------解决思路----------------------
那这个就不懂是什么情况了,只能帮你顶,帮你@zara
------解决思路----------------------
我也看不明白。
从上面子程的代码来看,就使用了一个参数,虽然另外有 005E8461 部分,却是在 eax 或 ecx 大于 2 时转过去的,这通常是参数超范围的错误处理部分吧,尽管看不到这部分的内容;这个判定也可能是错误的,还得看 005E8461 那里具体的内容。
要理清楚这里参数,再往下看看有没有对前面那些被 push 的使用。
对比前后两个版本对参数平衡的做法,005E8440 子程应该做法功能上有很大的不同;因为看原来版本的参数平衡,似乎子程里完全地使用了 3 个参数,而新版本却不象这样,代码里只用了一个,参数平衡上是两个,再前面的个两个的用途呢,一个是看看 005E8461 分支那里,另外是看看后续是不是有用到。
------解决思路----------------------
后面不远处还有一个CALL