fd
连上去后查看源码
|
Points
- atoi
(表示 ascii to integer)是把字符串转换成整型数的一个函数
- read
ssize_t read(int fd,void * buf ,size_t count);
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
- Linux文件描述符
nteger value | Name | symbolic constant | file stream |
---|---|---|---|
0 | Standard input | STDIN_FILENO | stdin |
1 | Standard output | STDOUT_FILENO | stdout |
2 | Standard error | STDERR_FILENO | stderr |
Exp
|
collision
|
Points
check_password
中的强制转化,将字符转为整数指针,char占1位,int占4位——–>20char = 5 int- 小段模式输入
0x21DD09EC = 568134124 = 1136268244 + 113626828 = 0x06c5cec84 + 0x06c5cecc
Exp
|
Why?
|
bof
|
Exp
|
flag
逆向题…
upx -d flag -o out
脱壳后,IDA 查看字符串
passcode
|
Points
- 通过溢出控制
scanf("%d", passcode1);
使得passcode1可控 - 修改
printf
orexit
使其指向 0x080485e3
Exp
|
random
|
Points
- c中的rand函数产生的是伪随机数,每次产生出的是固定值
- dword 双字 就是四个字节
- ptr pointer缩写 即指针
Exp
|
input
|
Points
Stage1
- Exactly 100 arguments
- The argument n0. 65 (ascii value for A) must be an empty string
- The argument no. 66 (ascii value for B) must be \x20\x0a\x0d
leg
mistake
|
Points
Exp
|
shellshock
|
Points
Exp
|
coin1
blackjack
Points
|
Exp
任意输入超大金额或者负值,重新开始游戏后得到flag
|
lotto
|
Points
|
Exp
|
cmd1
|
Points
- 通配符
Exp
|
cmd2
|
Exp
|
|
uaf
|
Points
- UAF利用
- C++虚函数的内存结构
在C++中,每一个含有虚函数的类都会有一个虚函数表,简称虚表。与之对应的,每一个对象都会有其专属的虚表指针指向这个虚表。
值得一提的是,在一个继承树中,没有被覆写的虚函数虽然在被保存在不同的虚表中,但其地址是一致的。覆写后子类的虚表保存了覆写后的虚函数地址。
对象在内存开辟空间后,按照虚表指针、继承自基类的成员、类自身的成员的顺序进行存储。(如果是多重继承和虚继承,可能存在多个虚表指针)
本题中m对象的内存结构示意图
|
对应内存布局
|
- 利用
after
复写虚表位置(0x0000000000401570-0x8)使得下次use
时调用的introduce
函数指向get_shell
Exp
|