主页 > 网络知识 > 代码审计思路讨论(3)

代码审计思路讨论(3)

首先我们先了解一下XSS漏洞,说白了就是让客户端执行了一串恶意代码。无论是一次性执行还是存在在服务器里面多次执行。那么他的危害是什么呢?准确来说,前端利用代码能够做到什么,XSS就可以做到什么。那么想要达到这个效果。我们该过程的核心是什么?输入点?还是数据流?我的理解是数据流。即在数据传输过程中的变化。也可以这么说我们提交的数据在传送过程中是否被过滤。

既然核心在于数据流,我们反过来考虑。我们在输出点的位置查看变量。回溯看看该变量是否存在过滤,以及输入位置。常见的一些输出函数有:print,print_r,echo,printf,sprintf,die,var_dump,var_export。

常见的XSS漏洞位置:文章发表,评论回复,留言,资料设定等位置。

注意:浏览器的容错,编码等特性

3.2、XSS漏洞举例

这里我打算举个存储XSS例子。首先我们思考一个问题,存储XSS是将代码存入数据库当中。那么在PHP代码当中存入输入所使用的sql语句是什么呢?没错insert into 。那是不是存在存储XSS必要条件是存在该语句呢。好的,现在我们搜索一下。

 

代码审计思路讨论

 

大家是不是很奇怪,红框为什么不包含下面的文件。嗯,各位仔细看看,那特么特么需要管理员权限才能进去的。我要是有管理员权限,我会折腾这个???

好的,我们依旧选中user.php文件,打开并且定位到insert位置。

 

代码审计思路讨论

 

现在语句位置我们已经清楚了。现在我们查看赋值变量是否存在过滤。或者我们可以先登录界面看看什么样的变量是我可控的。即输入点。奇怪的是变量act=do_reg的时候不能打开界面,我们发现参数等于reg的时候可以开。

 

代码审计思路讨论

 

右击查看源码就可以发现,点击“提交注册”,act的值会修改为do_reg。

 

代码审计思路讨论

 

好的,现在我们发现可控的参数用户名,密码,邮箱,验证码,当中验证码需要与后台验证不可控。密码会经过MD5加密,折腾了意义也是不大的。那么接下来看看用户名,邮箱,用户名长度限制。这里最好的选择就是邮箱这个参数。结合上下文看看,变量邮箱没有被htmlspeciaichars函数过滤。我们来试试弹一个。<script>alert(XSS)</script> 。

 

代码审计思路讨论

 

很快我发现了一个很尴尬的问题,格式不对。回头查看源码,发现报错信息。并且当变量uid等于-4的时候,会出现这样的报错。找了半天发现没有找到。估摸着是前端验证。抓包输入吧。

注意:这里我们需要考虑一个问题,即输出点的位置是否在属性内。

抓包并且成功注入。(做完忘记截图了,各位自己想象吧)

查看数据库当中确实已经存储:

 

代码审计思路讨论

 

登陆账号弹框:

 

代码审计思路讨论

 

代码执行位置:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!