pwn中常见的绕过(以后见多了会慢慢更的,咕咕咕)
如题,总结一下我目前在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}
效果如图
④.解码绕过(这真的是鬼才,还有这种方式...)
`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