后门??学到了....题目说有一个参数可以触发程序进行后门操作,拖进ida看一下:
main函数:
signed int __cdecl wmain(int a1, int a2)
{
char v3; // [esp+50h] [ebp-2C8h]
char v4; // [esp+E1h] [ebp-237h]
char v5; // [esp+E4h] [ebp-234h]
char Source[4]; // [esp+100h] [ebp-218h]
char v7; // [esp+104h] [ebp-214h]
__int16 i; // [esp+108h] [ebp-210h]
char Dest[2]; // [esp+10Ch] [ebp-20Ch]
char Dst; // [esp+10Eh] [ebp-20Ah]
char v11[25]; // [esp+110h] [ebp-208h]
char v12[483]; // [esp+129h] [ebp-1EFh]
__int16 v13; // [esp+30Ch] [ebp-Ch]
LPSTR lpMultiByteStr; // [esp+310h] [ebp-8h]
int cbMultiByte; // [esp+314h] [ebp-4h]
cbMultiByte = WideCharToMultiByte(1u, 0, *(a2 + 4), -1, 0, 0, 0, 0);
lpMultiByteStr = sub_4011F0(cbMultiByte);
WideCharToMultiByte(1u, 0, *(a2 + 4), -1, lpMultiByteStr, cbMultiByte, 0, 0);
v13 = *lpMultiByteStr;
if ( v13 < 0 )
return -1;
v13 ^= 0x6443u;
strcpy(Dest, "0");
memset(&Dst, 0, 0x1FEu);
for ( i = 0; i < v13; ++i )
Dest[i] = 'A';
*Source = 0x7FFA4512;
v7 = 0;
strcpy(&Dest[v13], Source);
qmemcpy(&v5, &unk_4021FC, 0x1Au);
strcpy(&v11[v13], &v5);
qmemcpy(&v3, &unk_402168, 0x91u);
v4 = 0;
strcpy(&v12[v13], &v3);
sub_401000(Dest);
return 0;
}
先是把lpMultiByteStr赋值给了v13,所以接下来跟踪一下v13.发现先是进行了一个异或操作:v13 ^= 0x6443u(这里写脚本的时候要注意小端序)然后向Dest里填充‘A’。
*Source = 0x7FFA4512;
v7 = 0;
strcpy(&Dest[v13], Source);
这里是关键
把0x7FFA4512这个地址传到了Dest[v13]。
0x7FFA4512是windows 上一个万能的 jmp esp(几乎所有平台这个地址上都是 jmp esp)
然后这个 dest 可以看 ida 上面是 char Dest[2]
所以这里可以通过参数控制这个 jmp esp 溢出到某一个函数的返回地址
从而改变程序的控制流去执行此时 esp 上地址的内容
(这里参考了链接------->https://blog.csdn.net/qq_38204481/article/details/79870305t)
点开sub_401000(Dest)看一下:
找到了溢出点:strcpy(Dest, Source)
ps.strcpy函数在把长字符串赋给短字符串会发生溢出
需要0x20个字节+4个字节的返回地址
也就是说输入的命令行参数处理过之后是0x24字节。
由于前面v13 ^= 0x6443u处理过一次
所以输入的命令行参数就是chr(0x24^0x43),chr(0x00^0x64)
exp:
import hashlib
flag=""
flag+=chr(0x24^0x43)
flag+=chr(0x00^0x64)
print hashlib.sha256(flag).hexdigest()
总结:
程序给出了返回地址
需要做的是搞清楚程序的逻辑
计算出输入的值多少时刚好能把返回地址覆盖为已给出的地址。想要pwn 需要:1.有个漏洞让你溢出。2.有个地址来覆盖掉原来的地址。
0x7FFA4512这个地址很有用,windows里面的万能jmp esp。
hash加密:import hashlib
hashlib.sha256(string).hexdigest()
————————————————
摘自链接:https://blog.csdn.net/qq_38204481/article/details/79870305