代码审计

代码审计工具: Seay RIPS

php配置常量 含义
PHP_INI_USER 该配置项可在用户的PHP脚本或者windows注册表配置
PHP_INI_PERDIR 该配置项可在php.ini .htaccess 或者 httpd.conf中设置
PHP_INI_SYSTEM 改配置项可在php.ini 或者httpd.conf中设置
PHP_INI_ALL 该配置项可在任何地方配置
php.ini only 该配置项仅可在php.ini中配置

PHP安全配置

PHP 安全配置多达百项,这里只列出和安全相关的配置项。

一、代码审计基础

1. register_globals(全局变量注册开关)

该选项设置为ON的情况下,会直接把GET、POST等方式传递的参数注册为全局变量并初始化为参数对应的值,使得提交的参数可以直接在脚本中使用。

register_globals 在PHP版本小于等于4.2.3版本时设置为PHP_INI_ALL,从PHP5.3.0起都被废弃,不推荐使用,在PHP5.4.0中移除了该选项。

2018-12-12

1.莫斯密码

对照一下就出来了

2.栅栏密码

用栅栏密码解密,得到flag,栅栏数为2

3.OK

使用OOK在线解密工具即可

4.这不是莫斯

1
2
3
4
5
6
7
+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++[- >---< ]>--- .---- .<+++ ++++[ ->--- ----<
]>--- ----- ----- .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- -----
-<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->-- -<]>- ----. <++++ +++[-
>---- ---<] >---- ----. +++++ +..++ +++.+ .<+++ [->-- -<]>- --.<+ +++++
+[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.--- -.+++ ++.<+ ++[-> +++<] >++++
++.<

https://www.splitbrain.org/services/ook

brainfuck j加密

5. 简单加密

e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA

凯撒密码,带移位版本,在线工具:

https://tool.bugku.com/jiemi/

6.散乱的密文

lf5{ag024c483549d7fd@@1}
一张纸条上凌乱的写着2 1 6 5 3 4
1.建表

2 1 6 5 3 4
l f 5 { a g
0 2 4 c 4 8
3 5 4 9 d 7
f d @ @ 1 }

f25dl03fa4d1g87}{c9@544@

然后用栅栏密码解密

7.凯撒部长的奖励

凯撒密码

https://tool.bugku.com/jiemi/

8.

bugku 社工

1.密码

根据名字和生日猜

2.信息查找

用googlehack搜索
inurl: www.toutiao.com bugku.cn

3.简单个人信息收集

伪加密。

java -jar ZipCenOp.jar r 1.zip

4.社工

现在已经找不到社工库了。。

5.社工进阶

php常见漏洞分析

目录绕过技巧

1.若存在字符检测,如strstr函数等,可以使用../http/../来绕过

其中http是strstr所检测字符

  1. ../ 效果等同于 ..//////

正则绕过技巧

在做一个比赛题目,需要绕过preg_match函数。

代码:

1
2
3
4
5
6
7
8
<?php
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}

if(!is_php($input)) {
// fwrite($f, $input); ...
}

正则匹配进行回溯过程的最大长度限制为100W,因此 构造 数据+ x*1000000可以绕过使正则匹配失效。

修复方法 使用 ===0 来对正则匹配的结果进行判断k


file(“./flag.php”) 读取文件
print_r() 输出变量
GLOBALS 全局变量!
php://filter/read/convert.base64-encode/resource=index.php

bugku杂项

1.签到

扫面二维码

2.这是一张单纯的图片

十六进制文本打开,发现html编码,复制打开得到flag

3.隐写

使用010编辑器,安装png模板,修改图片高度,得到flag

4.telnet

使用 wireshark搜索flag。

5.眼见非实(ISCCCTF)

二次解压,获得flag

6.啊哒

该题就有些难度了,

1.查看图片详细信息,照相机型号里面找到一串ascii码,解码得:sdnisc_2018

2。使用foremost从图片中剥离zip文件。用以上密码打开。

7.又一张图片,还单纯吗

使用foremost 分离出flag

8.猜

