Water
today i do nothing but i open the test of pwn, so……,my first blog in 2022
Start
2022的第一篇博客,因为没接触过pwn就从攻防世界的新手题跟着做开始,找了一个视频跟着学和写,刚接触下来还是觉得比较有意思,但是听说看东西很折磨人)
Point
最开始的做题步骤首先是查位数,逆向中一般直接使用DIE就可以,在pwn里面可以直接file来查看文件的位数,这在编写exp文件的时候需要。然后是checksec命令,帮助我们看开了甚么保护。但打保护这方面我还没有学到,记得查就对了,养成好习惯。
1 | 1 -- file 文件名 |
栈溢出
一开始的题就是栈溢出,比较好理解。通过溢出覆盖字节为你想要的内容来得到flag。一般都会有if语句判断数据是否等于一个规定的数据,通过溢出写入数据就可以达成目的。
溢出点
关于我做了一丢丢题,一般溢出点都会是buf等等,通过write,read,get等函数来溢出。要注意有漏洞的函数然后观察是否有溢出的可能性。
数据类型
有一道题他需要溢出14+4个字节,但检验了填入数据的长度3-8,也就是说没办法填入那么多垃圾数据来溢出,这里解决的方法是转眼到了数据类型,因为是unsigned short int,所以用8bit位来算0x101就变成了0x1,即可以257 + 2 ~ 257 + 7都可以通过检测。
system
system函数与plt表和got表有关,在用于构造跳转时经常会用到两个表,有system函数说明在plt表中有该函数的地址,溢出返回地址需要为它的地址。跳转到返回地址后填入数据再写入想要的数据。在pwn题里经常需要构造结构来写payload去写入数据,要搞清楚思路和栈里的结构就会很好写脚本。
libc泄露
libc文件和文件中的地址是不同的,不能直接用文件中的地址去打,会找到错误的地方,但地址之间的偏移量是固定的,所以可以计算文件和libc文件中的相应函数之间的固定偏移量,运用偏移量来寻址。从而继续构造结构来写脚本的payload。
格式化字符串漏洞
还没仔细看资料,只是知道有这个东西,可以配合%n来写入数据,格式化字符串漏洞一般都需要调试文件,写入测试数据和一堆%p(地址)来找到漏洞的位置以便写入文件需要的数据。
1 | %c:输出字符,配上%n可用于向指定地址写数据。 |
参考
攻防世界新手区详细的每道题解在这里http://www.peiqi.tech/posts/7499/#when-did-you-born
exp.py
通过写exp.py文件来打,模板和注意就放在这里。
1 | from pwn import* |
END
少打音游多读书
Author: John Doe
Link: http://example.com/2022/01/19/pwnstart/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.