pwn中常见的绕过(以后见多了会慢慢更的,咕咕咕)

发布时间 2023-12-02 16:23:17作者: Falling_Dusk

如题,总结一下我目前在pwn中常见的一些绕过,方便以后随时查阅

strlen

这是检验字符串长度的函数,常见的形式是“当字符串个数>number时,失败”,绕过它其实很简单,在输出的字符串开头加上'\x00',这样strlen就不会检测后续字符串的个数了,就完成了绕过

strncmp

指定比较size个字符串,有三个参数。前一二为比较的字符串,第三个参数为size

 strncmp(string1,string2,size)

比较规则

 0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2(负数)
>0 - 如果 string1 大于 string2  (正数)

常见样式

!strcmp(&buf[j],"flag"/"cat"....,size)

这样的格式可以理解为“过滤”,这些字符串都不能用,如果用了这些字符串,就很有可能退出运行(如果该函数是这么定义的话)

过滤"cat"的方法

①.和cat有近乎相同作用的指令

 tail / head / tac / nl / grep / more / less flag都可以查看flag文本内容

不过它们之间有一些细微的差别,如果想要了解更多,可以看这几篇博客

https://blog.csdn.net/weixin_38330025/article/details/114484231 (tail,head,cat的区别和详细用法)
https://blog.csdn.net/u014314592/article/details/130252954 (cat,tail,head,more,grep的释义和基础用法)
https://blog.csdn.net/weixin_53202576/article/details/130995515 (cat与tac)
https://www.cnblogs.com/hsh96/p/17668897.html (nl的释义和用法)
https://blog.csdn.net/u012581020/article/details/131637698 (less的释义和用法详解)

②.linux机制小trick(稀里糊涂)

还有一个"???/???/????"的过滤方法,是跟linux机制有关的,但是博主没弄懂,也不确定这是不是有条件要求的。我个人理解就是cd /filename/filename后cat ./*,不知正确与否,这个方法在不懂的情况下能不用尽量别用,还有其它更好理解的方法,没必要用这个

③.编码拼接绕过(有些繁琐,但是有些时候意外有用)

a=c;b=at;c=f;d=lag.txt;
$a$b ${c}${d}

效果如图
image

④.解码绕过(这真的是鬼才,还有这种方式...)

`echo 'Y2F0Cg==' | base64 -d`  flag.txt

了解自:https://blog.csdn.net/qq_42383069/article/details/130221725
后面好些也都是摘自这篇博主的博客,实在是太涨知识了

⑤.反斜杠绕过

c/at fl/ag.txt

⑥.单双引号绕过

c'a't flag.txt
c"a"t flag.txt

过滤"flag"的方法

①. ./*

 cat ./*

此命令相当于查看当前目录下所有文件的内容,当然,只能查看文本文档,文件夹是看不了的

②. f*

cat f*

这个等效于cat flag,挺好的

过滤"sh"的方法

 $0

此指令作用等效于“sh”"bin/sh",进行提权

过滤' '(也就是空格)的方法

使用下列字符代替

<
${IFS}
$IFS$9
%09

$ IFS 在 linux 下表示分隔符,只有cat$IFSa.txt 的时候, bash 解释器会把整个 IFSa当做变量名,所以导致没有办法运行,然而如果加一个 {} 就固定了变量名,同理在后面加个 $ 可以起到截断的作用,而 $9 指的是当前系统shell 进程的第九个参数的持有者,就是一个空字符串,因此 $9 相当于没有加东西,等于做了一个前后隔离

这句话仍旧是摘自这篇博客:https://blog.csdn.net/qq_42383069/article/details/130221725


2023.12.2