常见漏洞代码审计

0x01 SQL注入代码审计

数字型SQL注入审计
当程序的变量没有做处理而直接拼接在SQL注入语句中,没有单引号的保护,就容易造成SQL注入。
字符型SQL注入审计
当程序的变量没有做处理而直接拼接在SQL注入语句中,虽然有单引号的保护,但我们如果能闭合SQL,也就产生了SQL注入漏洞。
其实两者的区别就是有没有单引号的保护

漏洞复现(数字型SQL注入)

代码
在这里插入图片描述

漏洞利用
在这里插入图片描述
HTTP头注入审计
在这里插入图片描述

漏洞复现(HTTP头注入)

代码
在这里插入图片描述

漏洞利用
在这里插入图片描述

盲注

盲注最大的特点就是注入返回的数据不会在页面上进行显示。所以才叫做盲注。一般我们都借助脚本进行注入。
我们看看代码
在这里插入图片描述
漏洞利用

在这里插入图片描述

宽字节注入

在PHP连接Mysql的时候,设置set character_set_client=gbk 会导致一个编码转换的注入问题。
我们看看代码
在这里插入图片描述
漏洞利用:
由代码分析。得到当用户传入name变量的值,不做任何过滤直接拼接进SQL语句,并且设置了set character_set_client=gbk ,导致产生了宽字节注入漏洞。
在这里插入图片描述

0x02 XSS跨站代码审计

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有:echo printf print print_r sprintf die var-dump var_export.
1、 漏洞挖掘
XSS漏洞比SQL注入更多,也更难防,经常出现在文章发表、评论回复、留言以及资料设置等地方,在通读代码的时候可以重点关注这几个地方。挖掘XSS的漏洞关键在于寻找没有被过滤的参数,且这些参数传输到输出函数,常见的输出函数有print、print_r、printf、spintf、echo、die、var_dump、var_export,所以我们只要寻找带有变量的这些函数即可。

pikachu靶场案例(储存型XSS)

代码分析
在这里插入图片描述
直接输出用户提交的数据
触发储存型XSS
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码分析
在这里插入图片描述
且没有对用户输入的值进行过滤,我们继续往下看

pikachu靶场案例(反射型XSS)

代码分析
在这里插入图片描述
编写URL

http://pikachu.com/vul/xss/xss_reflected_get.php?message=<script>alert(/XSS/)</script>&submit=submit

触发漏洞
在这里插入图片描述

0x03 文件上传代码审计

当我们上传文件时,程序没有做任何过滤,限制。我们可以直接上传能被服务器解析的WebShell。这样我们就触发了一个任意文件上传漏洞。
漏洞条件:
文件可上传
知道文件上传路径
上传文件可以被访问
上传文件可以被执行
我们的可控点有哪些?
1、Content-Length,即上传内容大小。
2、MAX_FILE-SIZE,即上传内容的最大长度。
3、filename,即上传文件名。
4、Content-Type,即上传文件类型。请求包中的乱码字段,即是所上传文件的内容,有可能存在请求包中的可控点还有上传路径

pikachu靶场案例(文件上传,客户端验证)

代码分析
在这里插入图片描述
这里只做了前端的验证,允许的类型在,checkFileExt里,我们跟进去

代码分析
在这里插入图片描述
那我们直接绕过前端的验证,提交数据包就好了
漏洞利用。利用Burp绕过前端校验
在这里插入图片描述
访问我们的webshell
在这里插入图片描述
代码分析
在这里插入图片描述
由代码分析得知,服务端只校验了MIME类型,不校验文件后缀,那我们直接上传webshell就不行了,如下图。
在这里插入图片描述
我们直接更改 Content-Type的类型绕过服务端的判断
在这里插入图片描述
绕过成功
在这里插入图片描述
代码分析
在这里插入图片描述
在这里插入图片描述
往下看这个函数,发现使用了getimagesize函数。进行图片的验证

代码分析
在这里插入图片描述
使用getimagesize函数进行验证,且不限制文件后缀,那我就利用文件头伪造,进行绕过。用图片马即可绕过

漏洞利用
在这里插入图片描述

0x04 其他漏洞代码审计

设计上需要给用户提供指定的远程命令操作的接口,没有对其做严格的输入控制,导致用户提交一些其他的系统命令也能够执行

常用命令执行函数
exec()、system()、popen()、passthru()、proc_open()、pcntl_exec()、shell_exec() 、反引号` 实际上是使用shell_exec()函数
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
popen()、proc_open() 不会直接返回执行结果,而是返回一个文件指针

代码分析
在这里插入图片描述
漏洞利用,服务器为LINUX,我这里使用分号;
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值