百度搜图,搜到是刘亦菲 。输入

9.宽带信息泄露

百度搜索路由配置解密工具:routerpassview,解密即可

10.隐写2

用foremost解析,得到一个zip,里面还有个压缩包和一个图片

图片提示密码三位数,爆破 fcrackzip 或者 ARCHPR都可以爆破,改文件实际是ZIP文件

得到3.jpg。在文件结尾得到flag字符串,但是最后还要进行一次base64

11.多种方法解决

把base64丢到网上去解码图片,扫描二维码拿到flag

12.闪的好快

1.修复图片高度为280
2.分割图片为单独图片,分别扫二维码得到flag

13.come_game

发现是个游戏,打开游戏桌面有个存档文件,对比存档文件发现第三个字节为关卡,慢慢修改按R,得到flag{6E23F259D98DF153}

奇怪的是无法提交,百度搜索一下发现 SYC{6E23F259D98DF153},官方无任何提示格式的地方。。。

14.linux

下载文件cat一下,拿到flag

15.隐写3

用010editor修改图片高度,拿到flag

16.做个游戏(08067CTF)

下载是个jar文件,使用jd-gui对其进行源代码查看,拿到flag,base64

17.想蹭网先解开密码

1.构造字典:根据题意用crunch工具构造字典

crunch 11 11 -t 1391040%%%% > 1.txt

2.利用kali工具爆破密码,可惜是wpa的,也只能是wpa的。

aircrack-ng -w 1.txt wifi.cap

18.Linux2

