CTF-练习平台WEB部分writeup

web2 http://120.24.86.145:8002/web2/

F12查看源代码就可以找到了。

文件上传测试 http://103.238.227.13:10085/

打开以后,看到要求有两点,如下:

有两点要求:

  • 1.要求是PHP文件
  • 2.文件大小不超过1M

猜测,是检测图片头的,从png里面把最前面的内容粘贴到PHP文件中,后面附上php的代码。

文件大小两个k , 两个要求都满足了,上传。

失败,抓包测试。

修改Content-Type: 为:image/png提交

计算题 http://120.24.86.145:8002/yanzhengma/

打开界面看到这个,计算出结果以后,发现,输入框只让填写一个数字,心想是js前端验证,burp抓包修改数值就行了吧。

发现根本没有发送数据包,那flag肯定在js里面

Web基础$_GET http://120.24.86.145:8002/get/

看到关键代码,直接get提交一个’flag’即可

web基础$_POST http://120.24.86.145:8002/post/

跟上面那个GET的一样,很基础

矛盾 http://120.24.86.145:8002/get/index1.php

这个题两个要求:

  • 1.$num 不是integer类型的数据
  • 2.$num 要等于1

考到的点是PHP的弱数据类型,payload : 1e0

PHP在做数据转换的时候会自动向高精度转化,然后就变成了1e0 这个是科学计数法,其值刚好等于1.(但是:1e0是integer类型的)

Web3 http://120.24.86.145:8002/web3/

web3的提示:

估计是flag 放在了html里面,然后打开:

弹了好多框,弹框貌似点不完,直接在URL前面加上view-source:即可,当然禁用JS之后查看源代码也行

html实体编码,直接创建一个html文件,把这段字符放进去用浏览器打开就行了。

sql注入 http://103.238.227.13:10083/

提示注入,但是打开页面以后,在id后面添加任何东西都没有反应,之前见过id=100之前的页面都错误,id=101时给出其他提示的题目,测试后也没发现有其他提示,但是发现了:

id = 0 或者 1 的时候页面显示正常,id是其他值的时候,页面均是错误的。

后来百度了一下,是宽字节注入,可能自己对宽字节注入知识掌握的不够。

宽字节注入产生的原理:在开启转义时,单引号会被转义成\’ ,当数据库字符集是gbk的时候,可以用%df等宽字节来将单引号前的\来抹去,从而闭合单引号。

构造正确页面:

http://103.238.227.13:10083/index.php?id=1%df'--+

这里要注意,在注入的时候,sql的注释符 尽量用–+ 或者 %23 ,因为有时候–会被数据库认为是减号。–后加任意一个非空格字符则表示为注释符号。

然后直接扔到sqlmap即可。

http://103.238.227.13:10083/index.php?id=1%df'*--+

注入语句加在*位置

SQL注入1 http://103.238.227.13:10087/

页面中附上了一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//过滤sql
$array = array('table','union','and','or','load_file','create','delete','select','update','sleep','alter','drop','truncate','from','max','min','order','limit');
foreach ($array as $value)
{
if (substr_count($id, $value) > 0)
{
exit('包含敏感关键字!'.$value);
}
}

//xss过滤
$id = strip_tags($id);

$query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";

其中过滤了很多sql注入的关键词,但是在xss过滤时候使用了strip_tags函数,这个函数的作用是把<>替换为空,那么sele<>ct就可以绕过关键字过滤。

payload:

http://103.238.227.13:10087/?id=1 uni<>on sel<>ect 1,hash fr<>om sql3.key %23

其中 key 要改成 数据库名.key 否则返回错误,可能当前页面和key不在同一数据库吧。