荒废已久的pwn复习总结

写在前面

天哪感觉有一个世纪没有写过blog的样子,曾经高产似母猪。 竟然一个多月没动笔了(雾。。) 好吧其实这个月做了好多事情,ctf打的比较少了所以就没怎么写blog了。(其实就是没长进hhh)做了一些别的事情,作品赛、学会掉机器学习的包玩玩nlp、疯狂尝试希望自己不要退学、 复习期末考试、 各种大作业。今天闲下来半夜写篇短的, 主要目的还是记录一下断断续续的一些知识点,然后过几天去国赛也得记得准备点素材。

奇妙的shellcode

shellcode确实是一个奇妙的东西,不需要libc的情况下getshell的一个方法。绕过NX呢需要这两种条件,mprotect函数存在或者mmap存在,调用参数如下:

1
2
void *mmap( void *start , size_t length , int prot , int flags , int fd , off_t offsize)
int mprotect(const void *start, size_t len, int prot);

开始地址,长度不用说,prot–>protect表示设置访问权限(粒度和linux的访问控制一样,完了被计算机安全污染了rwx是7). 要注意的是地址需要和0x1000对齐. mmap多三个参数,其中flags选择MAP_ANONYMOUS加MAP_PRIVATE,其中:

  • MAP_ANONYMOUS:建立匿名映像。此时会忽略参数fd,不涉及文件,而且映像区域无法和其他进程共享。
  • MAP_PRIVATE:对映像区域的写入操作会产生一个映像文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。当共享的对象的虚拟存储区域为私有对象时,修改只会被本进程中改变。
    flags-paras
    好啦,32位和64位一样,都是rop挑一个地方改权限,然后写shellcode。32位的话因为栈传参导致需要pop_2,pop_3之类的gadgets,从csu那里找就行(好吧我是不是没记录csu,改天写一个,不如就写在下面?)

好用的welpwn和ida2pwntools

  • 先说ida2pwntools, 这玩意贼好用,from pwnlib.utils.proc import wait_for_debugger之后直接f12可以弹出来。不过我可能得开始熟悉pwndbg了,毕竟更加灵活。(heapviewer真的太好用了啊!ida用得好其实问题并不大。。个人感觉)
  • welpwn的话,我觉得理念很好,常用工具就应该写一块重复造轮子干嘛!one_gadget, rop, libc_search就应该放一起呀,顺便提一下还有调libc顺便学习堆。pwn就应该变成art!所以自己也在下意识的积累自己的template,可以搞一波开发,顺便看看别人咋写的

changld

妈妈再也不用担心libc不兼容!(其实还是担心,毕竟可能没有ld。。解决方案的话,我觉得多准备几个版本的虚拟机,啊明天就准备!)

(好困呀,改天写怎么blind pwn 和 怎么 ret2csu. 晚安世界!)

文章目录
  1. 1. 写在前面
  2. 2. 奇妙的shellcode
  3. 3. 好用的welpwn和ida2pwntools
  4. 4. changld
|