1.用foremost打开,发现个假flag
2.用cat flag | grep -a KEY{ 找到flag

19.账号被盗了

1.抓包发现Cookie: isadmin=false 改为true,给个下载地址

下载文件后使用,WSExplorer 1.3抓包,得到网易邮箱账号密码,登录后得到flag。

20.细心的大象

1.foremost 得到rar但没有密码
2.把图片丢到linux grep 一下key 发现个base64的密码。
3.解压缩rar得到3.png,修改图片高度得到flag

21.爆照(08067CTF)

1.用foremost找到zip,很多个8的图片
2.二维码2张 图片信息包含base64一张。
得到flag{bilibili_silisili_panama}

脑洞有点大

22.猫片(安恒)

提示为LSB BRG NTFS

这题就比较牛逼了,先用Stegsolve,发现LSB,BGR里面藏有一个png图片,然后得到一张二维码,用010editor修复后反色扫描。

得到一个url,打开下载后告诉你这不是flag,然后还必须用WinRAR解压压缩包,得到一个flag.txt,接着用NtfsStreamsEditor2找到隐写的flag.pyc,通过网上解密程序得到python源文件,然后读代码编写解密脚本得到flag!!!!

23.多彩

1.通过Stegsolve查看得到PK.zip

发现压缩包里面有个flag.txt 还要输入密码,双击打开提示压缩包损坏,怀疑压缩包被修改

放弃,这题看了题解,目前觉得这题脑洞太大,我暂时接受不了。

24.旋转跳跃

这题纯粹考验工具会不会用。。。

使用 MP3Stego

Decode.exe -X -P syclovergeek sycgeek-mp3.mp3 得到flag

25.普通的二维码

二维码丢到十六进制文本编辑器当中,文件后面发现一串八进制代码,解码得到flag

26.乌云邀请码

LSB 隐写。勾选000 和 BGR得到flag

27.神秘的文件

明文破解zip使用工具:Advanced Zip Password Recovery || 又称 AZPR

zip密码通过对比正确文件爆破 得到.docx 改成.zip解压,base64后得到flag

28.图穷匕见

  1. jgp文件结尾:FF D9 后面跟着一大串数字,ASCII解码一下,得到一堆坐标数据

运行 gnuplot

执行 plot “point.txt”
内容按照格式
x y
x y
去掉逗号和括号

29.convert

1
2
3
4
5
6
import struct
aa="01110101字节"
with open ("1.txt","wb+") as f:
for i in range(0,int(len(aa)/8)):
s = int(aa[i*8:i*8+8],2)
f.write(struct.pack('B',s))

编写脚本将数据转16进制再写入到文件,发现是个rar压缩包,解压得到key.jpg,在详细信息找到个base64解码得到flag

30.听首音乐

1.用音频工具打开文件,发现莫斯编码,解码后得到flag

31.好多数值

看到一堆rgb,用脚本跑出图片长和宽,再用脚本显示图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PIL import Image
##2 30683.0
##61 1006.0
##122 503.0
##503 122.0
##1006 61.0
im = Image.new("RGB",(503,122))
file = open('color.txt') #打开rbg值文件
for i in range(503):
for j in range(122):
s=file.readline()
s=s.split(",")
im.putpixel((i,j),(int(s[0]),int(s[1]),int(s[2])))
im.show()

32.很普通的数独(ISCCCTF)

这题脑洞真大。5X5 一共 25张数独,是一个二维码阵列。。

33.PEN_AND_APPLE

ntfs流,用到工具AlternateStreamView,但是似乎是题目有问题,给的一个mp4.应该给一个rar才对。

34.color

给了7张图片,用stegsolve打开每张图片,得到提示 makemetall,加高图片长度,得到7个字节的排列。转ascii码 得到flag

35.好多压缩包

该题太难。。。。

36.一个普通的压缩包

看了writeup,不知道为什么是改那一位 现在记下来:

7c改为74 即可

bugku 流量分析

1.flag被盗了

拿到一个key.pcapng

首先是熟悉Wiresharrk这个软件,可以通过追踪http流,发现传输一个text文件,才从里面发现flag

2.中国菜刀

该题考点是流量分析,找到最后一个http,进行追溯,发现一串base64,查看执行代码。

得到X@Y + flag.tar.gz + X@Y

提取解压

3.这么多数据

1.len为0的不看,为端口扫描数据
2.追踪过的端口不再追踪
3.注意wireshark的颜色变化

4.手机热点

1.用foremost直接拿到rar里面的flag
2.用wireshark分析里面存在一个secret.rar ,提取数据,找到flag图片

5.抓到一只苍蝇

搜索flag.,发现用户上传一个fly.rar,大小为527521字节

{“path”:”fly.rar”,”appid”:””,”size”:525701,”md5”:”e023afa4f6579db5becda8fe7861c2d3”,”sha”:”ecccba7aea1d482684374b22e2e7abad2ba86749”,”sha3”:””}

跟踪流将文件下载,提取去掉包头,拼接得到rar

下载文件时发现大小为 529341 字节

计算得到包头大小 364字节

使用dd命令切掉包头

dd if=输入文件名 bs=1 skip=364 of=输出文件名

将结构拼接成rar,打开发现报错。

发现md5值与文件对不上,发现第17位为84,可能是伪加密,将其改为80,解压得到flag.txt

查看文件结果是个exe可执行文件,用二进制文件编辑器打开,拖至最后,发现一张png图片,扫码得到flag。

注:期间使用foremost提取rar得到一个有问题的rar

最后也可以将图片丢到foremost里面,提取出二维码

PHP超全局变量

$GLOBALS

$GLOBALS : 引用全局作用域中可用的全部变量

举例:

1
2
3
4
5
6
7
8
9
10
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
// 通过 $GLOBALS 可以访问之前已经定义的全局变量。
?>

PHP简介

问题1:php能做什么

PHP主要用于以下3个领域:

  • 服务端脚本 (主要)
  • 命令行脚本(执行shell脚本等)
  • 编写桌面应用程序

对于编写桌面应用程序,PHP可能不是最适合的一门语言,但若是用户非常精通PHP脚本语言,并希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK 来编写这些程序。

注:PHP从5.0版本开始支持面向对象语言开发。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。使用任何针对某数据库的扩展(例如 mysql)编写数据库支持的网页非常简单,或者使用抽象层如 PDO,或者通过 ODBC 扩展连接到任何支持 ODBC 标准的数据库。其它一些数据库也可能会用 cURL 或者 sockets,例如 CouchDB。