CTFSHOW之萌新随便记给自己看的笔记(持续更新)

在大佬的推荐下跑去了ctfshow刷题 这个就是随便记记的博客

    • 1.PHP特性绕过等(非题解 仅笔记 不按顺序)
    • 2.一些特性的记录
    • 3.WEB入门信息收集完成 非wp(2021.1.28更新)
    • 4.命令执行部分
    • 5.文件上传部分
      • %00截断
      • 首先是从羽大佬博客学的 php短标签绕过
      • 配置文件类型
    • 6.文件包含部分
      • 日志包含
    • SQL注入部分
      • 绕过方面的知识(慢慢补充)

1.PHP特性绕过等(非题解 仅笔记 不按顺序)

PS:好像前几题都能直接传字符串’1000’过

  • 0x01:利用进制转换

    1.2进制:id=0b1111101000
    2.16进制:id=0x38e**

  • 0x02:利用位运算
    1.取反两次:id=~~1000
    2.按位与和异或:id=992|8 && id=800^200

  • 0x03:利用运算
    1.加减乘除 凑1000
    注:用url 如+变%2b
    2.id=–1000负负得正

  • 0x04 限制长度
    可以使用科学计数法绕过
    如题

  • 0x05 小数点绕过

payload:?num=4476.0
  • 0x06 strpos的绕过
    这里用php特性web9495举例

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(!strpos($num, "0")){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

显然他不想让我们直接用八进制的方式 所以第一位为0直接die 但是
通过换行符%0a 、空格符%20结合八进制绕过 或者空格直接绕

payload:     ?num=%0a010574
              ?num=%20010574   
              ?num= 010574

又来抄羽大佬的博客了 关于正则的

i 
不区分(ignore)大小写

m
多(more)行匹配
若存在换行\n并且有开始^或结束$符的情况下,
将以换行为分隔符,逐行进行匹配
$str = "abc\nabc";
$preg = "/^abc$/m";
preg_match($preg, $str,$matchs);
这样其实是符合正则表达式的,因为匹配的时候 先是匹配换行符前面的,接着匹配换行符后面的,两个都是abc所以可以通过正则表达式。

s
特殊字符圆点 . 中包含换行符
默认的圆点 . 是匹配除换行符 \n 之外的任何单字符,加上s之后, .包含换行符
$str = "abggab\nacbs";
$preg = "/b./s";
preg_match_all($preg, $str,$matchs);
这样匹配到的有三个 bg b\n bs

A
强制从目标字符串开头匹配;

D
如果使用$限制结尾字符,则不允许结尾有换行; 

e
配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; 

2.一些特性的记录

1.

var_dump("0"=="a")false
var_dump( 0 == "a" )true

2.MD5特性

if($_POST['a']!==$_POST['b'] && md5($_POST['a'])===md5($_POST['b'])){
        die("给你flag"); 
    }

利用数组传参 数组的MD5值均为NULL 如:a[]=1&b[]=2

3._的特性
preg_match过滤了_的情况下利用PHP特性。
参数中带有+ . [这三个字符会被解析成 _符号
这里码一个大佬给的正则匹配的网站

4.ereg()函数
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字 母的字符是大小写敏感的。 ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配


3.WEB入门信息收集完成 非wp(2021.1.28更新)

  1. ctrl+u快捷查看网页源码或再url前加上view-source:
  2. scrabble+githack url/.svn
  3. mdb文件泄露url/db/db.mdb

4.命令执行部分

1.命令执行时 空格的绕过

  • 1 ${IFS}

  • 2 $IFS$9

  • 3 <符号

  • 4.以及%09用于url传递

  1. (抄一下羽大佬的博客 羽大佬tql)

在linux系统中有一些通配符

1.*	匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file *
2.?	匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0
3.[abcd]	匹配abcd中任何一个字符
4.[a-z]	表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0

我们想要执行 cat flag.php,但是flag被过滤了,这时候就可以使用通配符
cat f*表示打开当前目录下所有 f开头的文件

补充:
1.对于linux cat和ca''t ca\t ca""t效果是相同的 这样同样可以绕过字符的限制
比如 c=system('ca\t fla\g.php');

3.还是抄大佬博客

1.绕过长度限制
1>1.txt创建一个空文件,当然任何大于1的数字都可以被用来创建一个空文件。

2.一些命令分隔符:
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a


3.某些命令被过滤后(cat等)

(1)more:一页一页的显示档案内容
(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出 taccat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容

4.
php执行外部命令函数:exec()、passthru()、system()、shell_exec()对比

5.文件上传部分

%00截断

切记 是在php版本<5.3.4时
1.上传时路径可控,使用00截断(burp中抓包修改文件后面那里

2.文件下载时,00截断绕过白名单检查

3.文件包含时,00截断后面限制(主要是本地包含时)

4.其它与文件操作有关的地方都可能使用00截断。

首先是从羽大佬博客学的 php短标签绕过

1.开启配置参数short_open_tags=on的情况下

2. 等价于
3.只能在7.0下使用

<script language=”php”>echo '123'; </script>

4.前提是开启配置参数asp_tags=on

<% echo '123';%>``

然后是其他的一些过滤
1.过滤了[] 用{}

<?=eval($_POST{1});?>

配置文件类型

  1. .user.ini (nginx)
    一般常用有auto_prepend_fileauto_prepend_file两种用法
    切记 .user.ini是有生效时间的 需要等待
  2. .htaccess(apache)

6.文件包含部分

日志包含

服务器开启了记录日志功能的情况 一般情况下
1.apache路径
/var/log/apache/access.log
2.nginx的在
/var/log/nginx/access.log和/var/log/nginx/error.log

SQL注入部分

突然发现这部分好多东西要记 但是一时半会想不起来学过的需要记的东西 想起来一点记一点把(记的简单一些 不会细致)

1.表名的引号

绕过方面的知识(慢慢补充)

1.空格过滤

1.最常见的/**/过滤
2.url编码%09绕过
3.回车 换页等 %0c %0a %0b %0d
4.以及某些情况可以用括号 而不用空格or(1=1)

2.注释的过滤

1.url编码%23

3.=过滤

1.可以用like
2.某些情况能as

4.waf 正则

1.常见的大小写绕过 例:UnIon
2.如果是replace成空可以双写 seselectlect
3.join的无列名注入(推荐学习)
4.双重编码原理的两种形态
第一种 进行两次url编码 第二种比如字母e可以%6%35这样表示
其实是一个道理%6解码是%6 %35解码是5 就得出了e的ascii 65 

5.其他积累的绕过

1.异或注入(感谢斯倍斯曼师傅和atao师傅)
原理是一个数异或自身的结果还是他自己 比如具体被ban了某个数字例如50
这时候你where id=50^0是可以过的(句子随便写的)
不过可能是要自己去构造这个0出来的 比如利用ascii+substr的方式

你可能感兴趣的:(CTF学习)